ARM技术论坛
直播中

马祥

7年用户 774经验值
私信 关注
[经验]

浅析Ramdisk制作供linux挂载的根文件系统过程

一、文件系统

文件系统,是管理文件数据的一堆程序。操作系统,可以通过这些程序,从块设备中,读取或者写入文件。

常见的一些文件系统:

◾FAT32

◾NTFS

◾EXT2

◾EXT3

二、扇区和簇

扇区,是块设备(硬盘,nandflash,SD卡)读取和写入的最小单位。一般是512字节。

簇是文件系统,管理的最小单位,一般是扇区的整数倍。如4k,16k,32k。

在文件系统中,一个文件占用的大小是簇的整数倍,如下图,一个簇的大小是4K,因此即使一个只有313字节的文件,也会占用4K的空间。

三、根文件系统

根文件系统是一种特殊的文件系统,特殊就在于它必须有特定的目录结构以及特定的文件。如下图所示,就是一个跟文件系统目录以及文件。

linux启动时,第一个必须挂载的是跟文件系统。

目前制作跟文件系统,使用 busybox 工具。

四、linux操作文件

linux用户,通过open函数,打开文件。linux会切换到内核层,调用VFS,而VFS会根据文件所处的文件系统,调用文件系统的驱动函数。而文件系统的驱动函数,会调用块设备的驱动程序,从外部块设备读取数据。

五、linux的initrd(虚拟文件系统)

linux从2.6内核开始支持2种格式的initrd(虚拟文件系统),一种是传统格式的文件系统系统image-initrd, 其核心文件是 /linuxrc。

另外一种格式的initrd是cpio格式,使用cpio工具生成,核心文件,变为 /init。我们一般使用这种格式的initrd,作为ramdisk。

六、什么是ramdisk

内存盘。从系统内存中,划出一部分当作硬盘使用。可以将应用程序,安装到ramdisk中,然后去执行。

在linux中,ramdisk有2种:

◾initrd:linux内核2.0开始支持,大小固定

◾initramfs: linux内核2.4开始支持,大小可变

amdisk并非是一个实际的文件系统,而是一种将实际的文件系统转入内存的机制,因此可以作为跟文件系统。linux可以根据该机制,读取文件。

实际上,ramdisk,使用的文件系统是ext2。

七、linux挂载initrd

设备树的chosen节点,增加

linux,initrd-start 和 linux,initrd-end 属性。

八、linux和ramdisk

linux在启动的时候,会去挂载根文件系统,载入驱动或者应用程序执行。ramdisk可以制作成根文件系统,供linux挂载。

九、linux制作ramdisk

使用file命令,查看ramdisk,可以确认ramdisk文件,是一个经gzip压缩的文件。

将ramdisk文件,增加.gz后缀,使用gunzip解压。再用file命令查看,可以确认ramdisk其实是经cpio压缩的文件。

使用cpio命令,可以解压ramdisk文件。得到当初制作ramdisk的文件结构。

cpio -i –F

可以对文件结构,反向打包,得到ramdisk。

find . | cpio –o –H newc | gzip > ../ramdisk.img

原作者:卢骏

更多回帖

发帖
×
20
完善资料,
赚取积分