您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 4基于Linux的嵌入式系统开发
2020/1/121第4章基于Linux的嵌入式系统开发2020/1/122本章要点掌握嵌入式系统开发流程掌握嵌入式Linux文件系统掌握Flash程序烧写理解BootLoader的基本知识理解内核裁剪和编译方法理解根文件系统的构建方法2020/1/123本章内容4.1嵌入式系统开发流程4.2Flash程序烧写4.3嵌入式Linux文件系统4.4BootLoader4.5Linux内核的配置和移植4.6根文件系统的构建2020/1/1244.1嵌入式系统开发流程(1)建立宿主机开发环境(2)配置宿主机(3)建立引导装载程序BootLoader(4)下载别人已经移植好的Linux操作系统(5)建立根文件系统(6)建立应用程序的Flash分区(7)开发应用程序(8)烧写内核、根文件系统、应用程序(9)发布产品操作系统一般使用RedHatLinux9.02020/1/125(2)配置宿主机串行通信软件的配置在进行开发调试,利用Windows上的超级终端和Linux下的minicom充当开发板的信息输出监视器。这两个软件都是通过串口与开发板相连的,连接时需要配置相应的串口属性网络的配置配置NFS网络文件系统,利用挂载形式对可执行文件进行调试。2020/1/126(3)建立引导装载程序BootLoader目前最常用的方法从网上下载一些公开源代码的BootLoader程序,如U-Boot、BLOB、VIVI、LILO、ARM-Boot、RedBoot等,根据自己的芯片进行移植修改引导程序的烧写针对ARM处理器,在网上下载免费的烧写程序利用该程序,在Windows下通过JTAG并口简易仿真器,将引导程序烧写到Flash存储器芯片的对应分区中。2020/1/127(4)下载别人已经移植好的Linux操作系统下载后根据自己的系统要求进行裁剪、配置,再添加自己的特定硬件的驱动程序,进行调试修改,最终得到一个适合于自己平台的内核将其进行交叉编译,就可以得到符合要求的内核映像文件最后将其下载到Flash存储器芯片的相应分区中运行。2020/1/128(5)建立根文件系统在嵌入式系统中,有一个非常重要的创建根文件系统的工具——BusyBox,它能产生一个最基本的根文件系统。有了这个最基本的根文件系统,再根据需要添加其他文件,即可构成一个完整的根文件系统。根文件系统在嵌入式系统中一般为只读,需要使用mkcramfs、genromfs等工具产生烧写映像文件,并将其烧写到Flash芯片的相应分区中运行。2020/1/129(6)建立应用程序的Flash分区上述映像文件准备好了以后,需要将它们烧写到开发板的Flash存储器的相应分区中,所以在烧写之前需要按照一定顺序、一定大小将Flash存储器进行分区。2020/1/1210(7)开发应用程序应用程序的编写还是利用交叉开发环境的宿主机,在宿主机中编写程序并进行调试,没有问题之后就可以使用交叉编译器对其进行交叉编译。2020/1/1211(8)烧写内核、根文件系统、应用程序将步骤3、4、5和7中准备好的各类映像文件烧写到已分好区的Flash中,并进行调试运行。2020/1/12124.2Flash程序烧写烧写的内容BootLoader——vivi内核——zImage根文件系统——root.cramfs应用程序——yaffs.tar.bz2烧写的步骤1、安装JTAG驱动程序2、烧写引导程序vivi3、烧写内核zImage4、烧写根文件系统root.cramfs5、烧写应用程序yaffs.tar.bz2使用的操作系统:WindowsXP2020/1/12131、安装JTAG驱动程序1、把并口线插到pc机的并口,并把并口与JTAG相连,JTAG与开发板的14针JTAT口相连,打开2410-S2、把整个GIVEIO目录(在flashvivi目录下)拷贝到C:/WINDOWS下,并把该目录下的giveio.sys文件拷贝到c:/windows/system32/drivers下3、在控制面板里,选“添加硬件”,如图所示:2020/1/12142020/1/12152020/1/12162020/1/12172020/1/12182020/1/12192020/1/12202020/1/12212020/1/12222020/1/12232020/1/12242020/1/12252020/1/12262、烧写引导程序VIVI1、在d盘新建一目录bootloader,把sjf2410-s(在flashvivi目录下)和要烧写的vivi拷贝到该目录下2、选择“开始菜单”-“程序”-“附件”-“命令提示符”,进入dos3、在dos下进入bootloader目录,运行sjf2410-s命令如下:sjf2410-s/f:vivi,回车2020/1/12272020/1/1228第一次选择Flash2020/1/1229第二次选择JTAG对Flash的两种功能2020/1/1230第三次选择烧写的起始地址2020/1/1231烧写后关闭2410-S,拔掉JTAG与开发板的连线。2020/1/12323、烧写内核zImage内核的烧写就是将内核编译得到的zImage映像文件烧写到开发板的Flash存储器的kernel分区内核的烧写要利用vivi程序的下载模式,使用vivi下载命令load进行烧写。2020/1/1233内核的烧写过程(1)用网口线连接pc和2410-S(2)打开超级终端,先按住pc机“BackSpace”键,然后启动2410-S,进入vivi状态下,设置开发板IP(其IP要与服务器IP在同一网段,内核启动后将失效),其命令为:setc192.168.0.1152020/1/12342020/1/1235(3)设置tftp服务器IP(启动tftp服务器的主机)2020/1/1236(4)Windows平台下tftp服务的配置:在D盘下新建一个tftpd32目录将随机附带光盘中“linux\img”目录下的tftpd32.exe文件拷贝到Windows的“D:\tftpd32”目录下,并新建文件夹tftp32,将光盘中“\img”目录下文件拷贝到该目录下。双击“D:\tftpd32”目录下的tftpd32.exe文件,对Windows下的tftp服务进行配置2020/1/12372020/1/12382020/1/1239(5)烧写内核2020/1/12404、烧写根文件系统root.cramfs在vivi状态下,输入烧写根文件的命令为:2020/1/12415、烧写应用程序应用程序也比较大(20多MB),所以通过网口进行烧写。这里使用FlashFXP来传输文件。(1)重启开发板,进入到[/mnt/yaffs]下,用ifconfig命令设置开发板的IP地址同PC机的IP地址(WindowsXP操作系统下的本地连接2的IP地址)在同一网段上2020/1/12422020/1/1243(2)在PC机上,将将随机附带光盘中中的flashfxp目录拷贝到D盘下。(3)运行D盘flasfxp目录中的flashfxp.exe文件2020/1/12442020/1/12452020/1/12462020/1/12472020/1/12482020/1/12492020/1/1250这时千万不要重启开发板,超级终端下的界面如下图2020/1/12512020/1/12522020/1/12532020/1/1254Flash程序烧写小结烧写的内容BootLoader——VIVI烧写使用JTAG仿真器,通过并口内核烧写利用VIVI的下载模式,通过网口或串口根文件系统烧写利用VIVI的下载模式,通过网口应用程序通过网口烧写2020/1/12554.3嵌入式Linux文件系统为各类文件系统提供一个统一的操作界面和应用编程接口2020/1/1256注意:Linux启动时,第一个必须挂载的是根文件系统可以自动或手动挂载其他的文件系统。一个系统中可以同时存在不同的文件系统。在嵌入式Linux应用中,主要的存储设备RAM(DRAM、SDRAM)ROM(Flash)常用的基于存储设备的文件系统类型包括:JFFS2、YAFFS、Cramfs、Ramdisk、Ramfs/Tmpfs2020/1/12574.3嵌入式Linux文件系统4.3.1基于FLASH的文件系统4.3.2基于RAM的文件系统4.3.3网络文件系统NFS2020/1/12584.3.1基于FLASH的文件系统Flash的文件系统都是基于MTD(MemoryTechnologyDevice,存储技术设备)驱动层的MTD提供了一系列的标准函数,将硬件驱动设计和系统程序设计分开,硬件驱动设计人员不用了解存储设备的组织方法,只需提供标准的函数调用,如读、写等。MTD是专门针对各种非易失性存储器(以闪存为主)设计的一块Flash芯片可分成多个分区,各分区可采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用1个文件系统——文件系统是针对存储器分区而言的,并非存储芯片。2020/1/12594.3.1基于FLASH的文件系统1、JFFS22、YAFFS3、Cramfs2020/1/12601、JFFS2JFFS文件系统最早是由瑞典AxisCommunications公司基于Linux2.0的内核为嵌入式系统开发的文件系统,JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用于Linux中JFFS2的全称是“日志闪存文件系统第2版本(JournallingFlashFileSystemv2)”,主要用于NOR型闪存,基于MTD驱动层。特点可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。主要缺点是当文件系统已满或接近满时,因为垃圾收集的关系而使JFSS2的运行速度大大降低。2020/1/12611、JFFS2JFFS2不适合用于NAND闪存。原因如下:NANDFlash的容量较大,导致JFFS为维护日志节点所占用的内存空间迅速增大JFFS文件系统在挂载时需要扫描整个Flash的内容,以找出所有的日志节点,建立文件结构,对于NANDFlash会耗费大量的时间2020/1/12622、YAFFSYAFFS/YAFFS2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与JFFS2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。是一个跨平台的文件系统,除了支持Linux和eCos,还支持WinCE、pSOS和ThreadX等YAFFS/YAFFS2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。YAFFS与YAFFS2的主要区别:前者只支持小页(512B)NANDFlash,后者可支持大页(2KB)NANDFlashYAFFS2在内存空间占用、垃圾回收速度、读/写速度等方面具有大幅提升。2020/1/12633、Cramfs(CompressedROMFileSystem)Cramfs是一种只读的压缩文件系统。它也基于MTD驱动程序。在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,从而降低系统成本。Cramfs文件系统以压缩方式存储,在运行时解压缩。另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。2020/1/12644.3.2基于
本文标题:4基于Linux的嵌入式系统开发
链接地址:https://www.777doc.com/doc-2925623 .html