您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 第7章 嵌入式操作系统及开发简述
嵌入式系统技术与设计第7章嵌入式操作系统及开发简述嵌入式Linux简介7.1构建嵌入式Linux开发环境7.2Bootloader7.3Linux内核与移植7.4移植Linux2.6内核到S3C2410平台简述7.5嵌入式文件系统构建7.6本章介绍了关于嵌入式Linux的基本内容。本章从嵌入式开发环境的搭建和交叉编译开始,介绍了Bootloader的概念以及U-Boot的编译方法;然后介绍了Linux内核的相关知识,主要讲解了内核编译和移植的方法;本章最后还介绍了Linux根文件系统的内容。通过本章的学习,读者应熟悉嵌入式Linux的基本开发流程,并掌握编译U-Boot和编译Linux的方法。本章主要内容:●嵌入式Linux简介●配置嵌入式Linux开发平台●Bootloader的编译和移植概要●内核的编译和移植概要●根文件系统7.1嵌入式Linux简介Linux是一种类UNIX操作系统。嵌入式Linux是在Linux基础上经过裁剪,在嵌入式设备上运行的一种Linux操作系统。7.2构建嵌入式Linux开发环境构建开发环境是任何开发工作的基础,对于软、硬件非常丰富的嵌入式系统来说,构建高效、稳定的环境是能否开展工作的重要因素之一。7.2.1交叉开发环境介绍交叉开发环境是由开发主机和目标板两套计算机系统构成的。图7-1交叉开发环境7.2.2安装交叉开发工具1.目标板与主机之间连接目标板和主机之间通常可以使用串口、以太网接口、USB接口及JTAG接口等方式连接。(1)串口传输方式。(2)网络传输方式。(3)USB接口传输方式。(4)JTAG接口传输方式。(5)移动存储设备。2.文件传输方式网络文件系统(NetworkFileSystem,NFS)最早是SUN开发的一种文件系统。3.配置网络文件系统Linux使用GNU的工具,社区的开发者已经编译出了常用体系结构的工具链,从Internet上可以下载。4.获取交叉开发工具链5.配置过程网络文件系统(NetworkFileSystem,NFS)最早是SUN开发的一种文件系统。3.配置网络文件系统7.2.3主机交叉开发环境配置首先要确认主机的网络接口驱动成功,并且配置网络接口的IP地址。1.配置控制台程序图7-2配置串口控制台2.开启DHCP服务3.配置TFTP服务7.3BootloaderBootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映像表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。7.3.1Bootloader的种类嵌入式系统世界已经有各种各样的Bootloader,种类划分也有多种方式。除了按照处理器体系结构不同划分以外,还有功能复杂程度的不同。表7-1开放源码的Linux引导程序BootloaderMonitor描述X86ARMPowerPCLILO否Linux磁盘引导程序是否否GRUB否GNU的LILO替代程序是否否Loadlin否从DOS引导Linux是否否ROLO否从ROM引导Linux而不需要BIOS是否否Etherboot否通过以太网卡启动Linux系统的固件是否否LinuxBIOS否完全替代BUIS的Linux引导程序是否否BLOB否LART等硬件平台的引导程序否是否U-Boot是通用引导程序是是是RedBoot是基于eCos的引导程序是是是1.X862.ARM3.PowerPC4.MIPS5.SH6.M68K7.3.2U-Boot工程简介最早,DENX软件工程中心的WolfgangDenk基于8xxrom的源码创建了PPCBOOT工程,并且不断添加处理器的支持。后来,SysgoGmbh把PPCBOOT移植到ARM平台上,创建了ARMBOOT工程。然后以PPCBOOT工程和ARMBOOT工程为基础,创建了U-Boot工程。现在,U-Boot已经能够支持PowerPC、ARM、X86、MIPS体系结构的上百种开发板,已经成为功能最多、灵活性最强并且开发最积极的开放源码Bootloader。目前仍然由DENX的WolfgangDenk维护。7.3.3U-Boot编译解压U-Boot-1.3.1.tar.bz2就可以得到全部U-Boot源程序。在顶层目录下有18个子目录,分别存放和管理不同的源程序。(1)与处理器体系结构或者开发板硬件直接相关。(2)一些通用的函数或者驱动程序。(3)U-Boot的应用程序、工具或者文件。表7-2U-Boot的源码顶层目录说明目录特性解释说明board平台依赖存放电路板相关的目录文件,如RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86)等目录cpu平台依赖存放CPU相关的目录文件,如mpc8xx、ppc4xx、arm720t、arm920t、xscale、i386等目录lib_ppc平台依赖存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数lib_arm平台依赖存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数lib_i386平台依赖存放对X86体系结构通用的文件,主要用于实现X86平台通用的函数include通用头文件和开发板配置文件,所有开发板的配置文件都在configs目录下common通用通用的多功能函数实现lib_generic通用通用库函数的实现Net通用存放网络的程序Fs通用存放文件系统的程序Post通用存放上电自检程序drivers通用通用的设备驱动程序,主要有以太网接口的驱动Disk通用硬盘接口程序Rtc通用RTC的驱动程序Dtt通用数字温度测量器或者传感器的驱动examples应用例程一些独立运行的应用程序的例子,如helloworldtools工具存放制作S-Record或者U-Boot格式的镜像等工具,如mkimageDoc文档开发使用文档1.顶层目录下的Makefile2.开发板配置头文件3.编译结果表7-3U-Boot编译生成的镜像文件文件名称说明文件名称说明System.mapU-Boot映像的符号表U-Boot.binU-Boot映像原始的二进制格式U-BootU-Boot映像的ELF格式U-Boot.srecU-Boot映像的S-Record格式7.3.4U-Boot的移植思路U-Boot能够支持多种体系结构的处理器,支持的开发板也越来越多。因为Bootloader是完全依赖硬件平台的,所以在新电路板上需要移植U-Boot程序。开始移植U-Boot之前,要先熟悉硬件电路板和处理器。以S3C2410处理器的开发板为例,U-Boot的高版本已经支持SMDK2410开发板。我们可以基于SMDK2410移植,那么先把SMDK2410编译通过。移植U-Boot的基本步骤如下。(1)在顶层Makefile中为开发板添加新的配置选项,使用已有的配置项目为例。(2)创建一个新目录存放开发板相关的代码,并且添加新文件。(3)为开发板添加新的配置文件。(4)配置开发板。(5)编译U-Boot。(6)添加驱动或者功能选项。(7)调试U-Boot源代码,直到U-Boot在开发板上能够正常启动。7.3.5U-Boot的烧写新开发的电路板没有任何程序可以执行,也就不能启动,需要先将U-Boot烧写到Flash中。如果主板上的EPROM或者Flash能够取下来,就可以通过编程器烧写。例如,计算机BIOS就存储在一块256KB的Flash上,通过插座与主板连接。但是多数嵌入式单板使用贴片的Flash,不能取下来烧写。这种情况可以通过处理器的调试接口,直接对板上的Flash编程。处理器调试接口是为处理器芯片设计的标准调试接口,包含BDM、JTAG和EJTAG三种接口标准。JTAG(JointTestActionGroup,联合测试行动小组)是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。JTAG接口需要专用的硬件工具来连接。开发板加电(或者复位)时,烧写程序探测到处理器是否存在,并开始通信,然后把Bootloader下载并烧写到Flash中。这种方式速率很慢,平均每秒钟可以烧写100~200个字节,不过价格却非常便宜。烧写完成后,复位实验板,串口终端应该显示U-Boot的启动信息。1.bootm命令2.bootp命令3.cmp命令4.cp命令5.crc32命令6.echo命令7.erse命令7.3.6U-Boot的常用命令8.nand命令9.flinfo命令10.go命令11.iminfo命令12.loadb命令13.loads命令14.mw命令15.nfs命令16.printenv命令17.protect命令18.rarpboot命令19.run命令20.setenv命令21.sleep命令7.4Linux内核与移植Linux内核是Linux操作系统的核心,也是整个Linux功能体现。7.4.1Linux内核结构图7-3Linux内核结构表7-4Linux内核源码顶层目录说明arch/体系结构相关的代码,如arch/i386、arch/arm、arch/ppccryptodrivers/各种设备驱动程序,例如,drivers/char、drivers/block、…Documentation/内核文档fs/文件系统,例如,fs/ext3、fs/jffs2、…include/内核头文件:include/asm是体系结构相关的头文件,它是include/asm-arm、include/asm-i386等目录的链接。include/Linux是Linux内核基本的头文件init/Linux初始化,如main.cipc/进程间通信的代码kernel/Linux内核核心代码(这部分很小)lib/各种库子程序,如zlib、crc32mm/内存管理代码net/网络支持代码,主要是网络协议sound声音驱动的支持scripts/内部或者外部使用的脚本usr/用户的代码编译内核之前要先配置。为了正确、合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面4个考虑。(1)尺寸小。(2)节省内存。(3)减少漏洞。(4)动态加载模块。7.4.2Linux内核配置系统图7-4配置内核1.Makefile表7-5内核配置方式说明配置方式功能config通过命令行程序更新当前配置menuconfig通过菜单程序更新当前配置xconfig通过QT图形接口更新当前配置gconfig通过GTK图形接口更新当前配置oldconfig通过已经提供的.config文件更新当前配置randconfig对所有的选项随机配置defconfig对所有选项使用默认配置allmodconfig对所有选项尽可能选择“m”allyesconfig对所有选项尽可能选择“y”allnoconfig对所有选项尽可能选择“n”的最小配置2.配置工具表7-6内核配置工具说明配置工具Makefile相关目标依赖的程序和软件confDefconfig、oldconfig、…conf.c、zconf.tab.cmconfmenuconfigmconf.c、zconf.tab.c调用scripts/lxdialog/lxdialogqconfxconfigqconf.c、kconfig_load.c、zconf.tab.c基于QT软件包实现图形接口gconfgconfiggconf.c、kconfig_load.c、zconf.tab.c基于GTK软件包实现图形接口(1)菜单项(2)菜单属性3.Kconfig文件表7-7内核菜单属性说明属性语法说明选择提示promptprompt[ifexpr]每个菜单选项最多有一条提示,可以显示在菜单上。某选择提示可选的依赖关系可以通过“if”语句添加默认值defaultexpr[ifexpr]配置选项可以有几个默认值。如果有多个默认值可选,只使用第一个默认值。某选
本文标题:第7章 嵌入式操作系统及开发简述
链接地址:https://www.777doc.com/doc-3373785 .html