嵌入式产品早已渗透到人们生活的方方面面,非常是在数字信息技术和网路技术高速发展的明天,手持信息产品正拓展着一片越来越大的市场,PDA、手机、掌上笔记本、信息电器等各色手持产品已拥有了庞大的用户群。手持信息产品所运用的最关键的核心技术就是嵌入式操作系统。人们对嵌入式产品的需求也不再仅仅是功能单一的电子辞典类产品,嵌入式操作系统逐渐成为嵌入式产品的核心。而其中,Linux以其开源的内核和免费的应用程序、能够自由地移植和开发的优势,更顺应嵌入式市场。嵌入式Linux的开发大致可分为三个层次:引导装载内核、构造文件系统和图形用户界面。作为操作系统重要组成部份的文件系统,决定了操作系统本身的信息和用户的数据在储存设备上的组织方式。对嵌入式文件系统的研究、设计和开发也渐渐成为嵌入式系统研究领域的一个方向。
嵌入式Linux文件系统
文件系统是指在一个化学设备上的任何文件组织和目录,它构成了Linux系统上所有数据的基础,Linux程序、库、系统文件和用户文件都留驻其中,因而,它是系统中庞大复杂且又是最为基本和重要的资源。值得提出的是,Linux系统中的文件除了包括普通的文件和目录,每位和设备相关的实际实体也都被映射为一个文件,比如c盘、打印机、终端等等。这样的设备文件又称为特殊文件。所以,Linux下的文件是操作系统服务和设备的简单而又统一的插口,从某种意义上可以说,Linux里的一切事物都是文件。
在Linux中,文件系统的结构是基于树形的,根在底部,各个目录和文件从树枝向上分支。目录树的最顶端被称为根目录(/)。在前面介绍的所构造文件系统结布光(图1)即显示了树形的文件系统。Linux操作系统由一些目录和许多文件组成,比如,图中的/bin目录包含二补码文件的可执行程序,/sbin目录用于储存管理系统的二补码文件,/etc目录包含绝大部份的Linux系统配置文件,/lib目录储存程序运行时使用的共享库,/dev目录包含称为设备文件的特殊文件,/proc目录实际上是一个虚拟文件系统,/tmp目录用于储存程序运行时生成的临时文件,/home目录是用户起始目录的基础目录,/var目录保存要随时改变大小的文件,/usr目录及其子目录对Linux系统的操作十分重要,它保存着系统上的一些最重要的程序以及包含你安装的小型软件包。
因为Linux是一个多任务、多用户的操作系统,因而它上面的文件还都被赋于了一定的权限,权限决定谁能读、写或执行一个文件,以及这个文件的类型和怎样执行。诸如下边的文件列表:
-rw-r-r--1rootroot1756Sep92005inittab
其表示:这个名为inittab的文件是普通文件,所有者有读写的权限,所在组和其他人都只有读的权限,它的联接数为1,所有者及文件所属的组都是root,文件中字节数为1756,文件创建日期是2005年9月9日。我们可以通过对文件属性的设置,来满足文件在不同用户组、不同用户操作下的不同状态。
因为嵌入式设备的一些特殊性,致使嵌入式文件系统不仅满足通常文件系统的基本要求外,还有一些自身的特点:
文件系统面对的储存介质特殊;
文件系统有快速恢复的特殊要求;
化学文件系统的多样性和动态可装配性;
须要文件系统具有跨操作平台的安全性;
文件系统要能满足整个系统的实时性要求。
嵌入式文件系统有安全性和均衡负载这样的要求,而日志型文件系统可以挺好地解决安全性的问题。经过几年来的发展。日志型的嵌入式文件系统已成为嵌入式文件系统的主流。1999年。Axis
CommunicationsAB发布了JFFS(JournalingFlashFileSystem)的第一个版本。这是一个专门为嵌入式系统的Flash设备而设计的文件系统,同时它也是一个日志型的文件系统。JFFS2是JFFS的第二个版本,于2001年发布,并得到了RedHat的支持,成为RedHat嵌入式操作系统eCos的文件系统。Flash储存容量的有限性决定了JFFS是一个小规格的文件系统。因此在文件系统的内部设计上采用了许多简化处理。同时,它们结合了Flash设备的读写特点和嵌入式文件系统的防断电特点,致使JFFS成为适宜于嵌入式系统上针对Flash设备的文件系统的理想选择。
嵌入式Linux文件系统的设计
●实验主机和目标平台的联接
实验主机和目标平台的联接有两种方式。一种是以太网联接,这些联接方法可以进行内核文件、根文件系统映像文件的下载。另一种是并口联接,这样的联接方法可以供调试之用。对于以太网联接,作者使用一根普通网线,将实验主机和目标平台都联接在Hub上。这样做既简单,也不阻碍实验主机与外部网路的通信。对于并口联接,用一根并口线联接目标平台的FulFunctionUART(FFUART)并口和实验主机的并口。主要是在调试阶段使用这些联接形式,在目标平台的标准输入还未被驱动的情况下。用实验主机的标准输入控制目标平台,向目标平台发控制命令。
●构建文件系统
首先构建一个文件系统的工作空间。创建目录/bome/work,我们所构造的文件系统就在work这个目录中。构建基本目录,如:bin,dev,etc,lib,mnt,proc,sbin,tmp,usr,vat,tools具体结布光见图1(图中所显示的文件都是目录文件)。其中,tools是易于开发而创建的目录。由于整个系统要求尽量小,所以应只包含一些必须的二补码程序。而开发过程中须要用到的命令就置于tools中,将PATH包含tools即可。/etc目录下只包含了一些启动过程的配置文件,/lib目录下的modules于目录包含了可动态加载到核心的各类模块。另外,目录var下还应创建两个子目录log和run,负责记录系统的日志和运行状态。整个文件系统中不仅tmp和var目录置于SDRAM内以外,其他所有目录都置于Flash中,由于trap和var中的内容须要时常写入,所以放到可读写的RAM里。
620)this.width=620;"alt=""src=""/>
插图1:建立文件系统的树形结构
当在目标平台实现了一个嵌入式Linux以后,为了挺好地管理操作系统和用户的数据文件,引入了文件系统。化学文件系统是JFFS2,考虑到扩展数学文件系统的要求,保留了Linux的VFS层次。考虑到储存设备扩展的要求,在Linux内核中加入了对MTD设备的支持。按照前面的表述,可给出整个文件系统的体系结布光,见图2所示。
123
关键词:
加入陌陌
获取电子行业最新资讯
620)this.width=620;"alt=""src=""/>
插图2:文件系统体系结构
建立文件系统最基本的要求就是系统才能在此基础上启动运行上去,所以,/sbin下的init程序必不可少。init程序是引导过程完成后内核运行的第一个程序,它能启动全部其他程序。只要init完成运行全部必要的程序,系统就开始构建并开始运行。当程序开始启动时,init读取一个配置文件inittab,这个文件坐落/etc下,它确定了init在启动和死机时的工作特点。在我们开发的这个嵌入式系统中,所有的文件内容只需保留与开发要求有关的必须部份。
这个系统运行单用户模式启动:启动后立刻运行rc.sysinit脚本,进行系统初始化动作。rc.sysinit脚本也进行了精简linux学习视频,只保留了以读写的形式重新加载(mount)根文件系统的操作(内核启动时只以只读的形式加载了根文件系统),具体rc.sysinit脚本中的内容如下:
#Remounttherootfilesystemread-write
#mount-n-oremount.rw/mount-oremount.rw-n/dev/mtdblock2/mount-a
为了开发过程用户与系统能进行交互,启动了/bin/bash这个命令类库。用户在鼠标上输入个别命令,bash将读取输入加以解析之后执行该程序。/tools中的telnetd和/sbin中的pppd分别是远程登录和并口通信的后台程序,加入它们也是为了便捷开发。
另外,为了尽量精简内核linux作为嵌入式操作系统的优势,程序都以动态链接库文件的形式编译,即当程序运行到所需库文件时才动态加载。所以保证库文件的完整性就变得相当重要。为确保运行各类程序都能在/lib目录中找到合适的库文件,就干脆对/lib中的库文件不作任何删节,而完整的/lib目录(含子目录及全部库文件)也不过2MB大小。
●配置文件系统用户
这一步骤的实现,彰显了该嵌入式操作系统的一大特色---安全性。为了避免系统中的文件被误改或被恶意破坏,我们设置组和用户,让只有隶属于特定组的特定用户能够对特定的程序进行合法操作。/etc目录中没有纳入管理组的group文件和管理用户的passwd文件,所以在设置文件或目录的所有权时,全部用id号来取代组名和用户名。用chown命令来改变文件的所有权,如chown0.0inittab(前一个“0”代表属组,后一个“0”代表用户),更改后的inittab文件的详尽信息为:-rw-r-r--100237Jul26l0:30inittab
将系统中所有的文件和目录根据其具体类型和要求,为其设定特定的组和用户对它的所有权。诸如,/etc中的module.conf配置文件的所有权是module组和module用户。这么只有组和用户同为module的程序(例如/lib/modules/中的程序)才有权查看module.conf文件,其他非root用户的程序都打不开这个文件。这样,不仅root用户,其他不具有操作权限的用户就不可能对这些特殊文件,如有关网路、安全等重要信息进行执行和更改。而拥有root用户权限的文件只有init和bash两个。init用于完成系统的初始化过程,并不涉及对其他文件和程序的操作;bash是开发过程中用户与系统交互的须要,以便对文件系统进行更改linux虚拟主机,开发完成后的实际系统并不须要bash,可删掉。这样,各个文件和程序均在自己所属的组和用户中运行,不会相互干扰。促使整个系统有条不紊,不会发生程序越权误操作的现象。保证了操作系统本身的安全性,也让企图盗取或破坏数据的功击者无机可乘。
按照须要,在基本文件系统上添加应用程序基本文件系统完成后,再依照开发的实际要求,在里面再打造一些应用和服务。诸如,对于所需求的网路功能,我们在/bin中加入netstat、ping,在/sbin中加入ifconfig、route、xinetd等网路程序:为了将一些服务以模块的形式加载,以减轻内核的负担,我们在/sbin中加入了insmod、lsmod、modprobe、depmod、rmmod等有关操作模块的命令。还有,为了搭建开发过程的交叉编译的环境,须要用到并口通信,所以在/sbin中加入pppd的命令,在/etc中加入PPP目录及其配置文件等等。
到此,一个满足系统需求的嵌入式Linux文件系统就基本构造完成。为了系统能在特定的嵌入式硬件设备上运行,系统中所有的二补码文件都必须是经过特定的嵌入式开发编译工具编译,将编译好的文件系统烧至嵌入式系统的开发板中,调通并口,就可以进行调试和进一步的开发了。
嵌入式Linux文件系统的进一步开发
根据上一部分给出的文件系统体系结构,文件系统的实现主要在VFS层、物理文件系统层和MTD层。在Linux2.4之后的版本中,JFFS2早已作为一种标准的文件系统被支持,所以致使Linux的VFS支持JFFS2并不是一件难事,在源代码中也不用做更改。下边给出在MTD层,Linux的源代码做的一些更改。另外,表述JFFS2化学文件系统映像文件的生成。
支持MTD设备
对MTD设备的支持要经过配置内核、编写设备驱动程序和完善MTD设备这几个步骤。
第一步,配置内核参数,选中MemoryTechnologyDevices(MTD)support,下边的子项中起码要选择MTDpartitioningsupport、DirectchardeviceaccesstoMTDdevices和CachingblockdeviceaccesstoMTDdevices这三项。其他的有关NFTL,CFI的支持按照须要选定。
第二步,编撰针对目标平台Flash设备的MTD驱动程序,主要实现创建MTD分区和删掉MTD分区的函数。创建分区的流程见图3所示。删掉分区的函数比较简单,假如存在MTD分区,就调用del_mtd_partitions(structmtdinfo*)删掉分区,但是删掉为MTD设备创建的映射表。
620)this.width=620;"alt=""src=""/>
插图3:创建MTD分区
第三步,将更改过的MTD驱动文件作为内核文件的补丁,并给内核文件打上这个补丁,最后,编译生成内核文件。
第四步,使用mknod命令构建MTD设备。
JFFS2映象文件的生成
首先,须要内核支持JFFS2,因而在配置内核参数时,选中FileSystems下的JournalingFlashFileSystemv2(JFFS2)support。假定从一个RAMDISK的文件系统中得到完善根文件系统所需的全部文件和系统所有的设备等信息。制做步骤如下:
123
关键词:
加入陌陌
获取电子行业最新资讯
第一步,在开发主机中将这个Ramdisk以loop的形式挂接到某个临时目录下。在这个目录下就出现了一些文件系统的基本文件和信息,可以做增删以达到订制的目的。
第二步,更改/etc/rc.d/rc.sysinit文件,致使文件系统在remount时不会出现只读的情况。具体更改如下:
Mount-n-oremount.rw//加入这一行
Mount-n-tproc/procrw//在这一行中加入-n
第三步,使用mkfs.jffs2生成JFFFS2的映像文件。具体的命令格式如下:
Mkfs.jffs2-d文件系统所在目录>-o映像文件名>
这时,就得到了一个JFFS2的映像文件,将它下载到目标平台。最后就是怎样挂载它,使它成为一个根文件系统了。在调试阶段和最终系统成形以后,挂载的形式有所不同,而具体的挂载方式在上面已表述,这儿不再重复说明。
结语
我们构造了一个嵌入式版本的Linux文件系统,它促使内核在系统尽量精简的情况下才能运行上去,并满足产品和系统各方面的要求。其中linux作为嵌入式操作系统的优势,为文件系统配置用户和属组以达到一定的安全性更是系统的一大特色。另外,在这个嵌入式文件系统中,引入了VFS的支持,尽管牺牲了一些空间,并且大大便捷了今后各类数学文件系统的动态加载。Linux的文件系统事实上十分的庞大,构造一个嵌入式的Linux文件系统是一个很复杂的过程。怎么让文件系统在保证安全的前提下精简得更紧凑、运行得更有效率,是须要深入探求的一个课题。
123
关键词:
加入陌陌
获取电子行业最新资讯