赞
踩
这个概念其实我也花了很久才明白,一开始一直分不清根文件系统与yaffs文件系统、ex2文件系统、jffs2文件系统的区别,下面就讲讲这个linux根文件系统到底是何方神圣。我们拿windows下的定义来类比吧,因为大部分人对windows操作系统还是比较熟悉的。
文件系统就是把闪存中地址与数据的关系按照一定的规则组织起来,对用户提供一个比较方便的操作接口。可以想想,如果没有文件系统,你想要在你的PC的D盘里找一个视频文件,那就需要你自己去对D盘进行寻址,再取出对应地址的数据,这样是不是很麻烦呢?而文件系统的出现就让用户对闪存的操作变得简单。PC上硬盘的文件系统一般是NTFS类型的。而对于linux系统,需要根据系统使用的闪存类型来决定使用什么类型的文件系统。常见的linux文件系统有:fat16、fat32、ntfs、ext2、ext3、jffs2、yaffs等。这个文件系统的区别是在存储文件时遵循的规则是不一样的。
那么既然linux文件系统的类型有很多,那根文件系统又是啥呢?首先可以确认的是根文件系统一定是有文件系统类型的,而且文件类型也就是fat16、fat32、ntfs、ext2、ext3、jffs2、yaffs这些。那根文件系统与普通的文件系统有什么区别呢?区别就在于
根文件系统是linux内核启动后第一个挂载的文件系统,是其他文件系统的根源。根文件系统主要包含内核启动后运行的第一个程序(init)、给用户提供操作界面的shell程序以及应用程序所依赖的库等内容。要想挂载其他文件系统,就必须得再根文件系统成功挂载后才可以。根文件系统核心就在一个“根”上面。
既然理解了什么是根文件系统,那就容易理解yaffs类型的根文件系统、jffs2型的文件系统,也就是把根文件系统的必需模块按照yaffs、jffs2类型来存储而已。
所谓制作根文件系统,就是创建各种目录,并在里面创建各种文件。比如在/bin、/sbin目录下存放可执行程序,在/etc中存放配置文件等。
现在构造根文件系统的方法比较多,有基于busybox的,有基于buildroot的。这里针对基于busybox来讲吧。busybox是一个遵循GPL V2协议的开源项目。busybox将许多UNIX命令集合进一个很小的可执行程序中。知道为什么你可以在linux的命令行中执行 ls 就可以显示文件吗?这个 ls命令就是由busybox实现的。所有有现成的工具一定要学会使用,不然你自己从头写一个 ls的程序,太浪费时间了。
busybox的下载地址为:https://busybox.net/
目前最新的busybox版本是busybox-1.32.1,后面的操作都是基于busybox-1.32.1来进行的。
解压busybox
tar xjvf busybox-1.32.1.tar.bz2
配置busybox
在busybox的文件夹中有个INSTALL文件,里面介绍了如何配置和编译busybox,建议可以去看看。
利用"make menuconfig"命令即可进入配置界面。对于没有特殊要求的根文件系统,一般只需要修改以下几个部分:
1)Cross compile prefix中指定交叉编译工具链
2) 编译选项中选择为静态编译,静态编译出来的文件系统会比动态编译出来的文件系统更大,这事因为静态编译直接将busybox需要的库文件直接编译进文件系统了,在拷贝根文件系统时就无需关心动态库了。而动态编译还需要将gloibc的库复制到根文件系统的/lib目录下。
直接执行“make”命令就可以编译busybox了,但这时编译会报错,报错内容是
- util-linux/lib.a(nsenter.o): In function `nsenter_main':
- nsenter.c:(.text.nsenter_main+0x184): undefined reference to `setns'
- coreutils/lib.a(sync.o): In function `sync_common':
- sync.c:(.text.sync_common+0x34): undefined reference to `syncfs'
这个问题目前只能通过在配置中将此文件忽略来避免,就是在“make menuconfig”时,将这两项取消掉。再进行make。
- Symbol: NSENTER [=y] │
- │ Prompt: nsenter (6.5 kb) │
- │ Defined at util-linux/Config.in:699 │
- │ Location: │
- │ -> Linux System Utilities │
- │ Selects: PLATFORM_LINUX
- Symbol: SYNC [=y] │
- │ Prompt: sync (3.8 kb) │
- │ Defined at coreutils/Config.in:652 │
- │ Location: │
- │ -> Coreutils
再执行“make install”命令来安装busybox。那么busybox会安装到哪里去呢?其实在“make menuconfig”中可以指定安装的路径,但如果没指定的话,就会安装到/_install目录下。
可以看到在_install目录下,已经有很多可执行文件了,剩下的就需要我们在这个目录下再创建一些目录和文件了。
1)创建etc/inittab文件
仿照busybox的exampiles/inittab文件,在/_install文件夹中创建inittab文件,内容如下:
- #this is run first except when booting in single-user mode.
- ::sysinit:/etc/init.d/rcS
- # /bin/sh invocations on selected ttys
- # start an "askfirst" shell on the console (whatever that may be)
- ::askfirst:-/bin/sh
- # stuff to do when restarting the init process
- ::restart:/sbin/init
- # stuff to do before rebooting
- ::ctrlaltdel:/sbin/reboot
2)创建etc/init.d/rcS文件
- #!/bin/sh
-
- echo "Starting rcS..."
-
- echo "++ Mounting filesystem"
- mount -t proc none /proc
- mount -t sysfs none /sys
- mount -t tmpfs none /tmp
-
- echo "++ Setting up mdev"
-
- echo /sbin/mdev > /proc/sys/kernel/hotplug
- mdev -s
-
- mkdir -p /dev/pts
- mkdir -p /dev/i2c
- mount -t devpts devpts /dev/pts
-
- echo "rcS Complete"
最后要改变它的属性:chmod +x etc/init.d/rcS。
3) 创建etc/fstab文件
- LABEL=/ / tmpfs defaults 0 0
- none /dev/pts devpts gid=5,mode=620 0 0
- none /proc proc defaults 0 0
- none /sys sysfs defaults 0 0
- none /tmp tmpfs defaults 0 0
4)创建一些空目录,比如proc、mnt、tmp等等。到此其根文件系统的必需文件就弄完了,接下来就需要将和_install目录中的内容格式化某种文件类型,就可以了。
所谓制作文件系统映像文件,就是将一个目录下的所有内容按照一定的格式存放到一个文件中,这文件可以直接烧写到存储设备上去,当系统启动后挂载这个设备,就可以看到与原来目录一样的内容。
制作不同类型的文件系统映像文件需要使不同的工具。
ramdisk文件系统就是ext2格式的文件系统,制作ramdisk文件系统就是将根文件按照ext2规则来存储。
- $ dd if=/dev/zero of=ramdisk.image bs=1024 count=16384
- $ mke2fs -F ramdisk.image -L "ramdisk" -b 1024 -m 0
- $ tune2fs ramdisk.image -i 0
- $ chmod 777 ramdisk.image
新建一个rootfs目录, 并将ramdisk.image挂载到rootfs目录:
- $ mkdir rootfs
- $ chmod u+rwx ramdisk.image
- $ sudo mount -o loop ramdisk.image rootfs
将制作好的根文件系统全部拷贝到rootfs目录下:
$ cp -af root/* rootfs/*
卸载rootfs, 并打包ramdisk.image:
- $ sudo umount rootfs
- $ gzip ramdisk.image
- $ mkimage -A arm -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz
将生成的uramdisk.image.gz下载到嵌入式设备上,启动后就可以看到根文件系统了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。