一、文件系统
文件系统,是管理文件数据的一堆程序。操作系统,可以通过这些程序,从块设备中,读取或者写入文件。
常见的一些文件系统:
◾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
原作者:卢骏