Linux的开发流程

article/2025/11/5 16:10:48

嵌入式linux开发流程
在嵌入式学习的过程中,嵌入式linux的学习是不可少的,可以说嵌入式linux是学习比较困难的,会遇到各种各样的问题,那么嵌入式linux学习有一个重要的点就是嵌入式linux开发的流程,这是必须要知道的,接下来我们就看看这方面的大牛总结的嵌入式linux开发流程及一些遇到的困难,解决方法。

嵌入式开发流程其实很简单,但是里面是有很多小的东西需要你注意的,这也是我这么多年来的一些经验,先说嵌入式linux开发流程:

一 建立开发环境,首先你必须要会安装配置嵌入式linux开发环境,这个是基本

操作系统当然是LInux,或者在win系统下安装虚拟机,通过网络下载相应的GCC交叉编译器进行安装,或者安装产品厂家提供的交叉编译器。

这一步,就相当于在win系统下,要安装一个IDE开发环境,如MDK,IAR等。在这一点上,我时常会因为这出现一些问题,就因为配置没配好,导致下面的步骤没法进行,报错,要切记这里需要你仔细点。

二 配置开发主机

主要是配置minicom,也就是串口助手,minicom软件是作为调试嵌入式开发板信息输出的监视器和键盘输入工具,是一个非常方便的工具,我们开发其他嵌入式程序时,其实很多时候也采用串口调试,所以最终原理都是相通的。
在这里插入图片描述

嵌入式linux开发流程

配置网络,主要是配置NFS网络文件系统,这个主要是用于下载程序,当然不配置也可以,有很多别的办法。

三 建立引导装在程序的bootloader

常用的bootloader主要有u-boot、vivi等,貌似主流的就是u-boot,这个根据自己具体的芯片进行移植修改。有些芯片是没有内置引导加载程序的,这就需要编写开发板上的Flash的少些程序,当然也可以用windows下的通过JTAG并口和仿真器少些Flash芯片程序,也有linux下的公开源代码的J-Flash程序,在自己做的时候,可以预留多重方式,这样是有用的。

简单的讲,其实就是要做好一个属于自己板子的u-boot,完成初始化,内核引导,下载、烧写等。其实在这一点上,也会是个难点,这里需要掌握的东西多,这一流程的烧写,内核引导,网络上有免费下载的Windows下通过JTAG并口简易仿真器烧写ARM外围Flash芯片的烧写程序,也有Linux下的公开源代码的J-Flash程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是系统正常运行的第一步。如果购买了厂家的仿真器当然比较容易烧写Flash,这对于需要迅速开发自己产品的人来说可以极大地提高开发速度,但是其中的核心技术是无法了解的。

再来就是嵌入式Linux操作系统移植了

嵌入式linux开发流程

如果有专门针对你使用的CPU的Linux再好不过,比如uCLinux、ARM-Linux、PPC-Linux等,如果没有,就要尝试移植专属自己的linux了,然后再添加自己特定硬件的驱动程序,进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,而对于uCLinux这样的系统则需要编译进内核,与内核为一体,再进行调试。最好的就是下载别人已经移植好的Linux操作系统来弄,这样会高效

接下来就是根文件系统了

前面的文章讲述过,没有根文件系统的Linux是无法正常工作的,还需要根文件系统。所以需要下载使用busybox软件来实现制作根文件系统。

再根据自己的应用需要来添加其他程序,默认的启动脚本一般都不会符合应用的需求(因为所有的嵌入式开发都是自由定制的),所以就要修改根文件系统中的启动脚本,它的存放位置至于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂载文件系统的配置文件/etc/fstab,其实就是定制自己要开机启动的程序,具体情况会随着系统的不同而不同,根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生少些映像文件。记得这一步要看好,别为了省时间写错。

弄好上面那么接下来就简单了就是建立应用程序的Flash磁盘分区

一般会使用jffs2或者YAFF文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用NOR FLASH,有的系统使用NAND FLASH,也有的系统两种flash都使用,到时候就看具体情况了。

开发应用程序

应用程序可以放到根文件系统中,也可以放到yaffs、jffs2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,就是类似于uCOS-II的方式。

其实,上面的那些步骤也就是为了这一步,在这里你要注意他有三种呈现方式:

(1)直接讲应用程序和内核设计在一起,类似与uCOS-II的方式

(2)基于qt等GUI开发应用程序

(3)没有屏幕,只有简单的人机接口,比如串口,按键,数码管,这种也能实现复杂功能开发

现在就是对烧写内核、根文件系统、应用程序的加载了(其实差不多也就完了)

无论怎么加载,模块也好,所有的这些开发,过程资料,都是要烧写到flash中的,然后应用程序需要什么,就加载对应的功能程序即可。

四 发布产品

开发一款中高型的控制器设备,功能比较复杂,甚至需要复杂的屏幕交互,比如手机(安卓是linux的亲儿子,OS是linux的亲表弟),取款机,服务器交易系统,那么linux就非常合适了。

开发一款小型控制器设备,如果功能不太复杂,可以使用稍微高级的CPU,裸机或者ucos等来开发,也很方便,也能做很多定制版的工业小型控制器。

嵌入式linux开发流程差不多就是这样了,在学习时一步一步来,就不会出错,大牛说的这些都学习到了吗,掌握这些方法,嵌入式linux开发流程就不是事儿。


http://chatgpt.dhexx.cn/article/5rEImITO.shtml

相关文章

Linux开发速记教程之第一篇

一、Linux职业方向 ①、服务器运维;②、应用软件开发;③、设备驱动开发。 二、设备驱动开发 Linux 系统的一个重要设计哲学是一切皆文件。包括硬件设备,对于系统来说也是一个文件,所以系统向上层应用程序提供 open、 write、 re…

Linux开发工具详解

目录 前言一.Linux编辑器-vim使用1.vim的基本概念2.vim命令模式命令集3.vim底行模式命令集4.简单的vim配置 二.Linux编译器-gcc/g使用1.背景知识2.gcc如何完成a.预处理(进行宏替换)b.编译(生成汇编)c.汇编(生成机器可识别代码)d.链接(生成可执行文件或库文件)e.重要概念f.动态链…

直接跳转与间接跳转

转载自: https://www.csdn.net/tags/MtjaIg1sNDE1MDYtYmxvZwO0O0OO0O0O.htmlhttps://www.csdn.net/tags/MtjaIg1sNDE1MDYtYmxvZwO0O0OO0O0O.html 正常执行的情况下,指令按照它们出现的顺序一条一条地执行。跳转(jmp)指令会导致执行切换到程序中一个全新的位置。 …

Vue路由跳转传参或打开新页面跳转

1. 通过路由中的name属性 使用params传递参数, 使用this.$route.params获取参数 这种方式传递相当于post请求, 传递的数据不会显示在url地址栏,但是页面刷新,参数会丢失 1 2 3 4 5 6 7 8 9 // 传递参数 this.$router.push({ name: "首页", params: { …

Nginx 跳转

目录 一.Nginx常见模块1.http2.server3.location 二.location1.一般分为普通和正则2.location 常用的匹配规则3.location 示例4.location优先级排列说明 三.REWRITE模块1.功能2.跳转场景3.跳转实现4.执行顺序5.语法格式6.实例6.1域名跳转6.2基于客户端IP 访问跳转6.3基于旧域名…

pyqt5的页面跳转

前言: 正在学习python,学到了文件读取操作,想用pyqt5实现一下,发现我对于pyqt5还是不够了解。 现在记录一下我用pyqt5实现页面跳转的过程 方便以后查阅 pycharm使用pyqt5的话建议解释器用python3.7 由于目前我的水平还是太菜&…

div链接跳转

1、先建立一个div 2、给div写个id,直接写个go吧,再写个class,就叫go1吧 3、给它里面写个你要跳转的网址名称 4、给它设置个样式,弄个黑色背景什么的 5、然后把字体调成白色,文字居中 6、这是目前这个div的样子 7、接着…

layui页面跳转

//模拟单页跳转 $(document).ready(function(){ $(“dd>a”).click(function (e) { e.preventDefault(); $("#iframeMain").attr(“src”,$(this).attr(“href”)); }); }); 逻辑:通过jq拿a的href值放到iframe的src属性上 解释: e.preventD…

html-超链接跳转-外部和内部页面跳转

a标签表示超链接 1、通过a标签来表示超链接,点击超链接文本可以跳转到绑定的网站地址 1表示外部的地址 2表示内部的页面的访问地址,不是填写内部页面,内部页面访问地址

AS页面跳转

在MyAdapter中定义如下接口,模拟ListView的OnItemClickListener: //define interface public static interface OnItemClickListener { void onItemClick(View view , int position); } 1 2 3 4 声明一个这个接口的变量: private OnItem…

页面跳转的两种方式(转发和重定向)区别详解:

转发和重定向的路径问题(重点) 1)使用相对路径在重定向和转发中没有区别 2)重定向和请求转发使用绝对路径时,根/路径代表了不同含义 重定向response.sendRedirect(“xxx”)是服务器向客户端发送一个请求头信息,由客户端再请求一次…

go语言web开发系列之八:gin框架中用go-redis缓存数据

一,安装需要用到的库 1,安装go-redis liuhongdiku:~$ go get -u github.com/go-redis/redis 说明:刘宏缔的go森林是一个专注golang的博客, 网站:https://blog.imgtouch.com 原文: go语言web开发系列之八:gin框架中用go-redis缓…

go语言web开发系列之二十一:用go-qrcode库生成二维码

一,安装用到的库 1,go-qrcode库的地址 GitHub - skip2/go-qrcode: :sparkles: QR Code encoder (Go) 2,安装go-qrcode库 liuhongdiku:~$ go get -u github.com/skip2/go-qrcode/... 3,resize库的地址(在二维码中间放icon时太大时需要缩放…

go语言web开发出错

2019独角兽企业重金招聘Python工程师标准>>> err listen tcp :8080: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 原因:开了两个服务器,造成监听端口冲突 转载于:https://my.osc…

go语言有哪些web框架

前言 由于工作需要,这些年来也接触了不少的开发框架,Golang的开发框架比较多,不过基本都是Web”框架”为主。这里稍微打了个引号,因为大部分”框架”从设计和功能定位上来讲,充其量都只能算是一个组件,需要…

go语言服务器代码,Go语言开发简单web服务器

欢迎,来自IP地址为:182.103.254.107 的朋友 Go语言由于其方便的并发通信机制以及强大的网络支持,常常被用于服务器软件的开发。本文将示例使用Go语言来开发简单的Web服务器。 HTTP协议是应用层协议,协议模型位于TCP之上&#xff0…

Go语言WEB开发[html/template包]

Go语言Web开发 Go语言提供了html/template包来支持模板渲染。Go提供的html/template包对HTML模板提供了丰富的模板语言,主要用于Web应用程序。 模板中的变量 模板中的变量通过{{.}} 来访问。 {{.}} 称为管道和root。 在模板文件内,{{.}}代表当前变量&…

Go语言web开发

一. HTTP Http:无状态协议,是互联网中使用Http实现计算机和计算机之间的请求和响应 Http使用纯文本方式发送和接收协议数据,不需要借助专门工具进行分析就可以知道协议中数据 Http报文(message)组成部分 请求行(request-line)请求头(head)请求体(body)响应头响应体 HTTP 1.1 实…

Go进阶:Go语言最热门的开源Web开发框架总结

注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus Go语言是近年来备受关注的一种编程语言,它以其高效、安全、简洁的特…

Go语言五大主流web框架

以下 star数截止2023年7月份 1.Gin(69.7K) 项目简介:Gin 是一个用 Go (Golang) 编写的 HTTP Web 框架。 它具有类似 Martini 的 API,但性能比 Martini 快 40 倍。 仓库地址:https://github.com/gin-gonic/ginhttps:…