浅析根文件系统构建

文摘   2024-12-13 23:01   广东  


关注+星号公众号,不容错过精彩

    作者:HywelStar

 

在嵌入式系统中,根文件系统是系统启动后的基础环境,它包含了系统启动所需的所有文件和库。它不仅为用户提供操作系统环境,还承担着系统资源的管理任务。在嵌入式开发中,根文件系统的设计和构建至关重要,直接影响系统的启动速度、功能性和效率。

有原厂直接提供的支持,通常会采用原厂 SDK 中的工具或文件来制作根文件系统。本章节就简单总结看看根文件系统相关的知识。

1. 根文件系统的概念

根文件系统(Root File System,简称 RFS)是操作系统的核心文件系统。它通常挂载在启动过程中由内核加载,并包含所有必要的工具和库来启动和运行操作系统。

基本目录结构:

  • • /bin:包含基本的系统命令,如 lscpcat 等。
  • • /etc:系统配置文件,如 /etc/fstab/etc/network/interfaces 等。
  • • /lib:包含共享库和内核模块。
  • • /usr:包含应用程序和文件,是扩展的文件系统,通常包括安装的程序和库。
  • • /var:存储动态数据,如日志文件、邮件等。
  • • /dev: 外部设备。

2. 根文件系统构建方式

构建一个根文件系统的方式有很多种,这里就主要说说 BusyBoxBuildroot 和 Yocto,这 是最常用的三大工具,它们各自具有不同的优势和适用场景。

2.1 BusyBox 构建根文件系统

BusyBox 是一个轻量级的 Unix 工具集,它将常用的命令行工具(如 lscatcp 等)打包成一个单一的二进制文件,极大地减少了根文件系统的体积。对于嵌入式系统,尤其是资源受限的设备,BusyBox 是一个非常受欢迎的选择。

https://www.busybox.net/about.html

优点:

  • • 小巧紧凑:将多个常见工具合并为一个二进制文件,大大节省了存储空间。
  • • 高度可定制:用户可以根据项目需求选择需要的工具,去掉不必要的部分,进一步优化体积。
  • • 启动快速:因文件体积小,加载和启动速度快,适合嵌入式系统。

适合这种资源受限,构建一个极简的根文件系统,快速启动并运行基本的系统命令。

2.2 Buildroot 构建根文件系统

Buildroot 是一个自动化工具,旨在简化嵌入式 Linux 系统的构建过程。它提供了一个快速的方式来构建交叉编译工具链、内核镜像、根文件系统和用户空间应用。Buildroot 提供了广泛的预配置选项,能够帮助开发者根据目标平台快速构建系统。

https://buildroot.org/

优点:

  • • 自动化构建:只需要配置一个 .config 文件,Buildroot 会自动化处理所有的构建任务。
  • • 多平台支持:支持 ARM、MIPS、x86 等多种硬件架构,适合不同的嵌入式设备。
  • • 丰富的软件包支持:提供了大量预配置的软件包(如 busyboxopensshpython 等),可以根据需要选择并集成。

适用于这种需要定制化,通过自动化构建的开发者,很适合在不同硬件平台下生成不一样的镜像。

2.3 Yocto 构建根文件系统

Yocto 是一个功能强大的构建框架,旨在为嵌入式 Linux 提供一个灵活的、可定制的开发环境。它使用 BitBake 构建工具,能够管理复杂的依赖关系并为不同平台构建完整的系统。Yocto 项目不仅支持根文件系统的构建,还能生成交叉编译工具链、内核镜像、用户空间应用等。

https://www.yoctoproject.org/

优点:

  • • 高度可定制:Yocto 提供了完整的构建工具链,能够定制内核、库、驱动、应用等,非常适合复杂和大规模的嵌入式系统。
  • • 支持多种硬件平台:Yocto 提供了丰富的硬件平台支持包(BSP),能方便地为不同架构的设备构建系统。
  • • 强大的软件包管理:通过 Yocto 的层机制,可以轻松扩展和定制软件包,支持大规模应用和复杂的依赖管理。

适用于较为复杂的定制系统,对软件依赖,内核配置,硬件支持要求较高的系统,可以用于各种平台。目前 Yocto 已被广泛应用于复杂嵌入式系统的开发。

3. 根文件系统的挂载

在内核启动时,通过命令行参数(如 root=/dev/mmcblk0p1)指定根文件系统的位置。内核加载相应的设备驱动(如 SD 卡驱动和文件系统驱动),并尝试将根文件系统挂载到 / 目录。如果根文件系统已加密,则启动时 initramfs 需要完成解密后挂载根文件系统。挂载成功后,系统会根据 /etc/fstab 挂载其他文件系统,最终启动 init 进程进入用户空间。

4. 工作中根文件系统开发与调试

在工作中对于文件系统会遇到什么问题,需要考虑哪些?依据笔者来看,可能有以下可能出现:

1.系统启动失败制作后的文件系统打包到系统镜像后,出现无法启动或出现panic。对于这种原因可以考虑内核配置与文件系统是否匹配,启动脚本或者库文件缺失,还有可能文件系统镜像损坏或不完整。

2.文件或者库缺失出现这种情况,一般在应用程序中出现报错,找不到文件或者库缺失,很可能在构建系统中遗漏一些依赖文件或者工具。可以使用 ldd检查动态库的依赖关系,并在打包过程中尽量通过脚本自动化处理。

3.文件系统损坏设备运行一段时间发现数据丢失或者无法挂载,可能存在存储介质质量问题,选择不正确文件系统类型原因。

4.权限问题对于权限问题,可以影响到服务启动失败,只需要将对应文件进行修改权限即可。

对于开发调试,根文件系统制作完毕后,为了避免烧写麻烦,可以选择网络文件系统进行先验证,后续采用烧录方式节约时间加快开发进度。对于定制化系统尽量简单,减小系统镜像,这对于系统的性能都有一定的提升。

5. 总结

本章节主要简单对根文件系统制作的工具简单介绍,开发过程可能遇到的问题解读,但更多的是在实际开发过程中去接触,随着更加完善,buildroot , yocto 作为主流,busybox 更多是一些基础工具,都是需要开发者进行去了解。


往期推荐



认识嵌入式软件中几种滤波器

开源许可证(License)选择与使用指南

聊聊嵌入式BSP开发

一篇文章带你了解视频基础知识

认识 Linux Video 子系统

面试技巧 - 1. 学用STAR法则

嵌入式系统常用授时方案对比

Type-C 接口耳机分析

掌握性能分析工具Perf(二)

掌握性能分析工具Perf(一)

公众号目录指引【2】

            
“阅读原文”一起来充电吧!

码思途远
一位码农的日常分享,专注嵌入式领域相关知识。
 最新文章