收藏 分享(赏)

第 5 章 嵌入式Linux根文件系统及其制作.ppt

上传人:jinchen 文档编号:8698983 上传时间:2019-07-08 格式:PPT 页数:50 大小:722.50KB
下载 相关 举报
第 5 章 嵌入式Linux根文件系统及其制作.ppt_第1页
第1页 / 共50页
第 5 章 嵌入式Linux根文件系统及其制作.ppt_第2页
第2页 / 共50页
第 5 章 嵌入式Linux根文件系统及其制作.ppt_第3页
第3页 / 共50页
第 5 章 嵌入式Linux根文件系统及其制作.ppt_第4页
第4页 / 共50页
第 5 章 嵌入式Linux根文件系统及其制作.ppt_第5页
第5页 / 共50页
点击查看更多>>
资源描述

1、第 5 章 嵌入式Linux根文件系统及其制作,目 录,Linux文件系统简介,1,使用BusyBox制作命令工具集,2,使用BusyBox制作命令工具集,3,使用BusyBox生成并移植pax270-s根文件系统,4,Linux文件系统简介,在Unix业界有一句话叫做“一切皆文件”,这是对Linux文件系统的一个很好抽象。 我们说“Linux中一切皆文件”直观地可以这样理解:所有的东西,设备、内存都模拟成文件。 而Windows中,我们则可以极端地认为“一切皆设备”,Linux文件的描述,节点 目录 链接(目的:实现文件的共享)软链接硬链接,硬链接,软链接,硬链接 硬链接指向文件的i节点。用

2、ln命令就可以创建一个硬链接。例如,执行ln add addlink 命令就建立一个add文件的硬链接addlink文件。在下面的例子中可以看到add和addlink文件有相同的i节点或索引号(297731);有相同的文件创建日期和时间(1月9日,22:20);有相同的文件大小(138字节)。 #ls li add* 297731 -rw-r-r- 2 root root 138 1月 9 22:20 add 297731 -rw-r-r- 2 root root 138 1月 9 22:20 addlink,软链接 软链接是与要链接文件或目录的路径链接,而不是与i节点链接;因此,软链接只是指

3、向i节点号。可以用ln s命令创建一个软链接。例如,执行ln s add softlink命令就建立一个add文件的软链接softlink文件。在下面的例子中可以看到add和softlink文件有不同的i节点或索引号(分别为297731和297777);有不同的文件创建日期和时间(分别为1月9日,22:20和2月28日,20:41);有不同的文件大小(分别为138和3字节)。 # ls li add softlink 297731 -rw-r-r- 2 root root 138 1月 9 22:20 add 297777 lrwxrwxrwx 1 root root 3 2月 28 20:4

4、1 softlink - add 对于采用硬链接方式,要对被链接的文件进行特殊管理,以免它被删除时引发系统错误。对Linux系统而言,系统为每个文件设有链接计数器。当指向一个文件的新链接建立时,该链接计数器加1;当一个文件链接被从目录中删除时,该链接计数器减1,如果链接计数器的值为0,则该文件所占据的空间被释放。,文件类型,我们把Linux下的文件分成5种文件类型: c 字符设备 b 块设备 l 连接 f 普通文件 d 目录,文件类型,字段1:文件种类和权限 字段2:硬链接个数。 字段3:文件所有者。 字段4:所属群组。 字段5:文件或者目录大小。 字段6:最后访问或修改时间。 字段7: 文件

5、名或目录名。,设备文件,Linux 中的设备有2种类型:字符设备(无缓冲且只能顺序存取)、块设备(有缓冲且可以随机存取)。 每个字符设备和块设备都必须有主、次设备号,主设备号相同的设备是同类设备(使用同一个驱动程序)。这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理硬件,又称为“虚拟设备”)。,设备文件,一般来说,每个设备在/dev 目录下都有一个对应的文件(设备节点)。 可以通过cat /proc/devices 命令查看当前已经加载的设备驱动程序的主设备号。 在/dev 目录下除了字符设备和块设备节点之外还通常还会存在:FIFO管道、S

6、ocket、软/硬连接、目录。这些东西没有主/次设备号。,API 文件操作系统调用,Linux操作系统提供了一系列的系统调用来进行文件操作。常用的文件操作系统调用,创建creat打开open读写read/writeI/O操作ioctl关闭close,Linux支持的常见的文件系统类型,Linux自身提供的缺省文件系统:ext2fs(一般根文件系统/使用此文件系统);新增的自身提供的文件系统:ext3fs、ReiserFS、IBM JFS等 其它UNIX使用的文件系统:minix,ext,xiafs等 DOS/Windows使用的文件系统:FAT-12,FAT-16,FAT-32,VFAT,NT

7、FS CD-ROM : ISO 9660 NFS(网络文件系统);SMBFS(Windows共享文件系统) 嵌入式常用的文件系统:cramfs,JFFS2 /proc(用于内核和进程信息),Linux 专用文件系统,Minix是Linux 的第一个文件系统,有局限,性能比较差。文件名不能长于14 个字符,最大的文件大小是64M 字节 在1992 年4 月引入第一个专为Linux 设计的文件系统-扩展文件系统或EXT (Extend File System ) 1993 年,增加了扩展文件系统第二版,或EXT2,虚拟文件系统,现在的系统大多都在系统内核和文件系统之间提供一个标准的接口,真实的文件

8、系统通过一个接口层从操作系统和系统服务中分离出来,这样不同文件结构之间的数据可以十分方便地交换。 Linux也在系统内核和文件系统之间提供了一种叫做虚拟文件系统VFS(virtual file system)的标准接口。 VFS 允许Linux 支持许多(通常是不同的)文件系统,每一个都向VFS 表现一个通用的软件接口。Linux 文件系统的所有细节都通过软件进行转换,所以所有的文件系统对于Linux 核心的其余部分和系统中运行的程序显得一样。,虚拟文件系统,嵌入式文件系统类型,Ramdisk:是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的

9、机制,并且可以作为根文件系统。 ramfs/tmpfs :是Linus Torvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。Ramfs/tmpfs文件系统 把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var 目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。Ramfs/tmpfs相对于传统的

10、Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。,1. 基于RAM的文件系统,基于FLASH的文件系统,Flash(闪存)作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为单位进行的。 Flash的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因此,必须针对Flash的硬件特性设计符合应用要求的文件系统;传统的文件系统如ext2等,用作F

11、lash的文件系统会有诸多弊端。 在嵌入式Linux下,MTD(MemoryTechnology Device,存储技术设备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD驱动层的。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。,2. 基于Flash的文件系统,嵌入式文件系统类型,2. 基于Flash的文件系统,两种FLASH:NAND FLASHNOR FLASH,(1) NOR 的读速度比NAND 稍快一些。 (2) NAND

12、 的写入速度比NOR 快很多。 (3) NAND 的擦除速度远比NOR 快。 (4) NAND 的擦除单元更小,相应的擦除电路也更加简单。 (5) NAND 闪存中每个块的最大擦写次数是一百万次 ,而NOR 的擦写次数是十万次。,JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。 Jffs2: 日志闪存文件系统版本2 (Journallin

13、gFlash FileSystemv2) 目前jffs3正在开发中。关于jffs系列文件系统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。 主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。 jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在挂载时需要扫描整个FLASH的内容,以

14、找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。,嵌入式文件系统类型,2. 基于Flash的文件系统:JFFS/JFFS2,yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操

15、作。当然,yaffs也可与MTD驱动程序配合使用。yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。,嵌入式文件系统类型,2. 基于Flash的文件系统:yaffs/yaffs2,由LinusTorvalds参与开发的小型只读压缩文件系统 Inode、文件名称和目录信息不压缩 单个文件最大为16MB 数据压缩存放 适合不需要写、且体积较大的文件系统,如/lib,/opt等 与JFFS2相比,读取速度快 压缩率可以超过50 读取文件时,

16、每次读取4k内容,解压缩到cache中 Linux内核已提供了对cramfs的支持,只要编译时选中,嵌入式文件系统类型,2. 基于Flash的文件系统 :Cramfs,嵌入式文件系统类型,2. 基于Flash的文件系统 :Romfs,传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以 XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。,嵌入式文件系统类型,3. NFS,NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络

17、共享文件的技术。在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。,UP-TECHPXA270-S Linux 文件系统,根文件系统用户YAFFS 文件系统临时文件系统,UP-TECHPXA270-S 有一个16M 大小的NORFLASH,根文件系统是建立在该flash 的后大半部分。 该flash 的前小半部分用来存放bootloader 和kernel 映像。根文件系统采用JFFS2 。为了得到比JFFS2 文件系统格式更快的读写速度,用户文件系统采用YAFFS 格式。 UP-TECHPXA270-S

18、 有一个64M 大小的NANDFLASH 作为用户文件系统,它挂载于根文件系统下的/mnt/yaffs 目录。,UP-TECHPXA270-S Linux 文件系统,UP-TECHPXA270-S Linux 文件系统,Linux根文件系统,Linux内核在系统启动期间进行的最后操作之一就是安装根文件系统。根文件系统一直是所有类UNIX系统不可或缺的组件。,根文件系统的基本结构,bin必要的用户命令(二进制文件) *boot引导加载程序使用的静态文件 dev设备文件及其他特殊文件 etc 系统配置文件 *home 用户主目录 lib 必要的链接库,例如:C链接库、内核模块 mnt临时挂载的文件

19、系统的挂载点“*”目录在嵌入式Linux上为可选的。,根文件系统的基本结构,*opt 附加软件的安装目录 proc 提供内核和进程信息的proc文件系统 *root root用户主目录 sbin必要的系统管理员命令 tmp临时文件目录 usr大多数用户使用的应用程序和文件目录 var监控程序和工具程序存放的可变数据,使用BusyBox制作命令工具集,BusyBox是一个UNIX系统工具集,它将很多普通的UNIX工具集成到一个很小的可执行文件中(在Linux下该可执行文件的文件名为busybox),为普通用户提供大多数常用的命令。不仅包含像cat 、 echo等的简单的工具,还包含了一些更大、更

20、复杂的工具,例如 grep、find、mount 以及 telnet。busybox享有“嵌入式Linux的瑞士军刀”美誉。,BusyBox的init,BusyBox也提供init程序,如同主流init,BusyBox也可以处理系统启动工作。 BusyBox的init比较适合嵌入式系统,但是有的系统可能不适合,例如它并不提供运行级别支持。,BusyBox启动基本流程分析,内核启动后的第一个用户进程是init进程,它根据配置文件决定启动哪些程序,比如要执行哪些脚本、启动shell、执行用户指定程序等。init进程是后续所有进程的发起者,比如init进程启动/bin/sh后,才能够使用控制台输入命

21、令。一般init进程的执行都是通过/sbin/init发起。所以实际上,busybox的启动流程可以概括为: /sbin/init - /etc/inittab - /etc/init.d/rcS。,BusyBox启动基本流程分析,BusyBox配置选项,使用BusyBox生成并移植pax270-s根文件系统,在一个基本的Linux根文件系统中,应包括如下的文件:链接库设备文件系统应用程序系统初始化文件,使用BusyBox生成并移植pax270-s根文件系统,1 创建根文件系统基本目录,一般根文件系统包含/lib 、/etc、/dev、/mnt、/var目录。这些目录有些可以为空,有些需要往里

22、面添加其他文件和目录。首先我们先把目录都创建起来。然后再往其中目录添加必要的文件和目录。 rootlocalhost rootfs# mkdir lib etc dev mnt var proc rootlocalhost rootfs# ls dev etc lib mnt proc var,使用BusyBox生成并移植pax270-s根文件系统,2 安装glibc库,即构建根文件/lib目录。glibc库的来源可以是自己制作交叉编译工具链时生成的(位置在/home/gcc-3.4.6-glibc-2.3.2/arm-linux/lib),也可以从http:/ftp.gnu.org/gnu/

23、glibc/中下载所需的版本,然后在某个目录下编译安装它。,使用BusyBox生成并移植pax270-s根文件系统,2 安装glibc库,使用BusyBox生成并移植pax270-s根文件系统,3 使用BusyBox制作命令工具集,即构建根文件/bin、/sbin等目录。使用BusyBox软件,默认在_install目录下最终会生成如下四个文件、目录。 rootlocalhost _install# lsbin linuxrc sbin usr,使用BusyBox生成并移植pax270-s根文件系统,4 添加修改根文件系统配置文件,inittab/init/rcSfstabpasswd、sha

24、dow、group,使用BusyBox生成并移植pax270-s根文件系统,4 添加修改根文件系统配置文件:inittab,inittab文件的每一行的格式为: : 仿照BusyBox的example/inittab创建一个/etc/inittab文件,并且进行修改。该进程是init进程启动的第一个子进程,是一个脚本文件,可以在里面指定用户想执行的操作。 rootlocalhost etc# vi inittab :sysinit:/etc/init.d/rcS :respawn:-/bin/sh :restart:/sbin/init tty2:askfirst:-/bin/sh :ctrl

25、altdel:/bin/umount -a -r :shutdown:/bin/umount -a -r :shutdown:/sbin/swapoff a,使用BusyBox生成并移植pax270-s根文件系统,4 添加修改根文件系统配置文件:inittab,使用BusyBox生成并移植pax270-s根文件系统,4 添加修改根文件系统配置文件:创建/etc/init.d/rcS脚本文件,rootlocalhost etc# vi init.d/rcS #! /bin/sh echo “Processing etc/init.d/rc.S“ #hostname $HOSTNAME hostn

26、ame up-tech echo “ Mount all“ /bin/mount -a echo “ Start mdev“ /bin/echo /sbin/mdev proc/sys/kernel/hotplug mdev -s echo “*“ echo “ rootfs for pxa270 “ echo “ 2008.11.28 created “ echo “ Good Luck“ echo “ www.up-“ echo “*“ echo,使用BusyBox生成并移植pax270-s根文件系统,4 添加修改根文件系统配置文件:构建etc/fstab文件,每行包含着一个设备或分区的信

27、息。第一字段包含着设备名,第二字段是它的挂载点,第三字段是它的文件系统格式,第四字段是挂载参数,第五字段和第六字段是转储和文件系统检查选项。,使用BusyBox生成并移植pax270-s根文件系统,4 添加修改根文件系统配置文件:从本机拷贝passwd、shadow、group文件,rootlocalhost etc# cp /etc/passwd . rootlocalhost etc# cp /etc/shadow . rootlocalhost etc# cp /etc/group . 修改passwd文件,把第一行和最后一行的bash修改成ash。,使用BusyBox生成并移植pax2

28、70-s根文件系统,5 创建设备文件,即构建根文件/dev目录。该目录存放的是设备文件,其创建方法主要有3种:手动创建、使用devfs文件系统、使用udev。系统启动涉及到的设备有:/dev/mtdblock*(MTD块设备)、/dev/ttySAC*(串口设备)、dev/console、/dev/null,只要手动创建这些设备系统就能启动。其他设备可以在启动系统后,查看/proc/devices,然后一一创建对应的设备文件。rootlocalhost etc# mknod console c 5 1 rootlocalhost etc# mknod null c 1 3 rootlocalh

29、ost etc# mknod /ttySAC0 c 4 64 rootlocalhost etc# mknod mtdblock0 b 31 0 rootlocalhost etc# mknod mtdblock1 c 31 1 rootlocalhost etc# mknod mtdblock2 c 31 2,使用BusyBox生成并移植pax270-s根文件系统,6 使用格式工具制作根文件系统映像,要将根文件系统烧入开发板,还要把它制作成一个映像文件。这里使用mkfs.jffs2工具包来制作根文件映射文件rootfs.img。./mkfs.jffs2 -r rootfs -o rootfs.img -e 0x20000 -pad=0xd00000 -r: -root=DIR,由目录生成镜像文件-e:Flash 擦除扇区大小,默认为64KB,此处指定为128KB-pad:指定创建的根文件系统的大小,使用BusyBox生成并移植pax270-s根文件系统,7 烧写根文件系统到目标机,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报