嵌入式操作系统ppt课件

上传人:桔**** 文档编号:578868273 上传时间:2024-08-25 格式:PPT 页数:130 大小:763.06KB
返回 下载 相关 举报
嵌入式操作系统ppt课件_第1页
第1页 / 共130页
嵌入式操作系统ppt课件_第2页
第2页 / 共130页
嵌入式操作系统ppt课件_第3页
第3页 / 共130页
嵌入式操作系统ppt课件_第4页
第4页 / 共130页
嵌入式操作系统ppt课件_第5页
第5页 / 共130页
点击查看更多>>
资源描述

《嵌入式操作系统ppt课件》由会员分享,可在线阅读,更多相关《嵌入式操作系统ppt课件(130页珍藏版)》请在金锄头文库上搜索。

1、嵌入式操作系统嵌入式操作系统陈香兰http:/ 2007中国科学技术大学计算机系上周一上周一lSkyEye介绍lSkyEye简介lSkyEye的安装和使用luClinux简介xlanchen2007.6.42Embedded Operating Systems上周二上周二l介绍了嵌入式系统的 Boot Loader,包括:lBoot Loader 的概念lBoot Loader 的主要任务lBoot Loader 的框架结构lBoot Loader 的安装l部分开源的boot loaderxlanchen2007.6.43Embedded Operating Systems本次课的主要内容本次

2、课的主要内容l嵌入式Linux开发技术xlanchen2007.6.44Embedded Operating Systems嵌入式嵌入式Linux开发技术开发技术xlanchen2007.6.3主要内容主要内容一、嵌入式Linux开发综述二、Linux的配置和编译三、根文件系统及其制作xlanchen2007.6.46Embedded Operating Systems主要内容主要内容一、嵌入式一、嵌入式Linux开发综述开发综述二、Linux的配置和编译三、根文件系统及其制作xlanchen2007.6.47Embedded Operating Systems一、嵌入式一、嵌入式Linux开

3、发综述开发综述1.建立目标板Linux的基本步骤2.开发嵌入式Linux系统最常用的主机类型3.主机/目标机的开发体系结构4.主机/目标板的调试方式5.嵌入式Linux系统的一般架构6.嵌入式Linux系统的启动过程7.嵌入式Linux系统的引导配置的类型xlanchen2007.6.48Embedded Operating Systems1、建立目标板、建立目标板Linux的基本步骤的基本步骤建立目标板Linux系统有4个重要的步骤:(1)决定系统组件lLinux具有大量可选软件,应当为目标系统列出必须的功能清单(2)配置并建立内核l选择合适的Linux内核版本与适当的配置l建立内核(3)建

4、立根文件系统(4)设置引导软件与配置xlanchen2007.6.49Embedded Operating Systems2、开发嵌入式、开发嵌入式Linux系统最常用系统最常用的主机类型的主机类型l开发嵌入式Linux系统最常用的主机类型(1)Linux工作站l通常就是一台安装了某个标准的Linux发行套件的PC机,如Debian、Mandrake、Red Hat等。l需约2、3G或更多的磁盘空间进行嵌入式Linux开发l建议具有128或以上的RAM及交换空间(2)Unix工作站l由于Linux与Unix非常相似,对Linux适用的通常对Unix也适用xlanchen2007.6.410Em

5、bedded Operating Systems(3)Windows工作站l许多开发者比较习惯Windows平台,并希望在Windows平台上开发嵌入式Linux系统lCygwin:可在Windows平台上建立跨平台开发工具链lVMWare:可在虚拟环境中执行Linux,并在Linux上进行嵌入式Linux的开发xlanchen2007.6.411Embedded Operating Systems3、主机、主机/目标机的开发体系结构目标机的开发体系结构l在嵌入式Linux系统开发中,存在3种主机/目标机开发体系结构(1)连接式(2)使用可移动存储设备(3)独立开发式xlanchen2007.

6、6.412Embedded Operating Systems(1)连接式)连接式( the linked setup )l目标板和主机通过一个物理线路(如串行线或者以太网连接)永久的连接在一起l好处:目标代码的传送无需物理存储设备参与,只需要上述连接就足够了l在这种方式中,主机包含了跨平台开发环境,而目标板则包含了适当的引导加载程序、可用的内核以及最起码的根文件系统xlanchen2007.6.413Embedded Operating Systemsl另一种做法是,以远程组件来简化目标板的开发工作,例如l通过TFTP下载内核l此外,根文件系统还可以通过NFS安装,而不必在目标板中使用存储介

7、质l还可以使用连接进行调试l通常使用以太网连接进行下载功能,而使用RS232串口连接进行调试TFPT:Trivial File Transfer Protocol小型文件传输协议比FTP简单 NFS:Network File System网络文件系统允许访问远程计算机上的文件*内核*根文件系统下载/NFSxlanchen2007.6.414Embedded Operating Systems(2)使用可移动存储设备)使用可移动存储设备,the removable storage setupl主机和目标板之间没有实际的连接。先由主机将数据写入存储设备,然后将存储设备转接到目标板,并使用该存储设备

8、引导目标板l同样的,在主机上包含了跨平台开发环境。而目标板则只包含了最起码的引导加载程序。其余的组件被存放在可移动存储设备上。xlanchen2007.6.415Embedded Operating Systemsxlanchen2007.6.416Embedded Operating Systemsl一种通常的操作方式使用易插拔的flash芯片:l先在主机上使用flash编程器将数据写入芯片,l然后再将该芯片插入目标板上的插座中xlanchen2007.6.417Embedded Operating Systems(3)独立开发系统)独立开发系统l在这种设置中,目标板是个独立的开发系统,它包

9、含了引导、操作以及开发额外软件所必须的任何软件。l不需要跨平台开发环境,不必在主机和目标板之间传送任何数据l适合以PC为主的高级嵌入式系统的开发xlanchen2007.6.418Embedded Operating Systems4、主机、主机/目标板的调试方式目标板的调试方式l用来连接目标板与主机进行调试的接口基本上有3种类型:(1)串行线、(2)网络接口、(3)特殊的调试硬件lBDMlJTAGxlanchen2007.6.419Embedded Operating Systems(1)使用串行线进行调试)使用串行线进行调试l这是从主机对目标板进行调试的最简单的做法l缺点:l串行连接的速度

10、比较有限l当嵌入式系统中只有一个串行串口,或者串行连接是嵌入式系统对外唯一的接口,那么就不可能在对系统调试的同时,以终端仿真器跟系统交互。xlanchen2007.6.420Embedded Operating Systems(2)使用网络接口进行调试)使用网络接口进行调试l这种方式与串行线连接相比,可以提供较高的带宽l由于可以在相同的物理网络连接上使用多重网络连接,可以兼顾调试与终端仿真交互l缺点:无法使用网络连接对Linux内核进行调试。因为网络协议栈本身在Linux内核里。相对而言,内核的调试通常可以通过串行连接来进行xlanchen2007.6.421Embedded Operatin

11、g Systems(3)使用特殊的调试硬件)使用特殊的调试硬件l通常会使用BDM或JTAG接口。l这些接口依靠的是CPU芯片中内嵌的BDM或JTAG特殊功能。l只要将一个特殊的调试器连接到CPU上的JTAG或BDM相关管脚,就可以完全控制CPU的行为。l因此,当遇到新的嵌入式目标板、或者对目标板上的Linux内核进行调试时,通常会使用JTAG和BDMBDMBackground Debug Mode背景调试模式JTAGJoint Test Action Group联合测试小组采用IEEE 1149.1,测试存取口和边界扫描标准xlanchen2007.6.422Embedded Operatin

12、g Systemsl如图所示,包含4个部分:(1)硬件(2)内核(3)文件系统等(4)应用程序/库5、嵌入式、嵌入式Linux系统的一般架构系统的一般架构xlanchen2007.6.423Embedded Operating Systems(1)硬件)硬件l目标板的硬件必须符合一些要求方能执行Linux系统。l至少32位CPUl一般情况下必须配备MMU(对于不配备MMU的考虑使用uClinux)lRAM容量必须满足系统的需要l一些最起码的I/O能力,以便在线调试l具有某种形式的永久性或网络存储设备以便内核加载及(或)存取根文件系统xlanchen2007.6.424Embedded Oper

13、ating Systems(2)Linux内核内核lLinux内核是Linux操作系统的中心组件。使用内核的目的是希望以一致的方式管理硬件,以及为用户软件提供高层抽象层。内核大致可以分成两个部分:底层接口层和高层抽象层xlanchen2007.6.425Embedded Operating Systemsl底层接口层专属于硬件配置,内核运行其上,并以硬件无关的高层抽象层提供对硬件资源的直接控制。l比如,对于PPC和ARM系统,尽管其寄存器或内存分页的处理方式不同,但却可以使用通用的API来存取内核里高层的组件l通常底层部分会处理CPU特有的操作、架构特有的内存操作以及设备的基本I/Oxlanc

14、hen2007.6.426Embedded Operating Systems(3)文件系统和网络协议等)文件系统和网络协议等l在Linux内核的底层接口层与高层抽象层之间,内核有时会用到与特定设备上的结构化数据交互的组件,例如文件系统和网络协议。l通常,Linux内核至少需要一个具有合适结构的根文件系统。Linux内核会从中加载第一个应用程序、加载模块并为进程提供工作目录。xlanchen2007.6.427Embedded Operating Systems(4)应用程序)应用程序/库库l内核上面是应用程序和工具程序。链接库通常与应用程序动态链接在一起xlanchen2007.6.428E

15、mbedded Operating Systems6、系统启动过程、系统启动过程l在系统启动过程里,有3个主要软件组件参与其中:(1)引导加载程序(2)内核(3)Init进程xlanchen2007.6.429Embedded Operating Systems(1)引导加载程序)引导加载程序l引导加载程序是系统启动过程中执行的第一个软件,它与目标板的硬件有高度的依赖关系。lLinux有许多引导加载程序可用。l引导加载程序在完成底层硬件初始化工作后会接着跳到内核的启动程序代码执行。xlanchen2007.6.430Embedded Operating Systems(2)内核)内核l内核一开

16、始的启动程序代码会因架构不同而有很大的差异,而且在为C程序代码设置合适的执行环境之前,它会先为自己进行初始化工作。l完成以上工作后,内核会跳到与架构无关的start_kernel函数执行,此函数会初始化高层内核功能,安装根文件系统,以及启动init进程xlanchen2007.6.431Embedded Operating Systems3、Init进程进程l启动各种应用程序(根据设置)xlanchen2007.6.432Embedded Operating Systems7、引导配置的类型、引导配置的类型lLinux系统的引导配置与所选用的引导加载程序、它的配置以及主机中软硬件的类型有非常密

17、切的关系。(1)固态存储媒体(2)磁盘(3)网络xlanchen2007.6.433Embedded Operating Systems(1)固态存储媒体)固态存储媒体l固态存储媒体用于存放l最初的引导加载程序l配置参数l内核l根文件系统l嵌入式Linux系统在开发的不同阶段可能会使用不同的引导配置,但大部分在开发完成后使用固态存储媒体xlanchen2007.6.434Embedded Operating Systems(2)磁盘磁盘l磁盘引导配置方式广泛应用于工作站及服务器中,此时内核和根文件系统位于磁盘上l最初的内核加载程序不是从磁盘上加载,第二个内核加载程序就是直接从磁盘获得内核本身l

18、可以用于嵌入式系统的开发阶段l要求:目标板上能够使用硬盘或者具有模仿硬盘的装置xlanchen2007.6.435Embedded Operating Systems(3)网络网络l网络引导配置方式中,存在两种情况:(1)内核位于固态存储设备上或磁盘上,需要通过NFS安装根文件系统(2)只有内核加载程序位于目标板的存储设备上,需要通过TFTP下载内核和根文件系统(或NFS)l往往用于开发初期xlanchen2007.6.436Embedded Operating Systems主要内容主要内容一、嵌入式Linux开发综述二、二、Linux的配置和编译的配置和编译三、根文件系统及其制作xlanc

19、hen2007.6.437Embedded Operating Systemsl内核是所有Linux系统软件组成的核心。它的性能对整个系统的性能起决定性作用。如果内核不支持目标板上的某个硬件,那么在目标板上使用这个内核时,这个硬件就不能起作用。l下面讨论如何为一个嵌入式系统准备好一个可用的Linux内核,包括内核的选择、配置、编译和安装。xlanchen2007.6.438Embedded Operating SystemsLinux内核源代码中的主要子目录内核源代码中的主要子目录lDocumentation 内核方面的相关文档。 larch与体系结构相关的代码。对应于每个支持的体系结构,有一

20、个相应的目录如i386、arm、alpha等。每个体系结构子目录下包含几个主要的子目录:lkernel与体系结构相关的核心代码lmm与体系结构相关的内存管理代码llib与体系结构相关的库代码linclude内核头文件。对每种支持的体系结构有相应的子目录。linit内核初始化代码。xlanchen2007.6.439Embedded Operating Systemslkernel内核管理代码。lmm内存管理代码。lipc进程间通讯代码。lnet网络部分代码。llib与体系结构无关的内核库代码。ldrivers设备驱动代码。每类设备有相应的子目录,如char、block、net等lfs文件系统代

21、码。每个支持文件系统有相应的子目录,如ext2、proc等。lmodules 可动态加载的模块。lScripts配置核心的脚本文件。xlanchen2007.6.440Embedded Operating SystemsLinux的配置和编译步骤的配置和编译步骤lLinux内核从配置到安装大致有如下步骤:l清理:make mrproperl配置:make config/menuconfig/xconfigl建立依赖关系:make depl编译:make或make zImagel安装:make installl但在嵌入式系统开发中,并不总是按照上述步骤xlanchen2007.6.441Embe

22、dded Operating Systems1、Linux内核选择内核选择l尽管http:/www.kernel.org是主要的内核来源,但这里可用的内核版本并不总适用于嵌入式系统l下面列出了针对当前主要嵌入式系统的Linux内核源代码下载地点,通常直接提供了针对某种目标硬件系统的Linux内核版本处理器系统处理器系统合适的内核站点合适的内核站点x86http:/www.kernel.orgARMhttp:/www.arm.linux.org.ukPowerPChttp:/penguinppc.orgMIPShttp:/www.linux-mips.orgM68Khttp:/linux-m68

23、k.orgnonMMU的CPUs http:/www.uclinux.orgxlanchen2007.6.442Embedded Operating Systemsl为了获得适合目标系统的内核,必须从主要的站点下载内核,还要打上合适的补丁。例如ARM Linux仅仅发布Linux官方内核的补丁。l找到合适的Linux内核版本后,把它下载到某个目录中,解压xlanchen2007.6.443Embedded Operating Systems2、Linux内核的配置内核的配置l配置有很多种方法,配置过程中有很多选项可选l配置的结果是生成一个.config文件以及大量的符号连接和头文件,用于后续的

24、过程。.config文件中保存了在配置过程中定义的变量,在Linux内核目录下的Makefile中将会包含这个文件xlanchen2007.6.444Embedded Operating SystemsARMLinux的配置和编译的配置和编译l考虑将ARM Linux运行到SkyEye模拟平台上:(1)下载源代码,建立交叉编译环境(2)编译内核(3)利用busybox生成一个简单的系统文件并且配置根文件系统(4)配置SkyEye系统信息,使上述生成的内核及操作系统可以在SkyEye中运行xlanchen2007.6.445Embedded Operating Systems准备准备ARM Li

25、nux l下载标准Linux 的内核源码和ARM Linux,其中ARM Linux 是基于标准Linux内核为ARM 做的补丁l标准Linux的内核源代码ftp:/ftp.kernel.orglinux-2.4.18.tar.bz2lARM Linux的补丁ftp:/ftp.arm.linux.org.uk/pub/armlinuxpatch-2.4.18-rmk7.bz2xlanchen2007.6.446Embedded Operating Systemsl解压缩Linux-2.4.18,l解压缩补丁,并对linux-2.4.18打补丁l建立armlinux-2.4.18,将linux目

26、录拷贝到该目录下xlanchen2007.6.447Embedded Operating Systems建立交叉编译环境建立交叉编译环境l下载交叉编译工具ftp:/ftp.arm.linux.org.uk/pub/armlinux/toolchain cross-2.95.3.tar.bz2l解压缩到/usr/local/arm目录下tar jxf cross-2.95.3.tar.bz2l设置执行路径,在.bashrc中添加然后,退出控制台,重新启动控制台xlanchen2007.6.448Embedded Operating Systemsl检查是否建立好交叉编译环境l对arm-linux

27、使用tab键功能l命令:arm-linux-gcc vxlanchen2007.6.449Embedded Operating Systems配置和编译配置和编译arm linuxl修改Makefile中l目标板体系结构l交叉编译器xlanchen2007.6.450Embedded Operating Systems我们考虑在我们考虑在skyeye上模拟上模拟ep7312l下载armlinux4skyeyel解压缩xlanchen2007.6.451Embedded Operating Systemsl进入armlinux4skyeyelinstallguide.txtxlanchen200

28、7.6.452Embedded Operating Systemsl为Skyeye模拟的ep7312进行如下修改:1.linux-2.4.x/drivers/char/Makefile, 增加obj-$(CONFIG_LCD) += lcd_drv.oobj-$(CONFIG_TOUCH_SCREEN) += skyeye_ts_drv.o2.linux-2.4.x/drivers/char/Config.in, 增加tristate SkyEye LCD support(for EP7312) CONFIG_LCDtristate SkyEye Touch Screen support(fo

29、r EP7312) CONFIG_TOUCH_SCREEN 3.增加lcd_drv.ch, lcd_struct.h, skyeye_ts_drv.ch, ep7312_sys.h files 到 linux/drivers/char/目录中xlanchen2007.6.453Embedded Operating Systemsl清除,命令:lmake mrproperlmake cleanl配置,命令lmake xconfig在System Type中选择CLPS711X/EP721X和CLEP7312在File System中,确保l/proc file system supportlRO

30、M file system supportlSecond extended fs supportxlanchen2007.6.454Embedded Operating Systems在Block Devices选择lRAM disk supportlInitial RAM disk (initrd) support在Character devices选择lSkyEye LCD support(for EP7312)lSkyEye Touch Screen support(for EP7312)l建立依赖关系并编译,命令lmake dep;makexlanchen2007.6.455Embed

31、ded Operating Systemsl检查是否存在编译好的ARM Linux内核xlanchen2007.6.456Embedded Operating Systems主要内容主要内容一、嵌入式Linux开发综述二、Linux的配置和编译三、根文件系统及其制作三、根文件系统及其制作xlanchen2007.6.457Embedded Operating Systems三、建立根文件系统三、建立根文件系统1、根文件系统的内容及其准备2、选择根文件系统的格式及其设置xlanchen2007.6.458Embedded Operating Systems根文件系统根文件系统lLinux内核在系

32、统启动期间进行的最后操作之一就是安装根文件系统。l根文件系统一直都是所有类UNIX系统不可或缺的组件l根文件系统的顶层目录各有其特殊的用法和目的。l其中一部分往往与多用户有关l在嵌入式系统中,这一部分是不必要的xlanchen2007.6.459Embedded Operating Systemsl根文件系统中的内容由FHS(Filesystem Hierarchy Standard,文件系统层次标准) 制定l制定该标准的组织为FHSG(FHS Group,http:/ Operating Systems虚拟机安装的虚拟机安装的Linux下的根目录下的根目录和和romfs下的目录下的目录必要的

33、用户命令(二进制文件)bootloader使用的静态文件设备文件和其他特殊文件系统配置文件,包括启动文件用户主目录必要的链接库mount点,用于暂时安装文件系统附加的软件套件提供内核与进程信息的虚拟文件系统root用户主目录必要的系统管理员命令(二进制文件)临时文件在第二层中包含大量的用户应用程序和文件监控程序和工具程序所存放的可变数据xlanchen2007.6.461Embedded Operating Systems建立根文件系统建立根文件系统l建立根文件系统,l首先为多用户提供的可扩展环境的所有目录都应该省略l/home,/mnt,/opt,/rootl甚至可以不要l/tmp和/var

34、,这要根据实际情况确定l根据引导加载程序和它的配置情况,决定是否需要/bootl下列几个是比较重要的l/bin, /dev, /etc, /lib, /proc, /sbin, /usr l/usr和/var这两个顶层目录与根目录非常像,有自己的目录结构xlanchen2007.6.462Embedded Operating Systemsxlanchen2007.6.463Embedded Operating Systems容易混淆的几个目录之一容易混淆的几个目录之一l/bin, /sbin, /usr/bin, /usr/sbinl普通用户和超级用户都比较有用的命令放在/bin下l普通用户

35、不使用,只有超级用户比较有用的命令放在/sbin下l不常用的用户命令放在/usr/bin下l不常用的超级用户命令放在/usr/sbin下xlanchen2007.6.464Embedded Operating Systems容易混淆的几个目录之二容易混淆的几个目录之二l/lib, /usr/libl系统启动需要的以及上述比较有用的命令所需要的库文件通常放在/lib下l所有其他的库文件一般都放在/usr/lib下,有的软件包会在/usr/lib下为自己所需的库文件建立一个专门的目录l例如Perl 5.x安装完后,会产生一个/usr/lib/perl5目录xlanchen2007.6.465Emb

36、edded Operating Systems设置根文件系统的目录骨架:设置根文件系统的目录骨架:为tmp目录的使用权打开sticky位,确保/tmp下建立的文件只有建立它的用户有权删除建立根目录建立顶层目录建立/var的目录结构建立/usr的目录结构xlanchen2007.6.466Embedded Operating Systems根文件系统上的内容包括:根文件系统上的内容包括:l链接库l内核模块l内核映像l设备文件l系统应用程序l系统初始化文件lxlanchen2007.6.467Embedded Operating Systems为目标系统准备链接库为目标系统准备链接库1、glibc

37、2、uClibcxlanchen2007.6.468Embedded Operating Systemsglibclglibc套件包含若干链接库。主要包含4种类型的文件l实际的共享链接库实际的共享链接库,文件名为libLIBRARY_NAME-GLIBC_VERSION.so,例如glibc 2.5的数学链接库为libm-2.5.soxlanchen2007.6.469Embedded Operating Systemsl主修订版本的符号链接主修订版本的符号链接,文件名为libLIBRARY_NAME.so.MAJOR_REVISION_VERSIONl例如实际的数学链接库libm-2.5.s

38、o,其符号连接的名称为libm.so.6xlanchen2007.6.470Embedded Operating Systemsl与版本无关的符号链接与版本无关的符号链接指向主修订版本的符号链接,用于为需要链接特定链接库的所有程序提供一个通用的条目,与主修订版本号或glibc涉及的版本无关。文件名为libLiBRARY_NAME.so,l例如libm.so指向libm.so.6,libm.so.6指向实际的共享链接库libm-2.2.3.soxlanchen2007.6.471Embedded Operating Systemsl静态链接库包文件静态链接库包文件,文件名格式为libLIBRAR

39、Y_NAME.a,如动态装载库libdl的静态包文件就是libdl.axlanchen2007.6.472Embedded Operating Systemsl我们只需前两种。其余的文件只有在链接执行文件的时候才会用到,执行应用程序时不需要xlanchen2007.6.473Embedded Operating Systems动态链接器及其符号连接动态链接器及其符号连接除了链接库文件,还需要复制动态链接器及其符号连接l动态链接器的文件名,通常叫做ld-GLIBC_VERSION.soxlanchen2007.6.474Embedded Operating Systemsl动态链接器的符号链接l

40、对于i386、arm或m68k,通常为ld-linux.so.MAJOR_REVISION_VERSIONl对于MIPS或PPC,则通常为ld.so. MAJOR_REVISION_VERSIONxlanchen2007.6.475Embedded Operating Systemsl在向目标板的根文件系统实际复制任何glibc组件前,应先找出应用程序需要哪些glibc组件。l可以使用ldd命令显示在主机上运行的文件所依赖的库l但是,对将要运行在目标端的命令,ldd可能不行,此时最好使用交叉编译环境提供的相关命令xlanchen2007.6.476Embedded Operating Syst

41、emsuClibcluClibc是glibc的替代品,实现了部分必要的链接库。网站:http:/www.uclibc.org/l若下载的是源代码,则lmake cleanlmake configlmake CROSS=arm-linux-lmake PREFIX= installl若下载的是已经编译好的,则需要将库文件拷贝到根文件系统目录下的lib目录中xlanchen2007.6.477Embedded Operating Systemsl若只拷贝需要的库文件,则需要采用类似glibc的方法找出目标板所依赖的uClibcl一般情况下,为了更好的使用uClibc,需要安装与uClibc相配套的

42、交叉编译工具链,可以到uClibc网站获取帮助,通常需要打补丁xlanchen2007.6.478Embedded Operating Systems准备内核模块和内核映像准备内核模块和内核映像l为目标系统准备内核模块l如果已经建立好内核模块,就将它们复制到目标板的/lib目录里l为目标系统准备内核映像l这与引导加载程序的能力和配置有关l如果设置成从根文件系统启动内核,就要将内核映像复制到目标板的根文件系统的/boot目录下xlanchen2007.6.479Embedded Operating Systems为目标系统建立设备文件为目标系统建立设备文件l在Linux根文件系统中,所有的设备文

43、件都放在/dev目录里,下面列出了一些基本的/dev条目文件名文件名说明说明类型 主设备号 次设备号 权限位memmemmemmem物理内存存取字符11600nullnullnullnullnull设备字符13666zerozerozerozero以0值字节为数据来源 字符15666randomrandomrandomrandom随机数产生器字符18644tty0tty0tty0tty0当前的虚拟控制台字符40600tty1tty1tty1tty1第一个虚拟控制台字符41600ttyS0ttyS0ttyS0ttyS0第一个UART串行端口字符464600ttyttyttytty当前的tty设备

44、字符50666consoleconsoleconsoleconsole 系统控制台字符51600xlanchen2007.6.480Embedded Operating Systemsl可以使用如下的命令建立上表中的几个条目(需要root权限)-m指明设备访问权限等等xlanchen2007.6.481Embedded Operating Systemsxlanchen2007.6.482Embedded Operating Systemsl此外,/dev目录下还包含若干必要的符号链接,如lfd/proc/self/fdlstdinfd/0lstdoutfd/1lstderrfd/2xlanc

45、hen2007.6.483Embedded Operating Systems建立符号链接xlanchen2007.6.484Embedded Operating Systemsl可以看一下,虚拟机中Linux主机上的dev目录l下图为用过的romfs的dev目录xlanchen2007.6.485Embedded Operating Systems应用程序应用程序lLinux拥有丰富的命令,但是嵌入式Linux并不需要这么多的命令l有两种方法:l选择少量有用的Linux命令l尽可能包含多的命令,但是对命令的功能进行裁减l对于后者,介绍3个有用的套件lBusyBoxlTinyLoginlEmb

46、utilsxlanchen2007.6.486Embedded Operating SystemsBusyBoxlBusyBox目前由Erik Andersen来维护网站:http:/ 选项能够提供用户所需要的大部分功能。l能够为任何一个小型或嵌入式系统提供一个相当完整的环境 l提供相当程度的模块化功能,很容易为目标板定制xlanchen2007.6.487Embedded Operating Systems例如例如l下载busybox-0.60.5l解压缩l配置命令,根据需要在Config.h中修改l编译、安装l若希望使用uClibc提供的库,那么交叉编译器改为uclibc相关的编译器xla

47、nchen2007.6.488Embedded Operating Systems查看查看rootfs下的各个下的各个bin目录目录xlanchen2007.6.489Embedded Operating SystemsTinyLogin网站:http:/ Operating Systems例例l下载tinylogin-1.2l解压缩,然后配置l使用glibc或者uclibc的交叉编译器对其进行编译,例如l在root权限下将tinylogin-1.2安装到根文件系统目录中xlanchen2007.6.491Embedded Operating Systemsxlanchen2007.6.492

48、Embedded Operating Systemsxlanchen2007.6.493Embedded Operating SystemsEmbutils网站:http:/www.fefe.de/embutils/l这是针对主流Unix命令提供的一组经过简化和优化的替代品。目前支持ARM、i386、PPC和MIPSl其维护者与diet libc相同,只能静态链接diet libcxlanchen2007.6.494Embedded Operating Systems定制应用程序定制应用程序l自己的应用程序也要放在根文件系统的某个目录下,这取决于应用程序所拥有的组件数量和类型l如果二进制文件较

49、少,可以考虑放到/bin目录下l如果二进制文件多且复杂并且包含一些数据文件,最好在根文件系统中增加一个单独的目录,例如/projectl第二种情况下,通常需要设置PATH环境变量,以便能够找到可执行文件xlanchen2007.6.495Embedded Operating Systems准备系统初始化文件准备系统初始化文件l系统初始化也是Unix系统很重要的一部分,正如我们之前所说,内核的最后一部初始化操作为启动init进程,这个程序负责创建一些其他进程并且启动系统的一些关键组件运行l在Linux中,init进程模仿了System V的init,这对于嵌入式Linux而言,功能太强大l我们将

50、介绍l标准的system V 初始化lBusyBox初始化xlanchen2007.6.496Embedded Operating Systems关于关于init的进一步说明的进一步说明l事实上,内核并不关心init进程是哪一个,init进程只不过代表了内核在初始化完成后要启动应用程序l我们可以修改启动参数让内核使用我们自己的initlinit=PATH_TO_YOUR_INITl缺点在于,这样只能启动我们自己的应用,如果有必要还需要承担标准init的一部分工作,例如启动其他必要的系统组件xlanchen2007.6.497Embedded Operating Systemsl更进一步,当我们

51、的程序出现异常时,可能导致整个系统的关闭或者重启。在有的情况下,这就是系统所希望的,但在大多数情况下,这样做是无用的。l因此,比较安全的方法就是使用一个真正的init程序xlanchen2007.6.498Embedded Operating Systems标准的标准的system V 初始化初始化l标准的init包在多数Linux发行版本中都能找到,也可以在ftp:/ftp.cistron.nl/pub/people/miquels/sysvinit/ 上找到,目前由Miquel van Soorenburg维护l包含的命令有:lhalt,init,killall5,last,mesg,ru

52、nlevel,shutdown,sulogin,utmpdump,以及wallxlanchen2007.6.499Embedded Operating Systemsl下载到源码之后,首先解压缩,然后使用交叉编译器编译make CC=arm-linux-gccl安装到根文件系统中make BIN_OWNER=“$(id un)” BIN_GROUP=“$(id gn)” ROOT=根文件系统目录 installl由于我们使用当前用户权限,而Makefile默认使用root权限,因此可能会失败,这可以忽略。因为目标系统中不考虑多用户。否则可以在root权限下做。xlanchen2007.6.41

53、00Embedded Operating Systemsl若使用root权限,要小心设置ROOT指向目标系统的根文件系统,否则将覆盖主机上的相应程序。由于目标码不同,这将导致系统出错。l安装完init程序后,需要增加/etc/inittab文件,并在/etc/rc.d中增加一些文件l/etc/inittab定义runlevelsl/etc/rc.d目录定义各个runlevels上运行的服务xlanchen2007.6.4101Embedded Operating Systems7个运行级别个运行级别运行级别 说明0系统处于halt状态1只有一个用户,无需login2多用户,无NFS,命令行形式

54、的login3完整的多用户模式,命令行形式的login4未使用5X11,图形界面形式的login6系统rebootxlanchen2007.6.4102Embedded Operating Systemsl在大多数主机上,缺省的runlevel为5l在嵌入式系统上,可以设置为1,此时没有访问控制l系统启动之后,我们仍然可以修改runlevel,这就需要在新老init进程之间使用FIFO进行通信l因此需要创建一个FIFOlmknod m 600 根文件系统目录/dev/initctl pxlanchen2007.6.4103Embedded Operating SystemsBusyBox初始化

55、初始化lBusyBox也提供类似init的功能,适合用于嵌入式系统lBusyBox不提供runlevel功能l在我们前面安装的BusyBox中,sbin/init是/bin/busybox的符号链接,因此BusyBox是系统启动后运行的第一个应用程序lBusyBox将调用它的initxlanchen2007.6.4104Embedded Operating SystemsBusyBox的的initlInit主要执行下列任务1、初始化init的信号处理函数2、初始化console控制台3、解释/etc/inittab文件4、运行系统初始化脚本,BusyBox缺省使用/etc/init.d/rcS

56、5、运行所有inittab的阻塞式命令6、运行所有inittab中的一次性执行命令xlanchen2007.6.4105Embedded Operating Systemsl完成上述任务之后,init就进入一个死循环,在这个死循环中执行下列任务1、运行所有必须再生的命令2、运行所有必须被请求才能响应的命令l在BusyBox初始化console控制台的时候,根据系统的配置进行初始化l如,在启动参数中console=ttyS0,表示使用串口xlanchen2007.6.4106Embedded Operating Systemsl在初始化完console之后,busybox将会检查是否存在etc/

57、inittab,如果没有将会使用缺省的inittab配置l缺省的inittab设置,如l系统重启,系统停止,init重启l还有,在最先的4个虚拟console:tty1tty4上启动shellxlanchen2007.6.4107Embedded Operating SystemsInittab文件的格式文件的格式lInittab文件中每一行有下列格式id:runlevel:action:processl在busybox中,lid代表tty的序号l忽略runlevellProcess说明要运行的程序的路径和命令选项lAction说明process的执行方式xlanchen2007.6.4108

58、Embedded Operating Systems8种执行方式种执行方式lsysinit:提供init的路径lrespawn:每当一个命令结束后,就重启该命令laskfirst:类似respawn,但是要先问一下用户lwait:阻塞式命令,init要等待其运行完毕lonce:只运行一次,不必等待lctrlaltdel:三键齐按时,要执行的命令lshutdown:系统关闭时执行lrestart:系统重启时执行,通常就是initxlanchen2007.6.4109Embedded Operating Systemsl一个可能的inittab如下(id和runlevel都为空):sysinit:

59、/etc/init.d/rcS:respawn:/sbin/getty 115200 ttyS0:respawn:/control-module/bin/init :restart:/sbin/init :shutdown:/bin/umount -a -r 设置/etc/init.d/rcS作为系统初始化文件在串口( 115200波特率)启动一个登录会话启动控制模块定制的系统初始化脚本设置/sbin/init为重启时运行的命令系统关闭时,运行umountxlanchen2007.6.4110Embedded Operating Systems系统初始化脚本系统初始化脚本l根据系统初始化脚本的

60、设置不同,其功能可以很强大l通常l重新挂载根文件系统,以可读可写l挂载其他文件系统l初始化并启动网络l启动系统守护进程xlanchen2007.6.4111Embedded Operating Systems举例举例#!/bin/sh# Remount the root filesystem in read-write (requires /etc/fstab) mount -n -o remount,rw / # Mount /proc filesystem mount /proc # Start the network interface /sbin/ifconfig eth0 192.1

61、68.172.10 xlanchen2007.6.4112Embedded Operating Systems/etc/fstab举例举例# /etc/fstab# devicedirectory type options #/dev/nfs/nfs defaults none/procproc defaults xlanchen2007.6.4113Embedded Operating Systems制作根文件系统制作根文件系统l准备好根文件系统的内容后,就要设置可供目标板使用的根文件系统l选择根文件系统的类型l制作根文件系统的映像或安装根文件系统到目标设备上xlanchen2007.6.4

62、114Embedded Operating Systems建立根文件系统建立根文件系统1、根文件系统的内容及其准备2、选择根文件系统的格式并设置、选择根文件系统的格式并设置xlanchen2007.6.4115Embedded Operating Systems选择根文件系统的依据选择根文件系统的依据描绘一个嵌入式文件系统的特性通常包括:l可被写入:这个文件系统可被写入么?l具有永久性:重引导后,这个文件系统可以保存修改过的内容么?l具有断电可靠性:经变动的文件系统可以在断电之后恢复过来么?l经过压缩:经安装的文件系统,其内容经过压缩么?l存在RAM中:文件系统的内容在被安装之前会先从存储设备

63、取出并放到RAM中么?xlanchen2007.6.4116Embedded Operating Systemsl下表列出了常见的几种嵌入式文件系统及其特性文件系统文件系统可被写入可被写入具有永久性具有断电可靠性经过压缩存在于RAM中CRAMFSCRAMFS否不适用不适用是否JFFS2JFFS2是是是是否JFFSJFFS是是是否否NFTLNFTL上的上的Ext2Ext2是是否否否NFTLNFTL上的上的Ext3Ext3是是是否否RAM diskRAM disk上的上的Ext2Ext2是否否否是xlanchen2007.6.4117Embedded Operating SystemsCRAMFS

64、l这是Linux Torvalds编写的只具备最基本特性的文件系统,它非常简单、经过压缩并且只读,主要用于嵌入式系统,具有以下限制:l每个文件最大不超过16MBl不提供当前目录“.”和上级目录“.”l文件的UID字段只有16位,GID字段只有8位l所有文件的时间戳为Unix epoch(00:00:00 GMT, January 1, 1970)l内存分页大小必须是4096l文件链接计数器永远是1xlanchen2007.6.4118Embedded Operating Systemsl要为根文件系统建立CRAMFS映像,首先要建立并安装CRAMFS工具:cramfsck和mkcramfsl可

65、以在内核源代码树的scripts/cramfs目录里找到他们的程序代码,在该目录下使用make就可以建立这两个工具l使用mkcramfs命令建立CRAMFS映像:lmkcramfs 根文件系统的根目录 映像名xlanchen2007.6.4119Embedded Operating SystemsRAMdiskl存在于RAM中,其存取功能类似于块设备l内核可以在同一时间支持多个活动的RAMdiskl在RAMdisk上可以使用任何磁盘文件系统lRAMdisk通常会从经压缩的磁盘文件系统(例如ext2)加载其内容,因此内核必须具备从存储设备取出initrd(initial RAM disk)映像作

66、为它的根文件系统的能力。xlanchen2007.6.4120Embedded Operating Systemsl启动时,内核会确认引导选项是否指示有initrd的存在,如果有就会从所选定的存储设备取出文件系统映像放入RAM disk,并且将它安装成根文件系统xlanchen2007.6.4121Embedded Operating Systemsl看一下skyeye中ep7312/ep7312_with_imagekernel下的initrd.img中有些什么xlanchen2007.6.4122Embedded Operating Systems建立供建立供RAM disk使用的文件系统

67、使用的文件系统映像映像l创建一个新的mount点l以dd命令建立一个8192KB的文件系统映像,并以/dev/zero对它进行初始化此时,initrd.img全0,相当于一块空白的硬盘xlanchen2007.6.4123Embedded Operating Systemsl对建立好的文件系统映像建立文件系统并且安装(需要root权限)l/sbin/mke2fs F v m0 images/initrd.imgl-F选项指定对mke2fs在文件上运行而不是块设备l-v选项以verbose模式运行l-m0指出不必为超级用户保留任何区块xlanchen2007.6.4124Embedded Ope

68、rating Systems相当于将initrd.img这个磁盘进行文件系统格式化xlanchen2007.6.4125Embedded Operating Systemsl接下来,就可以将initrd.img挂载到刚刚建立的mount点上l当然,此时文件系统中基本上是空的xlanchen2007.6.4126Embedded Operating Systemsl复制根文件系统到RAM diskl可以是我们自己制作的l也可以是之前挂载的ep7312的initrd.imgl卸载根文件系统l现在initrd.img文件中已经包含了目标板的整个根文件系统xlanchen2007.6.4127Embe

69、dded Operating Systemsl最后形成经压缩的RAM disk-9表示最高级的压缩算法xlanchen2007.6.4128Embedded Operating Systems本课内容回顾本课内容回顾一、嵌入式Linux开发综述二、Linux的配置和编译三、根文件系统及其制作xlanchen2007.6.4129Embedded Operating Systems作业作业l在嵌入式Linux系统开发中,存在哪几种主机/目标机开发体系结构?l主机/目标板的调试方式有哪几种?l嵌入式Linux系统的引导配置的类型有哪几种?xlanchen2007.6.4130Embedded Operating Systems

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号