weiqi7777

跟文件系统与ramdisk

0
阅读(200) 评论(0)

一、文件系统

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

常见的一些文件系统:

  • 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开始支持,大小可变

ramdisk并非是一个实际的文件系统,而是一种将实际的文件系统转入内存的机制,因此可以作为跟文件系统。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 -i –F 命令,可以解压ramdisk文件。得到当初制作ramdisk的文件结构。

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

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