实训项目四-嵌入四Linux系统根文件系统制作一. 项目实施目的了解 UP-CUP2440 型实验平台Linux 系统下根文件系统结构掌握根文件系统的搭建过程掌握busybox、mkcramfs等工具的使用方法二. 项目主要任务使用busybox生成文件系统中的命令部分,使用mkcramfs工具制作CRAMFS 格式的根文件系统。
分析根文件系统etc目录下重要配置文件的格式及语法,熟悉根文件系统的启动过程三. 基本概念1.文件系统基本概念Linux的一个最重要特点就是它支持许多不同的文件系统。
这使Linux非常灵活,能够与许多其他的操作系统共存。
Linux支持的常见的文件系统有:JFS、ReiserFS、ext、ext2、ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
随着时间的推移, Linux支持的文件系统数还会增加。
Linux是通过把系统支持的各种文件系统链接到一个单独的树形层次结构中,来实现对多文件系统的支持的。
该树形层次结构把文件系统表示成一个整个的独立实体。
无论什么类型的文件系统,都被装配到某个目录上,由被装配的文件系统的文件覆盖该目录原有的内容。
该个目录被称为装配目录或装配点。
在文件系统卸载时,装配目录中原有的文件才会显露出来。
在Linux 文件系统中,文件用i节点来表示、目录只是包含有一组目录条目列表的简单文件,而设备可以通过特殊文件上的I/O 请求被访问。
2.常见的嵌入式文件系统嵌入式Linux系统一般没有大容量的磁盘,多使用flash存储器,所以多采用基于Flash(NOR和NAND)的文件系统或者RAM内存的文件系统。
(1)Flash根据结构不同分为 NOR Flash和NAND Flash。
基于flash的文件系统主要有: jffs2:RedHat基于jffs开发的文件系统。
特点:可读写、支持数据压缩、支持哈希表的日志型文件系统,提供了崩溃/掉电安全保护,提供“写平衡”支持等。
缺点:不适合在体积和容量比较大的NAND Flash中使用,当文件系统已满或者快满时,因为垃圾收集的关系使它的运行速度大大放慢。
yaffs:专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。
特点:1.减少了一些jffs2的功能,但是速度更快,占用内存更少,能够实现错误检测和坏块处理,能够提高文件系统的加载速度。
采用多策略混合的垃圾回收算法。
2.跨平台文件系统,除了Linux还支持WinCE、pSOS、ThreadX。
3.自带NAND芯片驱动,并为嵌入式系统提供直接访问文件系统的API,用户可不使用Linux中的MTD与VFS,直接对文件系统操作。
也可与MTD驱动程序配合使用。
Cramfs:Linux开发的只读的压缩文件系统,基于MTD驱动程序。
特点:速度快,效率高,保护文件系统免受破坏,提高了可靠性。
缺点:内容无法扩充。
Romfs:简单的、紧凑的、只读的文件系统,不支持动态擦写保存,安顺序存放数据。
ucLinux通常采用本文件系统。
(2)基于RAM的文件系统Ramdisk:将一部分固定大小的内存当作分区来使用。
它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。
将一些经常被访问而又不会更改的文件通过Ramdisk放在内存中,可以明显的提高系统的性能。
在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。
ramfs/tmpfs:Ramfs是Linus Torvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。
(实际上VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。
);Rmfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度;amfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化;mpfs的一个缺点是当系统重新引导时会丢失所有数据。
网络文件系统NFS (Network File System)NFS:是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。
在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
3.嵌入式根文件系统根文件系统也是一种文件系统,简单来说,根文件系统就是一种目录结构,根文件系统与普通文件系统的区别在于根文件系统主要包括Linux操作系统启动所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序,比如bin目录下的可执行文件,任何包括操作系统启动所必须的文件的文件系统都可以做根文件系统。
Linux启动所必须的文件系统目录结构如下:对于用途单一的嵌入式系统,上边的一些用于多用户的目录可以省略,例如/home、/opt、/root 目录等。
而/bin、/dev、/etc、/lib、/proc、/sbin 和/usr 目录,是几乎每个系统必备的目录,也是不可或缺的目录。
生成这些目录和相关文件的方法主要有两种,可以通过手动建立相关目录和文件,也可以通过busybox工具来生成相关目录和文件。
Busybox是小型的嵌入式 Linux 系统制作 root 根文件系统时有一个常用的利器:BusyBox。
Busybox 是Debian GNU/Linux的大名鼎鼎的 Bruce Perens 首先开发,使用在 Debian 的安装程序中。
后来又有许多 Debian developers 贡献力量,这其中尤推busybox 目前的维护者 Erik Andersen,他患有癌症,可是却是一名优秀的自由软件开发者。
Busybox 编译出一个单个的独立执行程序,就叫做 busybox。
但是它可以方便的进行配置,执行 ash shell 的功能,以及几十个各种小应用程序的功能。
这其中包括有一个迷你的 vi 编辑器,以及其他诸如sed, ifconfig,mkdir, mount, ln, ls, echo, cat ... 等等这些都是一个正常的系统上必不可少的工具,但是如果我们把这些程序的原件拿过来的话,它们的体积加在一起,让人吃不消。
可是 busybox 有全部的这么多功能,大小也不过 100K 左右。
而且,用户还可以根据自己的需要,决定到底要在busybox 中编译进哪几个应用程序的功能。
本系统就是采用busybox来制作根文件系同的。
四 .根文件系统制作步骤1.重新编译配置内核,确保内核支持所选的根文件系统。
[root@localhost ~]# cd /UP-CUP2440/SRC/kernel/linux-2.6.24.4/2、运行 make menuconfig 命令配置内核文件系统相关支持添加对CRAMFS 根文件以及YAFFS2 文件系统系统支持进入File systems --->菜单进入Miscellaneous filesystems --->菜单选择<*> Compressed ROM file system support (cramfs)支持,如图:选择<*> YAFFS2 file system support 支持,配置如下图保存退出。
在前期Linux内核制作过程中,相关选项已经选择。
在实验室,不需要真的重新去编译内核,只是需要学生理解,所选的根文件系统,在前期的内核编译时一定要选中相关的配置选项。
3.查看已经制作好的文件系统(挂载up24402.iso)[root@localhost /]# cd /UP-CUP2440/SRC/rootfs/[root@localhostrootfs]# ls如下图所示,光盘文件里有已经制作好的根文件系统和制作根文件系统的busybox源代码。
[root@localhostrootfs]# tar–jxvf rootfs.tar.bz2[root@localhost /]#ls如上图所示,绿色的文件为制作根文件系统需要的工具,rootfs为根文件系统目录结构和相关内容。
[root@localhost /]#cd rootfs_src4.根文件系统制作方法(1)手动制作建立相关目录,准备相关文件和命令,相关文件可以参考redhat的内容修改制作,相关命令需要下载源码交叉编译,这个过程非常复杂,且容易出错。
常见的方式是采用busybox来制作。
(2)busybox制作根文件系统什么是Busybox?[root@localhost /]#make clean[root@localhost /]#ls如上图,此时并没有可执行的busybox程序。
[root@localhostrootfs]#viMakefile修改此目录的Makefile 文件,更改ARCH ?和CROSS_COMPILE ?=宏定义,如下:第164 行CROSS_COMPILE ?= arm-linux-第189 行ARCH ?= arm退出保存[root@localhost busybox-1.12.2]# makemenuconfig进入Busybox Settings --->选项进入Busybox Library Tuning ---> 选项选中[*] Fancy shell prompts 支持进入Miscellaneous Utilities --->选项(返回主菜单选项)去除[ ] inotifyd 选项。
退出保存设置编译 busybox[root@localhost busybox-1.12.2]# make如上图所示,交叉编译完成后,就生成了我们需要的busybox可执行程序。
这就是我们根文件系统需要的各种命令,后续通过安装命令建立命令连接。
[root@localhost busybox-1.12.2]# make install成功后会在当前目录下生成 _install 目录,编译的工具也都集成在该安装目录下。
[root@localhost busybox-1.12.2]# cd _install/[root@localhost _install]# ls可以看到_install 目录下生成了根文件系统常用的命令及工具,接下来的工作,用户可以根据需要将_install 目录下生成的命令拷贝到根文件系统相应目录下。