rootfs根文件系统扫盲

rtos用的文件系统,根据设备介质,分为几种:
1. RAM上文件系统RAMFS, ROMFS
2. SPI FLASH/SD CARD上文件系统为fatfs,spiffs,Reliance Edge,FatSL, nuttx的smartfs,用来管理它的存储内容;可以利用FatFs对 SPI Flash 芯片以“文件”格式进行读写操作
3. NAND FLASH上使用uffs

1、根文件系统并不是Linux内核镜像的一部分,而独立于Linux内核镜像的镜像,在嵌入式系统中,根文件系统是文件系统,存放着除了Linux内核之外的所有设备厂家的程序、配置、数据,基本的linux命令、系统配置文件、启动脚本等跟系统相关的一些文件,是系统启动过程中必需的
2、根文件系统是内核mount的第一个文件系统;
3、arm_linux的根文件系统是一个文件,可用busybox制作rootfs;芯片上电,内核初始化过程中,用内存模拟一个磁盘分区,并将busybox展开到内存分区中。然后再挂在其它分区上的文件系统;
4、rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会挂载分区的文件系统到根目录对应目录下

5、mount命令:linix系统中可访问的所有文件都排列在一棵大树中,即文件层次结构,根在/。这些文件可以分布在多个设备上。mount用于将某些设备上的文件系统附加到大文件树,它可以将分区挂接到linux的一个文件夹下,从而将分区和该目录联系起来;

平时linux的shell和一些指令是放在根文件系统中的;
命令格式:mount [-t vfstype] [-o options] device dir

#mount -t ntfs /dev/sdc1 /mnt/usbhd1
#mount -t vfat /dev/sdc5 /mnt/usbhd2
-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备

Linux下,mount挂载的作用,就是将一个设备(通常是存储设备,亦即块设备)挂接到一个已存在的目录上。访问这个目录就是访问该存储设备(如/dev/sdb1不是一个目录,是一个类似指针的东西,指向这个分区的原始数据块;mount前, 系统并不知道这个数据块那部分数据代表文件,以及如何对它们进行操作)。

注:基于arm+linux的嵌入式设备的内核启动加载镜像有如下:bootcode(固化在芯片rom中,亦称bl1) + bl2(时钟/ddr初始化等,亦称xloader,部分设备还有bl3) + uboot(亦可能是uefi) + 内核 + rootfs根文件系统;除了bootcode, 其它镜像一般烧写在flash中,从bootcode开始依次加载进sram,ddr中运行;

6、根文件系统制作的过程:

  1. 使用busybox生成shell以及基本的cmd指令,生成bin、linuxrc、sbin、usr等必须的文件及文件;
  2. 制作一个根文件系统目录模板./root,然后再把 busybox 的编译产物、gcc 交叉编译环境下的 lib 拷贝过来,生成以下目录(可将用户应用 程序拷贝至对应的目录下):
    bin boot dev etc home lib linuxrc mnt proc root sbin sys tmp usr var
  3. ext4文件系统使用make_ext4fs命令将目录文件打包成文件系统镜像
    make_ext4fs -s -l 314572800 -a root -L linux ./rootfs_qt.img ./root
    执行之后即会将root文件打包成 rootfs_qt.img 文件系统镜像。

你可能感兴趣的:(文件系统fs,linux)