一、什么是rootfs
rootfs是Linux系统中的一个非常重要的概念,也是Linux嵌入式开发中的一个重要部分。rootfs是操作系统内核启动后挂载的根文件系统,也是用户空间基础的文件系统,提供了文件和目录的基本信息。在Linux系统启动后,内核实现了系统调用、进程管理、内存管理等基本功能,然后将根文件系统作为用户空间的基础,继续提供更高级别的服务。
rootfs在其他文件系统还没有初始化之前被挂载在根目录下,可以理解为“第一个文件系统”,它包括Linux操作系统所必需的所有组件和文件,例如:设备文件、命令、库文件、配置文件等等,同时也支持用户添加自定义的文件和目录。究其原理,Linux的系统启动流程包含了三段式启动过程,第一阶段是Bootloader、第二阶段是Kernel(内核)、第三阶段是用户空间或者说Root File System。
二、rootfs的挂载方式
在Linux系统中 mount 命令用于将文件系统挂载到指定路径。对 rootfs 挂载,可以在系统启动时通过Kconfig配置文件进行设定。Kconfig配置路径为“Kernel building -> Filesystem ->”下的“Initial RAM filesystem and RAM disk”。
1、Uses initramfs / rootfs (Initramfs source file(s))
在Type of root filesystem中选择initramfs,当系统启动时,先挂载initramfs,在initramfs中配置好rootfs中的初始设置和应用程序,并使用/bin/init代替/bin/sh以启动用户空间,之后进行rootfs挂载,最终完成系统启动。
2、Root filesystem (initramfs) contents
在rootfs配置菜单中,有一个选项允许我们指定rootfs挂载点。此过程通常涉及将根文件系统的映像文件复制到bootloader文件系统的RAM中,并在内核启动时从中提取该映像文件。此映像文件包含初始文件系统和应用程序。
以上两种挂载方式都是非常常见的,其中第二种方式常用于不支持initramfs的平台,但是相对于第一种方式,会增加额外的工作量。
三、rootfs的文件类型和作用
Linux中rootfs的文件类型可以分为以下几种:
1、普通文件
普通文件是用户在文件系统中创建的可读、可写的文件,像调试信息、配置文件等等,它们是Linux系统中最基本的文件类型,通常存在于系统中的各种用户应用程序中,如命令行工具。
2、块特殊文件
块特殊文件与普通文件最大的区别在于块特殊文件为非常重要的硬件设备提供支持。Linux系统中/dev目录下的块特殊文件通常与文件系统直接挂载的设备有关,例如:硬盘、U盘、SD卡等。
3、字符特殊文件
字符特殊文件也是用于实现硬件设备驱动的重要组成部分,通常包括为硬件设备提供支持的程序、驱动程序和插件。通过这些驱动程序,用户可以访问并控制各种硬件设备,如串口、USB设备等。
4、目录文件
目录文件用于组织其他文件和目录。目录文件下还可以包含具有特定关系的文件和目录,如 /etc/cron.daily 目录中的cron.daily文件。
除上述文件类型外,rootfs还提供了许多其他功能,如模块、配置文件、脚本、链接文件等。
四、rootfs的使用案例之BusyBox
BusyBox集成了Linux系统中的常见工具程序,如ls、cat、mount等,并可以将这些工具程序组合成一个可执行文件。因此,BusyBox也常用于解决嵌入式系统上的文件系统、磁盘、网络等常见问题。
在使用BusyBox时,首先需要将 BusyBox 作为静态库链接到嵌入式 Linux 系统中,并指定 init 程序作为 rootfs 中的第一个进程。这样就得到了一个非常简单的、启动嵌入式 Linux 系统的方法。
BusyBox的安装方法:
1.下载busybox源码包
2.解压后进入源码目录
3.使用make menuconfig进行配置
4.使用make进行编译
BusyBox的使用方法:
1.从busybox/targets目录下拷贝busybox二进制文件至tftp目录下。
2.修改u-boot配置文件,设置启动参数。
setenv bootargs "console=ttyAMA0,115200 root=/dev/nfs nfsroot=mynfs:/export/nfsroot2 ip=192.168.1.3:192.168.1.1:192.168.1.1:255.255.255.0::eth0:off"
tftp 0x2000000 busybox-1.18.5_nfs (把busybox下载到内存0x2000000
bootm (到0x2000000运行)
3.之后便可以通过nfs服务启动对应的嵌入式系统。
五、rootfs的优化策略
为了提高系统的效率和性能,开发者需要对 rootfs 进行一定的优化。
1、精简文件系统
在不影响系统正常运行的前提下,尽量精简文件系统,减少空间占用的大小和系统启动时间的长短。可以删除一些不必要的文件、目录包括一些无用的语言库等等。
2、读写效率优化
为了提高文件系统的读写效率,在编译随内核启动模块时,需要将一些经常读写的文件、目录组建进rootfs文件,从而改善iocps和应用读写文件的响应速度和效率。
3、文件压缩
文件压缩可以去除一些不必要的文件或者将文件的大小缩减,从而达到减小文件系统体积和加快启动速度的目的。通常的压缩方式包括zlib、gzip、lzma等等。
4、文件系统缓存
Linux内核中缓存机制是提高文件读写性能的一个重要方法。对于文件系统中的数据,内核会将其缓存到一段空间中,以便提高访问速度,加快文件的读写操作。
六、结语
rootfs是Linux系统的重要组成部分,为操作系统的文件系统和用户空间基础提供了支持,不同的rootfs挂载方式和文件类型也能够满足不同开发者的需求。同时,为了提高系统效率和性能,不断优化rootfs也是嵌入式Linux开发中的关键任务之一。