1、毕业设计(论文)文献综述学生姓名 11 学 号 111 指导教师 11职称 讲师 专 业 111 二零一一年六月文献综述一 前言嵌入式系统是以应用为中心和以计算机技术为基础的,并且软硬件是可裁减的,能满足应用系统对功能、可靠性、成本、体积、功耗等指标的严格要求的专用计算机系统。嵌入式Linux系统就是利用Linux其自身的许多特点,把它应用到嵌入式系统里,它被广泛应用在移动电话、个人数字助理(PDA)、媒体播放器、消费性电子产品以及航空航天等领域中。嵌入式Linux的开发大致可分为三个层次:引导装载内核、构造文件系统和图形用户界面。本文基于一款手持电脑的实际开发,介绍嵌入式Linux操作系统中
2、文件系统的构造。二主题1. 文件系统的概念 文件系统是指在一个物理设备上的任何文件组织和目录,它构成了Linux系统上所有数据的基础,Linux程序、库、系统文件和用户文件都驻留其中,因此,它是系统中庞大复杂且又是最为基本和重要的资源。值得提出的是,Linux系统中的文件不仅包括普通的文件和目录,每个和设备相关的实际实体也都被映射为一个文件,例如磁盘、打印机、终端等等,这样的设备文件又称为特殊文件。所以,Linux下的文件是操作系统服务和设备的简单而又统一的接口,在Linux操作系统的一切事物都是文件。 在Linux中,文件系统的结构是基于树状的,根在顶部,各个目录和文件从树根向下分支,目录树
3、的最顶端被称为根目录(/)。在后面介绍的所构造文件系统结构图(图1)即显示了树状的文件系统。Linux操作系统由一些目录和许多文件组成,例如,图中的/bin目录包含二进制文件的可执行程序,/sbin目录用于存储管理系统的二进制文件,/etc目录包含绝大部分的Linux系统配置文件,/lib目录存储程序运行时使用的共享库,/dev目录包含称为设备文件的特殊文件,/proc目录实际上是一个虚拟文件系统,/tmp目录用于存储程序运行时生成的临时文件,/home目录是用户起始目录的基础目录,/var目录保存要随时改变大小的文件,/usr目录及其子目录对 Linux系统的操作非常重要,它保存着系统上的一
4、些最重要的程序以及包含你安装的大型软件包。 由于Linux是一个多任务、多用户的操作系统,因此它里面的文件还都被赋予了一定的权限,权限决定谁能读、写或执行一个文件,以及这个文件的类型和如何执行。例如下面的文件列表:-rw-r-r- 1 root root 1756 Sep 4 2002 inittab就表示:这个名为inittab的文件是普通文件,所有者有读写的权限,所在组和其他人都只有读的权限,它的连接数为1,所有者及文件所属的组都是root,文件中字节数为1756,文件创建日期是2002年9月4日。我们可以通过对文件属性的设置,来满足文件在不同用户组、不同用户操作下的不同状态。2构造嵌入式
5、Linux的文件系统2.1 开发环境及要求 本文所构造的文件系统是基于友善之臂mini2440开发板嵌入式Linux操作系统的开发。该款开发板的硬件环境是:ARM920T核心的SUMSANG S3C2440处理器,64MB的SDRAM,2MB的NOR Flash,64MB的NAND Flash。开发板上有串口、网口和USB接口,开发调试过程需进行串口通讯。系统运行的Linux内核版本是Linux2.6.13。运行于这个环境之上的文件系统必须要满足嵌入式的精小的要求,即装载在NOR Flash之内的文件系统必须精简到大小在2MB以内。 2.2 构造文件系统 1)构造基本目录 首先建立一个文件系统
6、的工作空间。创建目录/home/work,我们所构造的文件系统就在work这个目录中。建立基本目录,如:bin,dev,etc,lib,mnt,proc,sbin,tmp,usr,var等。具体结构图见图1(图中所显示的文件都是目录文件)。/etc目录下只包含了一些启动过程的配置文件,/lib目录下的modules子目录包含了可动态加载到核心的各种模块。另外,目录var下还应创建两个子目录log和run,负责记录系统的日志和运行状态。整个文件系统中除了tmp和var目录放在SDRAM内以外,其他所有目录都放在Flash中,因为tmp和var中的内容需要经常写入,所以放在可读写的RAM里。 2)
7、配置启动过程所必须的文件构造文件系统最基本的要求就是系统能够在此基础上启动运行起来,所以,/sbin下的init程序必不可少。init程序是引导过程完成后内核运行的第一个程序,它能启动全部其他程序。只要init完成运行全部必要的程序,系统就开始建立并开始运行。当程序开始启动时,init读取一个配置文件inittab,这个文件位于/etc下,它确定了init在启动和关机时的工作特性。在我们开发的这个嵌入式系统中,所有的文件内容只需保留与开发要求有关的必须部分,所以inittab的内容被根据需要重新写入,具体内容如图2。id:S:initdefault:si:sysinit:/etc/rc.d/r
8、c.sysinitb:S:respawn:/bin/bashc:S:once:/tools/telnetd -debugd:S:respawn:/sbin/pppd /dev/ttyS0图2 配置文件inittab的内容这个系统运行单用户模式启动;启动后立即运行rc.sysinit脚本,进行系统初始化动作。rc.sysinit脚本也进行了精简,只保留了以读写的方式重新加载(mount)根文件系统的操作(内核启动时只以只读的方式加载了根文件系统),具体rc.sysinit脚本中的内容如图3。Inittab中的后三排是根据开发需要新加入的。为了开发过程用户与系统能进行交互,启动了/bin/bash
9、这个命令解释器,用户在键盘上输入某些命令,bash将读取输入加以解析然后执行该程序。/tools中的telnetd和/sbin中的pppd分别是远程登陆和串口通讯的后台程序,加入它们也是为了方便开发。# Remount the root filesystem read-write.#mount n o remount,rw /mount o remount,rw n /dev/mtdblock2 /mount a图3 脚本rc.sysinit的内容 为了尽量精简内核,程序都以动态链接库文件的方式编译,即当程序运行到所需库文件时才动态加载,所以保证库文件的完整性就显得相当重要。为确保运行各种程序
10、都能在/lib目录中找到合适的库文件,就干脆对/lib中的库文件不作任何删减,而完整的/lib目录(含子目录及全部库文件)也不过2MB大小。我们的/etc目录中没有列入管理组的group文件和管理用户的passwd文件,所以在设置文件或目录的所有权时,全部用id号来代替组名和用户名。用chown命令来改变文件的所有权,如chown 0.0 inittab(前一个“0”代表属组,后一个“0”代表用户),修改后的inittab文件的详细信息为:-rw-r-r- 1 0 0 237 Jul 26 10:30 inittab将系统中所有的文件和目录按照其具体类型和要求,为其设定特定的组和用户对它的所有
11、权,例如,/etc中的module.conf配置文件的所有权是module组和module用户,那么只有组和用户同为module的程序(比如/lib/modules/中的程序)才有权查看module.conf文件,其他非root用户的程序都打不开这个文件。这样,除了root用户,其他不具有操作权限的用户就不可能对那些特殊文件,如有关网络、安全等重要信息进行执行和修改。而拥有root用户权限的文件只有init和bash两个,init用于完成系统的初始化过程,并不涉及对其他文件和程序的操作;bash是开发过程中用户与系统交互的需要,便于对文件系统进行修改,开发完成后的实际系统并不需要bash,可删
12、除。这样,各个文件和程序均在自己所属的组和用户中运行,不会互相干扰,使得整个系统有条不紊,不会发生程序越权误操作的现象,保证了操作系统本身的安全性,也让试图窃取或破坏数据的攻击者无机可乘。 4)根据需要,在基本文件系统上添加应用程序 基本文件系统完成后,再根据产品和开发的实际要求,在上面再构筑一些应用和服务。针对本款产品,对于所需求的网络功能,我们在/bin中加入netstat、ping,在/sbin中加入iwconfig等网络程序;为了将一些服务以模块的方式加载以缓解内核的负担,我们在/sbin中加入了insmod、lsmod、modprobe、depmod、rmmod等有关操作模块的命令;
13、还有,为了搭建开发过程的交叉编译的环境,需要用到串口通讯,所以在/sbin中加入pppd的命令,在/etc中加入ppp目录及其配置文件等等。 到此,一个嵌入式Linux文件系统就基本构造完成。为了系统能在特定的嵌入式硬件设备上运行,系统中所有的二进制文件都必须是经过特定的嵌入式开发编译工具编译,此次开发用到的嵌入式开发工具是3.2版本的arm-linux-gcc。将编译好的文件系统烧至嵌入式系统的开发板中,调通串口,就可以进行调试和进一步的开发了。三结束语在这次毕业设计中,我们构造了嵌入式Linux文件系统,它使得内核在系统尽量精简的情况下能够运行起来,并满足产品和系统各方面的要求,其中,为文
14、件系统配置用户和属组以达到一定的安全性更是系统的一大特色。Linux的文件系统事实上非常的庞大,构造一个嵌入式的Linux文件系统是一个很复杂的过程。如何让文件系统在保证安全的前提下精简得更紧凑、运行得更有效率,是需要深入探索的一个课题。四 参考文献:【1】 李亚锋,欧文盛ARM嵌入式Linux系统开发从入门到精通【Mi北京清华大学出版社,2007【2】 汤荷美,董渊,李莉Linux基础教程(1)操作系统基础【Mi北京:清华大学出版社,2001【3】 杨水清,张剑,施云飞ARM嵌入式Linux系统开发技术详解【Mi电子工业出版社, 2007【4】 雅默(美)著,韩存兵,龚波改编构建嵌入式LIN
15、UX系统【Mi中国电力出版社, 2006【5】 商斌编著Linux设备驱动开发入门与编程实践【Mi电子工业出版社,2007【6】 梁如军主编Red Hat Linux 9应用基础教程【Mi机械工业出版社,2007【7】 孙纪坤,张小全嵌入式Linux系统开发技术详解基于ARM【Mi人民邮电出版社,2007【8】 孙琼嵌入式Linux应用程序开发详解【Mi人民邮电出版社, 2006【9】 王洪辉嵌入式系统Linux内核开发实战指南(ARM平台)(含光盘一张)【Mi电子工业出版社2006【10】 (美)博韦,西斯特著,陈莉君,张琼声,张宏伟译深入理解Linux内核第三版【Mi电子工业出版社,2007【11】 杜春雷ARM体系结构与编程【Mi北京:清华大学出版社,2003【12】 徐虹,何嘉,张钟澍操作系统实验指导基于Linux内核【Mi北京:清华大学出版社,2003.【13】 赵炯Linux内核完全注释【Mi机械工业出版社2002【14】 马忠梅ARM&Linux嵌入式系统教程【Mi北京航空航天大学出版社2005