《第7章嵌入式操作系统及开发简述.ppt》由会员分享,可在线阅读,更多相关《第7章嵌入式操作系统及开发简述.ppt(82页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、嵌入式系统技术与设计第第7章章 嵌入式操作系统及开发简述嵌入式操作系统及开发简述嵌入式嵌入式LinuxLinux简介简介7.1构建嵌入式构建嵌入式LinuxLinux开发环境开发环境7.2 BootloaderBootloader7.3LinuxLinux内核与移植内核与移植7.4移植移植LinuxLinux 2.6 2.6内核到内核到S3C2410S3C2410平台简述平台简述7.5嵌入式文件系统构建嵌入式文件系统构建7.6 本章介绍了关于嵌入式本章介绍了关于嵌入式LinuxLinux的基本内容。的基本内容。本章从嵌入式开发环境的搭建和交叉编译开始,本章从嵌入式开发环境的搭建和交叉编译开始,
2、介绍了介绍了BootloaderBootloader的概念以及的概念以及U-BootU-Boot的编译方的编译方法;然后介绍了法;然后介绍了LinuxLinux内核的相关知识,主要内核的相关知识,主要讲解了内核编译和移植的方法;本章最后还介讲解了内核编译和移植的方法;本章最后还介绍了绍了LinuxLinux根文件系统的内容。通过本章的学根文件系统的内容。通过本章的学习,读者应熟悉嵌入式习,读者应熟悉嵌入式LinuxLinux的基本开发流程,的基本开发流程,并掌握编译并掌握编译U-BootU-Boot和编译和编译LinuxLinux的方法。的方法。本章主要内容:本章主要内容:嵌入式嵌入式Linu
3、xLinux简介简介配置嵌入式配置嵌入式LinuxLinux开发平台开发平台BootloaderBootloader的编译和移植概要的编译和移植概要内核的编译和移植概要内核的编译和移植概要根文件系统根文件系统7.1 7.1 嵌入式嵌入式LinuxLinux简介简介 Linux Linux是一种类是一种类UNIXUNIX操作系统。操作系统。嵌入式嵌入式LinuxLinux是在是在LinuxLinux基础上经过裁剪,基础上经过裁剪,在嵌入式设备上运行的一种在嵌入式设备上运行的一种LinuxLinux操作系统。操作系统。7.2 7.2 构建嵌入式构建嵌入式LinuxLinux开发环境开发环境 构建开
4、发环境是任何开发工作的基础,对构建开发环境是任何开发工作的基础,对于软、硬件非常丰富的嵌入式系统来说,构建于软、硬件非常丰富的嵌入式系统来说,构建高效、稳定的环境是能否开展工作的重要因素高效、稳定的环境是能否开展工作的重要因素之一。之一。7.2.1 交叉开发环境介绍交叉开发环境介绍 交叉开发环境是由开发主机和目标板两套交叉开发环境是由开发主机和目标板两套计算机系统构成的。计算机系统构成的。图图图图7-1 7-1 交叉开交叉开交叉开交叉开发环发环发环发环境境境境7.2.2 安装交叉开发工具安装交叉开发工具1 1目标板与主机之间连接目标板与主机之间连接 目标板和主机之间通常可以使用串口、以目标板和
5、主机之间通常可以使用串口、以太网接口、太网接口、USBUSB接口及接口及JTAGJTAG接口等方式连接。接口等方式连接。(1 1)串口传输方式。)串口传输方式。(2 2)网络传输方式。)网络传输方式。(3 3)USBUSB接口传输方式。接口传输方式。(4 4)JTAGJTAG接口传输方式。接口传输方式。(5 5)移动存储设备。)移动存储设备。2 2文件传输方式文件传输方式 网络文件系统(网络文件系统(Network File SystemNetwork File System,NFSNFS)最早是)最早是SUNSUN开发的一种文件系统。开发的一种文件系统。3 3配置网络文件系统配置网络文件系统
6、 Linux Linux使用使用GNUGNU的工具,社区的开发者已经的工具,社区的开发者已经编译出了常用体系结构的工具链,从编译出了常用体系结构的工具链,从InternetInternet上可以下载。上可以下载。4 4获取交叉开发工具链获取交叉开发工具链5 5配置过程配置过程 网络文件系统(网络文件系统(Network File SystemNetwork File System,NFSNFS)最早是)最早是SUNSUN开发的一种文件系统。开发的一种文件系统。3 3配置网络文件系统配置网络文件系统7.2.3 主机交叉开发环境配置主机交叉开发环境配置 首先要确认主机的网络接口驱动成功,并首先要确
7、认主机的网络接口驱动成功,并且配置网络接口的且配置网络接口的IPIP地址。地址。1 1配置控制台程序配置控制台程序图图图图7-2 7-2 配置串口控制台配置串口控制台配置串口控制台配置串口控制台2 2开启开启DHCPDHCP服务服务3 3配置配置TFTPTFTP服务服务7.3 7.3 BootloaderBootloader BootloaderBootloader是在操作系统运行之前执行的是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映像表,从而建化硬件设备、建立内存空间的映像表,从而建立适当的系统软硬件环
8、境,为最终调用操作系立适当的系统软硬件环境,为最终调用操作系统内核做好准备。统内核做好准备。对于嵌入式系统,对于嵌入式系统,BootloaderBootloader是基于特定是基于特定硬件平台来实现的。硬件平台来实现的。7.3.1 Bootloader的种类的种类 嵌入式系统世界已经有各种各样的嵌入式系统世界已经有各种各样的BootloaderBootloader,种类划分也有多种方式。除了按,种类划分也有多种方式。除了按照处理器体系结构不同划分以外,还有功能复照处理器体系结构不同划分以外,还有功能复杂程度的不同。杂程度的不同。表表表表7-17-1开放源开放源开放源开放源码码码码的的的的Lin
9、uxLinux引引引引导导导导程序程序程序程序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 1X86X862 2ARMARM3 3PowerPCPowerPC
10、4 4MIPSMIPS5 5SHSH6 6M68KM68K7.3.2 U-Boot工程简介工程简介 最早,最早,DENXDENX软件工程中心的软件工程中心的Wolfgang Wolfgang DenkDenk基于基于8xxrom8xxrom的源码创建了的源码创建了PPCBOOTPPCBOOT工程,并且工程,并且不断添加处理器的支持。后来,不断添加处理器的支持。后来,SysgoSysgo GmbhGmbh把把PPCBOOTPPCBOOT移植到移植到ARMARM平台上,创建了平台上,创建了ARMBOOTARMBOOT工工程。然后以程。然后以PPCBOOTPPCBOOT工程和工程和ARMBOOTAR
11、MBOOT工程为基础,工程为基础,创建了创建了U-BootU-Boot工程。工程。现在,现在,U-BootU-Boot已经能够支持已经能够支持PowerPCPowerPC、ARMARM、X86X86、MIPSMIPS体系结构的上百种开发板,已经成体系结构的上百种开发板,已经成为功能最多、灵活性最强并且开发最积极的开为功能最多、灵活性最强并且开发最积极的开放源码放源码BootloaderBootloader。目前仍然由。目前仍然由DENXDENX的的Wolfgang Wolfgang DenkDenk维护。维护。7.3.3 U-Boot编译编译 解压解压U-Boot-1.3.1.tar.bz2U
12、-Boot-1.3.1.tar.bz2就可以得到全就可以得到全部部U-BootU-Boot源程序。在顶层目录下有源程序。在顶层目录下有1818个子目录,个子目录,分别存放和管理不同的源程序。分别存放和管理不同的源程序。(1 1)与处理器体系结构或者开发板硬件)与处理器体系结构或者开发板硬件直接相关。直接相关。(2 2)一些通用的函数或者驱动程序。)一些通用的函数或者驱动程序。(3 3)U-BootU-Boot的应用程序、工具或者文件。的应用程序、工具或者文件。表表表表7-27-2U-BootU-Boot的源的源的源的源码顶层码顶层码顶层码顶层目目目目录说录说录说录说明明明明目录特性解释说明bo
13、ard平台依赖存放电路板相关的目录文件,如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通用头文件和开发板配置文件,所有开发
14、板的配置文件都在configs目录下common通用通用的多功能函数实现lib_generic通用通用库函数的实现Net通用存放网络的程序Fs通用存放文件系统的程序Post通用存放上电自检程序drivers通用通用的设备驱动程序,主要有以太网接口的驱动Disk通用硬盘接口程序Rtc通用RTC的驱动程序Dtt通用数字温度测量器或者传感器的驱动examples应用例程一些独立运行的应用程序的例子,如helloworldtools工具存放制作S-Record或者U-Boot格式的镜像等工具,如mkimageDoc文档开发使用文档1 1顶层目录下的顶层目录下的MakefileMakefile2 2开发
15、板配置头文件开发板配置头文件3 3编译结果编译结果表表表表7-37-3U-BootU-Boot编译编译编译编译生成的生成的生成的生成的镜镜镜镜像文件像文件像文件像文件文件名称说明文件名称说明System.mapU-Boot映像的符号表U-Boot.binU-Boot映像原始的二进制格式U-BootU-Boot映像的ELF格式U-Boot.srecU-Boot映像的S-Record格式7.3.4 U-Boot的移植思路的移植思路 U-Boot U-Boot能够支持多种体系结构的处理器,能够支持多种体系结构的处理器,支持的开发板也越来越多。因为支持的开发板也越来越多。因为BootloaderBoo
16、tloader是是完全依赖硬件平台的,所以在新电路板上需要完全依赖硬件平台的,所以在新电路板上需要移植移植U-BootU-Boot程序。程序。开始移植开始移植U-BootU-Boot之前,要先熟悉硬件电路之前,要先熟悉硬件电路板和处理器。板和处理器。以以S3C2410S3C2410处理器的开发板为例,处理器的开发板为例,U-BootU-Boot的的高版本已经支持高版本已经支持SMDK2410SMDK2410开发板。我们可以基开发板。我们可以基于于SMDK2410SMDK2410移植,那么先把移植,那么先把SMDK2410SMDK2410编译通过。编译通过。移植移植U-BootU-Boot的基本
17、步骤如下。的基本步骤如下。(1 1)在顶层)在顶层MakefileMakefile中为开发板添加新中为开发板添加新的配置选项,使用已有的配置项目为例。的配置选项,使用已有的配置项目为例。(2 2)创建一个新目录存放开发板相关的)创建一个新目录存放开发板相关的代码,并且添加新文件。代码,并且添加新文件。(3 3)为开发板添加新的配置文件。)为开发板添加新的配置文件。(4 4)配置开发板。)配置开发板。(5 5)编译)编译U-BootU-Boot。(6 6)添加驱动或者功能选项。)添加驱动或者功能选项。(7 7)调试)调试U-BootU-Boot源代码,直到源代码,直到U-BootU-Boot在在
18、开发板上能够正常启动。开发板上能够正常启动。7.3.5 U-Boot的烧写的烧写 新开发的电路板没有任何程序可以执行,新开发的电路板没有任何程序可以执行,也就不能启动,需要先将也就不能启动,需要先将U-BootU-Boot烧写到烧写到FlashFlash中。如果主板上的中。如果主板上的EPROMEPROM或者或者FlashFlash能够取下来,能够取下来,就可以通过编程器烧写。例如,计算机就可以通过编程器烧写。例如,计算机BIOSBIOS就就存储在一块存储在一块256KB256KB的的FlashFlash上,通过插座与主板上,通过插座与主板连接。但是多数嵌入式单板使用贴片的连接。但是多数嵌入式
19、单板使用贴片的FlashFlash,不能取下来烧写。这种情况可以通过处理器,不能取下来烧写。这种情况可以通过处理器的调试接口,直接对板上的的调试接口,直接对板上的FlashFlash编程。编程。处理器调试接口是为处理器芯片设计的标处理器调试接口是为处理器芯片设计的标准调试接口,包含准调试接口,包含BDMBDM、JTAGJTAG和和EJTAGEJTAG三种接口三种接口标准。标准。JTAG JTAG(Joint Test Action GroupJoint Test Action Group,联合测,联合测试行动小组)是一种国际标准测试协议(试行动小组)是一种国际标准测试协议(IEEE IEEE
20、1149.11149.1兼容),主要用于芯片内部测试。兼容),主要用于芯片内部测试。JTAGJTAG接口需要专用的硬件工具来连接。接口需要专用的硬件工具来连接。开发板加电(或者复位)时,烧写程序探开发板加电(或者复位)时,烧写程序探测到处理器是否存在,并开始通信,然后把测到处理器是否存在,并开始通信,然后把BootloaderBootloader下载并烧写到下载并烧写到FlashFlash中。这种方式中。这种方式速率很慢,平均每秒钟可以烧写速率很慢,平均每秒钟可以烧写100100200200个字个字节,不过价格却非常便宜。烧写完成后,复位节,不过价格却非常便宜。烧写完成后,复位实验板,串口终端
21、应该显示实验板,串口终端应该显示U-BootU-Boot的启动信息。的启动信息。1 1bootmbootm命令命令2 2bootpbootp命令命令3 3cmpcmp命令命令4 4cp cp命令命令5 5crc32crc32命令命令6 6echoecho命令命令7 7erseerse命令命令7.3.6 U-Boot的常用命令的常用命令8 8nandnand命令命令9 9flinfoflinfo命令命令10 10go go命令命令11 11iminfoiminfo命令命令12 12loadbloadb命令命令13 13loadsloads命令命令14 14mwmw命令命令15 15nfsnfs命
22、令命令16 16printenvprintenv命令命令17 17protectprotect命令命令18 18rarpbootrarpboot命令命令19 19runrun命令命令2020setenvsetenv命令命令21 21sleepsleep命令命令7.4 7.4 LinuxLinux内核与移植内核与移植 Linux Linux内核是内核是LinuxLinux操作系统的核心,也是操作系统的核心,也是整个整个LinuxLinux功能体现。功能体现。7.4.1 Linux内核结构内核结构图图图图7-3 Linux7-3 Linux内核内核内核内核结结结结构构构构表表表表7-47-4Lin
23、uxLinux内核源内核源内核源内核源码顶层码顶层码顶层码顶层目目目目录说录说录说录说明明明明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/L
24、inux初始化,如main.cipc/进程间通信的代码kernel/Linux内核核心代码(这部分很小)lib/各种库子程序,如zlib、crc32mm/内存管理代码net/网络支持代码,主要是网络协议sound声音驱动的支持scripts/内部或者外部使用的脚本usr/用户的代码 编译内核之前要先配置。为了正确、合理编译内核之前要先配置。为了正确、合理地设置内核编译配置选项,从而只编译系统需地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面要的功能的代码,一般主要有下面4 4个考虑。个考虑。(1 1)尺寸小。)尺寸小。(2 2)节省内存。)节省内存。(3 3)减少漏洞。)
25、减少漏洞。(4 4)动态加载模块。)动态加载模块。7.4.2 Linux内核配置系统内核配置系统图图图图7-4 7-4 配置内核配置内核配置内核配置内核1 1MakefileMakefile表表表表7-57-5内核配置方式内核配置方式内核配置方式内核配置方式说说说说明明明明配置方式功能config通过命令行程序更新当前配置menuconfig通过菜单程序更新当前配置xconfig通过QT图形接口更新当前配置gconfig通过GTK图形接口更新当前配置oldconfig通过已经提供的.config文件更新当前配置randconfig对所有的选项随机配置defconfig对所有选项使用默认配置al
26、lmodconfig对所有选项尽可能选择“m”allyesconfig对所有选项尽可能选择“y”allnoconfig对所有选项尽可能选择“n”的最小配置2 2配置工具配置工具表表表表7-67-6内核配置工具内核配置工具内核配置工具内核配置工具说说说说明明明明配置工具Makefile相关目标依赖的程序和软件confDefconfig、oldconfig、conf.c、zconf.tab.cmconfmenuconfigmconf.c、zconf.tab.c调用scripts/lxdialog/lxdialogqconfxconfigqconf.c、kconfig_load.c、zconf.ta
27、b.c基于QT软件包实现图形接口gconfgconfiggconf.c、kconfig_load.c、zconf.tab.c基于GTK软件包实现图形接口(1 1)菜单项)菜单项(2 2)菜单属性)菜单属性3 3KconfigKconfig文件文件表表表表7-77-7内核菜内核菜内核菜内核菜单单单单属性属性属性属性说说说说明明明明属性语法说明选择提示promptif每个菜单选项最多有一条提示,可以显示在菜单上。某选择提示可选的依赖关系可以通过“if”语句添加默认值defaultif配置选项可以有几个默认值。如果有多个默认值可选,只使用第一个默认值。某选项默认值还可以在其他地方定义,并且被前面定义
28、的默认值覆盖。如果用户没有设置其他值,默认值就是配置符号的唯一值。如果有选择提示出现,就可以显示默认值并且可以配置修改。某默认值可选的依赖关系可以通过“if”语句添加依赖关系dependson/requires它定义了菜单选项的依赖关系。如果定义多个依赖关系,那么要用“&”符号连接。依赖关系对于本菜单项中其他所有选项有效(也可以用“if”语句)反向依赖selectif普通的依赖关系是缩小符号的上限,反向依赖关系则是符号的下限。当前菜单符号的值用作符号可以设置的最小值。如果符号值被选择了多次,这个限制将被设成最大选择值。反向依赖只能用于布尔或者三态符号数字范围rangeif允许对int和hex类
29、型符号的输入值限制在一定范围内。用户输入的值必须大于等于第一个符号值或者小于等于第二个符号值说明文档help或者-help-可以定义帮助文档。帮助文件的结束是通过缩进层次判断的。当遇到一行缩进比帮助文档第一行小的时候,就认为帮助文档已经结束。“-help-”和“help”功能没有区别,主要给开发者提供不同于“help”的帮助表表表表7-87-8菜菜菜菜单单单单依依依依赖赖赖赖关系关系关系关系语语语语法法法法说说说说明明明明(3 3)菜单依赖关系)菜单依赖关系表达式结果说明:=把符号转换成表达式,布尔和三态符号可以转换成对应的表达式值。其他类型符号的结果都是“n”=如果两个符号的值相等,返回“y
30、”,否则返回“n”!=如果两个符号的值相等,返回“n”,否则返回“y”()返回表达式的值,括号内表达式优先计算!返回(2-/expr/)的计算结果&返回min(/expr/,/expr/)的计算结果|返回max(/expr/,/expr/)的计算结果表表表表7-97-9KconfigKconfig菜菜菜菜单单单单关关关关键词说键词说键词说键词说明明明明(4 4)菜单组织结构)菜单组织结构(5 5)KconfigKconfig语法语法关键字语法说明configconfig可以定义一个配置符号,并且可以配置选项属性menuconfigmenuconfig类似于简单的配置选项,但是它暗示:所有的子选
31、项应该作为独立的选项列表显示choiceschoiceendchoice定义了一个选择组,并且可以配置选项属性。每个选择项只能是布尔类型或者三态类型。布尔类型只允许选择单个配置选项,三态类型可以允许把任意多个选项配置成“m”。如果一个硬设备有多个驱动程序,内核一次只能静态链接或者加载一个驱动,但是所有的驱动程序都可以编译为模块。选择项还可以接受另外一个选项“optional”,可以把选择项设置成“n”,并且不需要选择什么选项commentcomment定义了一个注释,在配制过程中显示在菜单上,也可以回显到输出文件中。唯一可能的选项是依赖关系menumenuendmenu定义了一个菜单项,在菜单
32、组织结构中有些描述。唯一可能的选项是依赖关系ififendif定义了一个if语句块。依赖关系表达式附加给所有封装好的菜单选项sourcesource读取指定的配置文件。读取的文件也会解析生成菜单7.4.3 Linux内核编译选项内核编译选项图图图图7-5 7-5 内核配置主菜内核配置主菜内核配置主菜内核配置主菜单单单单 (1 1)“Code maturity level optionsCode maturity level options”菜单包含配置控制代码成熟度的一些选项。菜单包含配置控制代码成熟度的一些选项。(2 2)“General setupGeneral setup”菜单包含通用的
33、菜单包含通用的一些配置选项。一些配置选项。(3 3)“Loadable module supportLoadable module support”菜单菜单包含支持动态加载模块的一些配置选项。包含支持动态加载模块的一些配置选项。1 1基本配置选项基本配置选项 (4 4)“System TypeSystem Type”菜单包含系统平台菜单包含系统平台列表及其相关的配置选项。列表及其相关的配置选项。(5 5)“Bus supportBus support”菜单包含系统各种菜单包含系统各种总线的配置选项。总线的配置选项。(6 6)“Kernel FeaturesKernel Features”菜单包
34、含内核菜单包含内核特性相关选项。特性相关选项。(7 7)“Boot optionsBoot options”菜单包含内核启菜单包含内核启动相关的选项。动相关的选项。(8 8)“Floating point emulationFloating point emulation”菜菜单包含浮点数运算仿真功能。单包含浮点数运算仿真功能。(9 9)“UserspaceUserspace binary formats binary formats”菜菜单包含支持的应用程序格式。单包含支持的应用程序格式。(1010)“Power management optionsPower management opti
35、ons”菜菜单包含电源管理有关的选项。单包含电源管理有关的选项。(1111)“NetworkingNetworking”菜单包含网络协议菜单包含网络协议支持选项。支持选项。(1212)“Device DriversDevice Drivers”菜单包含各种菜单包含各种设备驱动程序。设备驱动程序。(1313)“File systemsFile systems”菜单包含各种文菜单包含各种文件系统的支持选项。件系统的支持选项。(1414)“Profiling supportProfiling support”菜单包含菜单包含用于系统测试的工具选项。用于系统测试的工具选项。(1515)“Kernel
36、hackingKernel hacking”菜单包含各种菜单包含各种内核调试的选项。内核调试的选项。(1616)“Security optionsSecurity options”菜单包含安菜单包含安全性有关的选项。全性有关的选项。(1717)“Cryptographic optionsCryptographic options”菜单菜单包含加密算法。包含加密算法。(1818)“Library routinesLibrary routines”菜单包含几菜单包含几种压缩和校验库函数。种压缩和校验库函数。几乎所有几乎所有LinuxLinux的设备驱动程序都在的设备驱动程序都在“Device Dr
37、iversDevice Drivers”菜单下,它对设备驱动程菜单下,它对设备驱动程序加以归类,放到子菜单下。下面解释常用的序加以归类,放到子菜单下。下面解释常用的一些菜单项的内容。一些菜单项的内容。2 2驱动程序配置选项驱动程序配置选项7.5 7.5 移植移植LinuxLinux 2.6 2.6内核到内核到S3C2410S3C2410平台简述平台简述 所谓移植就是把程序代码从一种运行环境所谓移植就是把程序代码从一种运行环境转移到另外一种运行环境。对于内核移植来说,转移到另外一种运行环境。对于内核移植来说,主要是从一种硬件平台转移到另外一种硬件平主要是从一种硬件平台转移到另外一种硬件平台上运行
38、。台上运行。7.5.1 移植的概念移植的概念 对于内核移植工作来说,主要是添加开发对于内核移植工作来说,主要是添加开发板初始化和驱动程序的代码。这部分代码大部板初始化和驱动程序的代码。这部分代码大部分是跟体系结构相关的,在分是跟体系结构相关的,在archarch目录下按照不目录下按照不同的体系结构管理。下面以同的体系结构管理。下面以ARM S3C2410ARM S3C2410平台平台为例,分析内核代码移植过程。为例,分析内核代码移植过程。Linux 2.6 Linux 2.6内核已经支持内核已经支持S3C2410S3C2410处理器的处理器的多种硬件板,例如,多种硬件板,例如,SMDK2410
39、SMDK2410、SimtecSimtec-BAST-BAST、IPAQ-H1940IPAQ-H1940、Thorcom-VR1000Thorcom-VR1000等。我们可以参等。我们可以参考考SMDK2410SMDK2410参考板,来移植开发板的内核。参考板,来移植开发板的内核。1 1添加开发板平台支持选项添加开发板平台支持选项2 2移植开发板驱动程序移植开发板驱动程序 在内核已经支持在内核已经支持S3C2410S3C2410处理器以后,基处理器以后,基本上无须改动代码就可以让内核运行起来。但本上无须改动代码就可以让内核运行起来。但是有些情况下,我们必须针对不同的设备进行是有些情况下,我们必
40、须针对不同的设备进行驱动级的移植。至少硬件地址可能会不同。本驱动级的移植。至少硬件地址可能会不同。本节将着重介绍驱动程序移植的思路。节将着重介绍驱动程序移植的思路。7.5.2 设备驱动移植设备驱动移植 Nor Flash Nor Flash和和NandNand Flash Flash是现在市场上两是现在市场上两种主要的非易失闪存技术。种主要的非易失闪存技术。7.5.3 Nand Flash移植移植7.6 7.6 嵌入式文件系统构建嵌入式文件系统构建 文件系统是在任何操作系统中都非常重要文件系统是在任何操作系统中都非常重要的概念,的概念,7.6.1 文件系统简介文件系统简介 文件系统是文件系统是
41、LinuxLinux重要的子系统。重要的子系统。LinuxLinux采采用虚拟文件系统机制,把所有的东西都看作文用虚拟文件系统机制,把所有的东西都看作文件。文件系统是基于块设备驱动程序建立的。件。文件系统是基于块设备驱动程序建立的。目前,目前,LinuxLinux已经能够支持几十种文件系统。已经能够支持几十种文件系统。7.6.2 嵌入式文件系统的特点和种类嵌入式文件系统的特点和种类 EXT2 EXT2(The Second Extended The Second Extended FilesystemFilesystem)和)和EXT3EXT3(The Third Extended The T
42、hird Extended FilesystemFilesystem)是)是LinuxLinux内核自己的文件系统。内核自己的文件系统。1 1EXT2/EXT3EXT2/EXT3表表表表7-107-10EXT2EXT2文件系文件系文件系文件系统统统统同步元数据同步元数据同步元数据同步元数据操作对象操作方法每个文件(有程序源码)在open()函数中使用O_SYNC标志每个文件(没有程序源码)使用“chattr+S”命令改变文件属性文件系统挂接的时候添加“sync”选项(或者在/etc/fstab中添加)EXT3EXT3的数据模式分为的数据模式分为3 3种。种。(1 1)写回模式()写回模式(Wr
43、itebackWriteback Mode Mode)(2 2)有序模式()有序模式(Ordered ModeOrdered Mode)(3 3)日志模式()日志模式(Journal ModeJournal Mode)日志文件系统(日志文件系统(JournaledJournaled File System File System,JFSJFS)是)是IBMIBM创建的一种文件系统。创建的一种文件系统。(1 1)日志处理)日志处理 (2 2)基于盘区的寻址结构)基于盘区的寻址结构 (3 3)可变的块尺寸)可变的块尺寸2 2JFSJFS(4 4)动态磁盘)动态磁盘inodeinode分配分配(5
44、5)目录组织)目录组织(6 6)稀疏文件和密集文件)稀疏文件和密集文件(7 7)文件系统大小和文件长度)文件系统大小和文件长度表表表表7-117-11JFSJFS文件系文件系文件系文件系统统统统挂接挂接挂接挂接选项选项选项选项挂接选项含义iocharset=name可以把Unicode字符集转换到ASCII字符集。默认的是不做转换。使用iocharset=utf8,转换成UTF8字符集。这时还要在内核中配置CONFIG_NLS_UTF8选项resize=value改变volume的块数。JFS只支持增大volume,不能减小volume。这个选项只在remount的时候有效nointegrit
45、y不做写日志工作。这个选项的基本用法是在从备份元数据中回复volume的时候,力求最高性能。如果系统非正常停止,这个volume的完整性不能保证integrity这是默认值。保存元数据到日志区errors=continue出错时继续执行errors=remount-ro这是默认值。出错时重新挂接成只读的errors=panic出错时系统panic并且停止运行 cramfscramfs是专门为小而且简单的文件系统设是专门为小而且简单的文件系统设计的,用于计的,用于ROMROM芯片或者芯片或者CDCD上存储文件系统。上存储文件系统。3 3cramfscramfs JFFS JFFS(Journal
46、ing Flash Journaling Flash FilesystemFilesystem)是瑞典的是瑞典的AxisAxis通信公司(通信公司(Axis Axis Communications ABCommunications AB)设计开发的。)设计开发的。JFFS2JFFS2(Journaling Flash Journaling Flash FilesystemFilesystem Version 2Version 2)是)是RedHatRedHat公司基于公司基于JFFSJFFS文件系统文件系统开发的,它是开发的,它是JFFSJFFS的改进版。的改进版。4 4JFFS/JFFS2J
47、FFS/JFFS21 1/dev/dev设备文件设备文件7.6.3 文件系统的组成文件系统的组成(1 1)/dev/console/dev/console(2 2)/dev/dev/hdhd(3 3)dev/dev/fdfd(4 4)dev/dev/sdsd(5 5)dev/dev/ttytty(6 6)dev/dev/ttySttyS*图图图图7-6 Linux7-6 Linux的根文件系的根文件系的根文件系的根文件系统结统结统结统结构构构构2 2/root/root3 3/usr/usr4 4/var/var5 5/home/home6 6/proc/proc7 7/bin/bin8 8/
48、sbin/sbin(1 1)/etc/rc/etc/rc或或/etc/rc.d/etc/rc.d(2 2)/etc/etc/passwdpasswd(3 3)etc/etc/fstabfstab(4 4)etc/etc/inittabinittab9 9/etc/etc10 10/boot/boot11 11/lib/lib12 12/mnt/mnt13 13/tmp/tmp14 14/initrd/initrd BusyBoxBusyBox工程于工程于19961996年发起,它本身就是年发起,它本身就是一个很成功的开源软件,其目的在于帮助一个很成功的开源软件,其目的在于帮助DebianDeb
49、ian发行套件来建立磁盘安装。发行套件来建立磁盘安装。7.6.4 利用利用BusyBox构建文件系统构建文件系统图图图图7-7 7-7 BusyBoxBusyBox编译编译编译编译配置接口配置接口配置接口配置接口图图图图7-8 General Configuration7-8 General Configuration选项选项选项选项配置接口配置接口配置接口配置接口图图图图7-9 Build Options7-9 Build Options选项选项选项选项配置接口配置接口配置接口配置接口图图图图7-10 Installation Options7-10 Installation Options
50、选项选项选项选项配置接口配置接口配置接口配置接口图图图图7-11 7-11 BusyBoxBusyBox的的的的_install_install目目目目录录录录图图图图7-12 7-12 BusyBoxBusyBox使用方法使用方法使用方法使用方法 网络文件系统(网络文件系统(Net File SystemNet File System,NFSNFS)是是FreeBSDFreeBSD支持的文件系统中的一种。支持的文件系统中的一种。NFSNFS允许允许一个系统在网络上与他人共享目录和文件。通一个系统在网络上与他人共享目录和文件。通过使用过使用NFSNFS,用户和程序可以像访问本地文件,用户和程序