嵌⼊式Linux开发流程
在学习嵌⼊式开发的过程中,尤其是开始⼊门时,包括各种各样的教程,都是在讲学习linux,很少讲如何利⽤linux来开发属于⾃⼰的嵌⼊式项⽬,也就是没有⼀个全局的概念,简单理解,⼤概流程如下:
⼀、建⽴开发环境
操作系统当然是LInux,或者在win系统下安装虚拟机,通过⽹络下载相应的GCC交叉编译器进⾏安装,或者安装产品⼚家提供的交叉编译器。
这⼀步,就相当于在win系统下,要安装⼀个IDE开发环境,如MDK,IAR等。
⼆、配置开发主机
主要是配置minicom,也就是串⼝助⼿,minicom软件是作为调试嵌⼊式开发板信息输出的监视器和键盘输⼊⼯具,是⼀个⾮常⽅便的⼯具,我们开发其他嵌⼊式程序时,其实很多时候也采⽤串⼝调试,所以最终原理都是相通的。
配置⽹络,主要是配置NFS⽹络⽂件系统,这个主要是⽤于下载程序,当然不配置也可以,有很多别的办法。
三、建⽴引导装在程序的bootloader
常⽤的bootloader主要有u-boot、vivi等,貌似主流的就是u-boot,这个根据⾃⼰具体的芯⽚进⾏移植修改。有些芯⽚是没有内置引导加载程序的,这就需要编写开发板上的Flash的少些程序,当然也可以⽤windows下的通过JTAG并⼝和仿真器少些Flash芯⽚程序,也有linux下的公开源代码的J-Flash程序,所以在设计⾃⼰的硬件时,可以预留多种⽅式。
简单的讲,其实就是要做好⼀个属于⾃⼰板⼦的u-boot,完成初始化,内核引导,下载、烧写等。
四、移植嵌⼊式Linux操作系统
如果有专门针对你使⽤的CPU的Linux再好不过,⽐如uCLinux、ARM-Linux、PPC-Linux等,如果没有,就要尝试移植专属⾃⼰的linux了,然后再添加⾃⼰特定硬件的驱动程序,进⾏调试修改,对于带MMU的CPU可以使⽤模块⽅式调试驱动,⽽对于uCLinux这样的系统则需要编译进内核,与内核为⼀体,再进⾏调试。
五、建⽴根⽂件系统
前⾯的⽂章讲述过,没有根⽂件系统的Linux是⽆法正常⼯作的,还需要根⽂件系统。所以需要下载使⽤busybox软件来实现制作根⽂件系统。
再根据⾃⼰的应⽤需要来添加其他程序,默认的启动脚本⼀般都不会符合应⽤的需求(因为所有的嵌⼊式开发都是⾃由定制的),所以就要修改根⽂件系统中的启动脚本,它的存放位置⾄于/etc⽬录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,⾃动挂载⽂件系统的配置⽂件/etc/fstab,其实就是定制⾃⼰要开机启动的程序,具体情况会随着系统的不同⽽不同,根⽂件系统在嵌⼊式系统中⼀般设为只读,需要使⽤mkcramfs、genromfs等⼯具产⽣少些映像⽂件。
六、建⽴应⽤程序的Flash磁盘分区
⼀般会使⽤jffs2或者YAFF⽂件系统,这需要在内核中提供这些⽂件系统的驱动,有的系统使⽤NOR FLASH,有的系统使⽤NAND FLASH,也有的系统两种flash都使⽤,那么jffs2的作⽤是什么呢?
百科⾥的介绍是:jffs2全名为journalling flash filesystem version2(闪存⽇志型⽂件系统第⼆版),其功能就是管理MTD设备上实现的⽇志型⽂件系统,⽇志系统也是⼀个完整系统所必须的,不管是windows还是linux,有了这些才不算耍流氓,嘿嘿。jffs2并不准备提供提供类似与传统⽂件系统的功能,它只会直接在MTD设备上实现⽇志结构的⽂件系统,除了提供具有断电可靠性的⽇志结构⽂件系统,jffs2还会在它管理的MTD设备上实现"损耗平衡"和“数据压缩”等特性。
MTD(memory technology device内存技术设备),就是各种flash。
七、开发应⽤程序
应⽤程序可以放到根⽂件系统中,也可以放到yaffs、jffs2⽂件系统中,有的应⽤不使⽤根⽂件系统,直接将应⽤程序和内核设计在⼀起,就是类似于uCOS-II的⽅式。
其实,写到这,这⼀步才是最终的⽬的,前⾯的步骤都是为了这⼀步,我⾃⼰的理解,开发应⽤程序呈现的⽅式应该是有三种的:
嵌入式系统开发是什么(1)直接讲应⽤程序和内核设计在⼀起,类似与uCOS-II的⽅式,这种⽅式就是属于私⼈订制了,实现的功能种类是⽐较少的,只是专属,但是稳定性要求⾼的,⽐如说复杂交换机、防⽕墙等,可能更看中linux系统的稳定性和各种优秀的外围资源吧。
(2)基于qt等GUI开发应⽤程序,之前⼀直以为qt是linux绕不开的,其实随着了解,不尽然,qt其实就是⼀个桌⾯系统,⽐如说ubuntu,对于⾼⼿来说,有没有桌⾯都是⽆所谓的,因为所有都是可以通过shell来完成的,使⽤qt是⽅便⽤户使⽤,所以对于那些需要操作,有屏幕的嵌⼊式设备,这个是⼀个很好的⽅案。⽐如⽬前⼯控触摸屏还有各种⼿持式带有屏幕的仪表器械,都是这种⽅式。
(3)没有屏幕,只有简单的⼈机接⼝,⽐如串⼝,按键,数码管,这种也能实现复杂功能开发,⽐如说,完全可以开发⼀个基于linux的PLC,可编程⽅案,通过脚本实现,这也是⼀种很好的⽅案实现。
⼋、烧写内核、根⽂件系统、应⽤程序
⽆论怎么加载,模块也好,所有的这些开发,过程资料,都是要烧写到flash中的,然后应⽤程序需要什么,就加载对应的功能程序即可。
九、发布产品
写到最后,发现,之前还是过于迷信linux,不是说linux不好,⽽是说,对于嵌⼊式开发⼯程师来说,没有最好的,只有最适合的,开发⼀款产品,⽤什么,不⽤什么,都是因地制宜的。
⽐如说⼀个简单的跑马灯,你⾮要使⽤嵌⼊式linux⽅案,那就是烧包,只需要⼀个简单的2051,裸机程序就能开发,既便宜,⼜好⽤。
开发⼀款⼩型控制器设备,如果功能不太复杂,可以使⽤稍微⾼级的CPU,裸机或者ucos等来开发,也很⽅便,也能做很多定制版的⼯业⼩型控制器。
开发⼀款中⾼型的控制器设备,功能⽐较复杂,甚⾄需要复杂的屏幕交互,⽐如⼿机(安卓是linux的亲⼉⼦,OS是linux 的亲表弟),取款机,服务器交易系统,那么linux就⾮常合适了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。