卢骏 · 2020年09月07日

根文件系统与ramdisk

一、文件系统

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

常见的一些文件系统:

◾FAT32

◾NTFS

◾EXT2

◾EXT3

二、扇区和簇

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

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

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

三、根文件系统

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

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

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

四、linux操作文件

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

五、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 属性。
4.png

八、linux和ramdisk

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

九、linux制作ramdisk

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

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

6.png

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

cpio -i –F
7.png

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

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

更多相关阅读

根文件系统 (一)根文件系统简介
linux module工具安装与使用
根文件系统(二)busybox构建根文件系统

原文首发于骏的世界博客
作者:卢骏
更多IC设计相关的文章请关注IC设计极术专栏,每日更新。

推荐阅读
关注数
20252
内容数
1308
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息