banner
NEWS LETTER

嵌入式 Linux 根文件系统:Buildroot 入门与 RootFS 构建

Scroll down

一、RootFS 是什么

RootFS 是根文件系统,是 Linux 用户态运行的基础。内核启动后,必须挂载 RootFS,然后启动第一个用户态进程。

RootFS 里通常包含:

  • Shell。
  • 基础命令。
  • 动态库。
  • 配置文件。
  • 设备节点。
  • 启动脚本。
  • 应用程序。

没有 RootFS,内核即使启动成功,也无法进入正常用户态。

二、为什么用 Buildroot

Buildroot 是一个用于生成嵌入式 Linux 系统的构建工具。

它可以生成:

  • 交叉编译工具链。
  • RootFS。
  • Linux Kernel。
  • U-Boot。
  • 第三方库。
  • 应用包。

适合:

  • 系统相对简单。
  • 希望快速生成可用 rootfs。
  • 不想一开始就学习复杂 Yocto。

三、Buildroot 基本流程

1
2
make menuconfig
make

输出通常在:

1
2
3
output/images/
output/target/
output/host/

说明:

  • output/images:最终镜像。
  • output/target:目标 rootfs 目录。
  • output/host:主机工具和交叉工具链。

四、配置目标架构

make menuconfig 中配置:

1
Target options

常见选项:

  • Target Architecture。
  • Target Architecture Variant。
  • Floating point strategy。
  • ABI。

这些必须和目标板 CPU 匹配,否则程序无法运行。

五、选择基础包

常用包:

  • BusyBox。
  • dropbear 或 openssh。
  • mtd-utils。
  • i2c-tools。
  • libgpiod。
  • sqlite。
  • curl。
  • openssl。

入门 rootfs 可以先启用:

1
2
3
4
BusyBox
dropbear
i2c-tools
libgpiod

这样系统起来后能登录、能调试 GPIO/I2C。

六、添加自己的应用

简单方式:使用 rootfs overlay。

目录:

1
2
3
4
5
6
7
board/my_board/rootfs_overlay/
├── etc/
│ └── init.d/
│ └── S99myapp
└── usr/
└── bin/
└── my_app

在 Buildroot 配置:

1
System configuration -> Root filesystem overlay directories

填入:

1
board/my_board/rootfs_overlay

生成 rootfs 时,overlay 内容会被复制进去。

七、启动脚本

BusyBox init 常用 /etc/init.d/Sxx 脚本。

S99myapp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh

case "$1" in
start)
echo "start my_app"
/usr/bin/my_app &
;;
stop)
killall my_app
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac

记得加执行权限:

1
chmod +x S99myapp

八、生成镜像

常见 rootfs 格式:

  • ext4。
  • squashfs。
  • cpio。
  • tar。
  • ubifs。

选择哪种格式取决于启动介质:

  • SD/eMMC:常用 ext4。
  • initramfs:常用 cpio。
  • NAND Flash:可能使用 ubifs。
  • 只读系统:可用 squashfs。

九、常见问题

9.1 rootfs 太大

处理:

  • 移除不必要包。
  • strip 二进制。
  • 使用 squashfs。
  • 关闭 debug 符号。

9.2 应用运行缺库

检查:

1
ldd /usr/bin/my_app

确保依赖库被打进 rootfs。

9.3 启动脚本不执行

检查:

  • 脚本是否在 /etc/init.d/
  • 文件名是否以 S 开头。
  • 是否有执行权限。
  • shebang 是否正确。

9.4 修改没生效

Buildroot 有缓存。可以针对包清理,也可以重新生成 rootfs。

开发阶段要清楚当前烧录的是哪个镜像,不要改了一个 rootfs,烧了另一个。

十、Buildroot 和 Yocto 怎么选

Buildroot:

  • 简单。
  • 上手快。
  • 适合中小系统。
  • 生成整体镜像,不强调包管理。

Yocto:

  • 强大。
  • 学习成本高。
  • 适合复杂产品线。
  • 更适合长期可维护发行版。

入门建议先 Buildroot,再根据项目复杂度学习 Yocto。

十一、总结

RootFS 是嵌入式 Linux 用户态的基础。Buildroot 的价值是把工具链、第三方库、系统命令和 rootfs 镜像构建流程统一起来。

先用 Buildroot 做出能启动、能登录、能运行自己应用的系统,再继续深入内核、驱动和 OTA。

其他文章
目录导航 置顶
  1. 1. 一、RootFS 是什么
  2. 2. 二、为什么用 Buildroot
  3. 3. 三、Buildroot 基本流程
  4. 4. 四、配置目标架构
  5. 5. 五、选择基础包
  6. 6. 六、添加自己的应用
  7. 7. 七、启动脚本
  8. 8. 八、生成镜像
  9. 9. 九、常见问题
    1. 9.1. 9.1 rootfs 太大
    2. 9.2. 9.2 应用运行缺库
    3. 9.3. 9.3 启动脚本不执行
    4. 9.4. 9.4 修改没生效
  10. 10. 十、Buildroot 和 Yocto 怎么选
  11. 11. 十一、总结
请输入关键词进行搜索