第八章 嵌入式Linux根文件系统的建立

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第7章嵌入式Linux根文件系统的建立本章目标介绍LINUX文件系统什么是根文件系统;根文件系统的目录构成;根文件系统内容组成;BusyBox的作用以及如何编译生成它?本章结构嵌入式Linux系统的建立文件系统简介嵌入式Linux根文件系统嵌入式文件系统根文件系统引导过程NFS环境建立与使用7.1、文件系统简介(1)Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs2、YAFFS、ramfs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(VirtualFileSystem),为各类文件系统提供一个统一的操作界面和应用编程接口。Linux下的文件系统结构如下:7.1、文件系统简介(2)不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM,SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等。7.2、嵌入式Linux根文件系统7.2.1、根文件系统简介7.2.2、根文件系统目录构成解析7.2.1、根文件系统简介简单的来说,根文件系统就是一种目录结构,那么根文件系统和普通的文件系统有什么区呢?其实根文件系统就是要包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux系统启动所必须的文件都可以成为根文件系统。7.2.2、基本根文件系统目录构成解析目录名称含义/bin存放二进制程序,如:ls,cp/boot存放系统启动的一些程序/dev存放设备文件/etc存放系统配置文件,如:group,profile/home用户根目录/lib存放库文件/media媒介的挂载点,如:闪存/mnt该目录用来为其他文件系统提供安装点/opt不随发行版本一起交付的程序/procproc文件系统/root超级用户根目录/sbin存放超级用户运行的二进制文件/src存放一些服务的目录/syssys文件系统的目录/var存放经常变化的文件,如临时文件等7.3、根文件系统引导过程(1)一般的系统先启动的是/sbin/init,而如同原始的主流init,BusyBox也可以处理系统的启动工作。BusyBox的init尤其适合在嵌入式系统中使用,因为它可以为嵌入式系统提供所需要的大部分init功能,却不会让嵌入式系统被SystemVinit的额外特性拖累。因为/sbin/init是/bin/busybox的符号链接,所以BusyBox是目标板系统上执行的第一应用程序。当BusyBox知道调用它的目的是要执行init,它会立即跳转到init进程。7.3、根文件系统引导过程(2)BusyBox的init进程会依次进行以下工作:为init设置信号处理进程。初始化控制台。剖析inittab文件、/etc/inittab文件。执行系统初始化的命令行。BusyBox在缺省情况下会使用/etc/init.d/rcS命令行。执行所有会导致init暂停的inittab命令。执行所有仅执行一次的inittab命令。一旦完成以上工作,init进程便会循环执行以下工作:执行所有终止时必须重新启动的inittab命令。执行所有终止时必须重新启动但启动前必须先询问过用户的inittab命令。7.4、嵌入式文件系统7.4.1、嵌入式文件系统简介7.4.2、嵌入式文件系统的种类7.4.1、嵌入式文件系统简介Linux文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。Linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。7.4.2嵌入式文件系统种类(1)基于FLASH的文件系统jffs2Yaffs/Yaffs2CramfsRomfs基于RAM的文件系统Ramdiskramfs/tmpfs网络文件系统NFS7.4.2常见的嵌入式文件系统(2)jffs2:JFFS文件系统最早是由瑞典AxisCommunications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux,uCLinux中。Jffs2:日志闪存文件系统版本2主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。7.4.2、常见的嵌入式文件系统(3)yaffs/yaffs2:yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE,pSOS和ThreadX等。yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。yaffs与yaffs2的主要区别在于,前者仅支持小页(512Bytes)NAND闪存,后者则可支持大页(2KB)NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。7.4.2、常见的嵌入式文件系统(4)Cramfs:Cramfs是Linux的创始人LinusTorvalds参与开发的一种只读的压缩文件系统。它也基于MTD驱动程序。在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行。7.4.2、常见的嵌入式文件系统(5)Romfs:传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以XIP(eXecuteInPlace,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。7.4.2、常见的嵌入式文件系统(6)Ramdisk:Ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。7.4.2、常见的嵌入式文件系统(7)ramfs/tmpfs:Ramfs是LinusTorvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。7.5、NFS环境的建立和使用设置共享目录建立共享目录启动和停止nfs服务nfs的使用----通过NFS开发应用程序nfs的使用----通过NFS启动系统7.6、根文件系统的基本结构(1)/bin、/dev、/etc、/lib、/proc、/sbin和/usr,都是不可或缺的。为多用户提供可扩展环境的所有目录(例如/home、/mnt、/opt和/root)可以省略。调整根文件系统的时候,我们甚至可以进一步移除/tmp和/var,不过这么做可能会危害到某些软件的运行。因此不建议采用这种过于简化的做法。7.6、根文件系统的基本结构(2)在根文件系统上,存放二进制文件的目录主要有四个/bin、/sbin、/usr/bin和/usr/sbin。二进制文件要放在其中哪个目录,这与它在系统中所扮演的角色有很大的关系。如果这是用户和系统管理员必备的二进制文件,就会放在/bin。如果这是系统管理员必备、但是一般用户根本不会用到的二进制工件,就会放在/sbin。相对而言,如果不是用户必备的二进制文件,多半会放在/usr/bin;如果不是系统管理必备的工具,多半会放在/usr/sbin。7.6、根文件系统的基本结构(3)至于链接库的摆放位置,也是同样的道理。系统引导以及执行最基本命令需要的链接库会摆在/lib。所有其他的链接库则会摆在/usr/lib。通常,套件安装时,会在/usr/lib中产生子目录,以便摆放它自己的链接库。以Perl5.x为例,它会产生/usr/lib/perl5目录,里自摆放的都是与Perl有关的链接库和模块。7.7、链接库(1)如何在目标板的根文件系统上安装链接库,让我们开发的应用程序使用他们。你可以在交叉编译工具建立期间列出/usr/local/arm/3.4.1/arm-linux/lib目录的内容检查它所安装的所有链接库。7.7、链接库(2)实际的共享链接库这类文件的文件名格式为libLIBRARY_NAME-GLIBC_VERSION.so其中。LBRARY_NAME是链接库的名称,GLIBC_VERSION是你使用的glibc套件的版本编号。例如,glibc2.2.3的数学链接库的名称为libm-2.2.3.so。主修订版本的符号链接主修订版本的编号方式与实际的glibc版号不同。以glibc223实际的共享C链接库libc-2.2.3.so为例,它的主修订版本编号为6。相对而言,libdl-2.2.3.so的主修订版本编号为2。主修订版本的符号链接的名称格式为libLIBRARY_NAME.so.MAJOR_REVISION_VERSION,其中MAJOR_REVISION_VERSION是链接库的主修订版本编号。以实际的C链接库为例,其符号链接的名称为libc.so.6。libdl则是libdl.so.2。7.7、链接库(3)与版本无关的符号链接指向主修订版本的符号链接这些符号链接的主要功能,是为需要链接特定链接库的所有程序提供一个通用的条目,与主修订版本的编号或glibc涉及的版本无关。这些符号链接典型的格式为libLIBRARY_NAME.so.例如,librm.so指向libm.so.6,libr

1 / 42
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功