在一个嵌入式系统中使用Linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过如下的过程:
1.建立开发环境
*** 作系统一般使用RedHat-Linux,版本从7到9都可以,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(例如arm-Linux-gcc、arm-μclibc-gcc),或者安装产品厂家提供的交叉编译器。
2.配置开发主机
配置MINICOM,一般的参数为波特率为115 200bps,数据位为8位,停止位为1,无奇偶校验,软件硬件流控设为无。在Windows下的超级终端的配置也是这样的。MINICOM软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络,主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
3.建立引导装载程序BOOTLOADER
从网络上下载一些公开源代码的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据自己具体的芯片进行移植修改。有些芯片没有内置引导装载程序,例如三星的ARM7、ARM9系列芯片,这样就需要编写开发板上Flash的烧写程序,网络上有免费下载的Windows下通过JTAG并口简易仿真器烧写ARM外围Flash芯片的烧写程序,也有Linux下的公开源代码的J-Flash程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是系统正常运行的第一步。如果购买了厂家的仿真器当然比较容易烧写Flash,这对于需要迅速开发自己产品的人来说可以极大地提高开发速度,但是其中的核心技术是无法了解的。
4.下载别人已经移植好的Linux *** 作系统
如μCLinux、ARM-Linux、PPC-Linux等,如果有专门针对所使用的CPU移植好的Linux *** 作系统那是再好不过的,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,对于μCLinux这样的系统则需编译进内核进行调试。
5.建立根文件系统
从www.busybox.net下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生烧写映像文件。
6.建立应用程序的Flash磁盘分区
一般使用JFFS2或YAFFS文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性Flash(NOR型)512KB~32MB,有的系统使用非线性Flash(NAND型)8~512MB,有的两个同时使用,需要根据应用规划Flash的分区方案。
7.开发应用程序
应用程序可以放入根文件系统中,也可以放入YAFFS、JFFS2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,这有点类似于μCOS-II的方式。
8.烧写内核、根文件系统、应用程序
9.发布产品
你装一个linux系统。当然虚拟机就行。先学习标准C、然后学习linux的Unix C当然这种C很相似。就是函数不太一样。思想都是一样的。上面两个网上都有教学视频。把网上的教学视频看完就差不多了。当然教程中要求练习的地方必须要动手做。只想大体思路是绝对不行的,这样学到的东西很不扎实。
这两个学习差不过了。就可以买一块开发板玩了。
如果你趋向于裸跑的程序,可以买一个arm7、arm9的板子,当然可以用cortex-m系列的也就是stm32系列的单片机开发板。裸跑和单片机没什么区别了。就是arm的cpu比单片机寄存器复杂一些。这就看你阅读cpu芯片手册的能力了。当然这个平台上也能跑一些系统比如uCOS就是个很好的实时 *** 作系统。
如果你趋向于 *** 作系统,你可以上cortex-a8 、a9系列的cpu了。这个需要学习的东西比较多。学习 *** 作系统的启动代码必须要学。现在最流行的是u-boot。
然后学习一下系统移植方面的东西:
1、文件系统制作 。流行的软件是busybox
2、系统裁剪。这个你买的开发板都会带平台代码。也可以在www.kernel.org上下载源码自己编译。
这个时候你就可以用u-boot(类似我们常见的主板bios)启动你的系统。加载你自己编译好的linux内核。系统就启动起来了。
最难学的是你要搞嵌入式系统的开发。基本要了解linux内核了。自己学的话需要在网上找一找相关教程看看。(这个我不知道有没有视频教程),没有的话要买一个《linux内核高级编程》学习。这本书太难啃了。
要学习 *** 作系统的嵌入式开发,还远不止我说的那些。还有库移植、makefile脚本也要学习。linux内核启动原理(启动过程加载那些文件、启动参数)。arm启动原理等等。
你可以边工作边学习,从事嵌入式周边行业的(嵌入式应用方面)所以可以学一学嵌入式的图形开发工具:QT,这个很有意思。然后慢慢的想嵌入式方向发展。这是一个漫长的过程。如果想速成也可以报班学习。
另外就是Unix c部分的网络编程很重要这个地方要学好。学好了也可以从事linux的网络协议栈相关工作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)