当前位置:首页 > 嵌入式 > 嵌入式分享
[导读]在SPI NOR Flash只有16MB、甚至8MB的嵌入式板上,每一次字节都很贵。Buildroot的优势在于:一条make menuconfig就能通过交叉编译生成工具链、根文件系统和内核镜像,帮开发者把"臃肿"挡在编译期。


在SPI NOR Flash只有16MB、甚至8MB的嵌入式板上,每一次字节都很贵。Buildroot的优势在于:一条make menuconfig就能通过交叉编译生成工具链、根文件系统和内核镜像,帮开发者把"臃肿"挡在编译期。

先选对C库:musl 替代 glibc

体积的第一道分水岭是C库。实测同样的最小配置下,glibc 根文件系统的体积远大于 musl ——musl 能让根文件系统大幅减小。在Buildroot中切换只需一行:

./utils/config --set-str BR2_TOOLCHAIN_BUILDROOT_LIBC "musl"

musl 牺牲了极少数 glibc 扩展,但换来了数 MB 的空间回收,对大多数嵌入式应用完全够用。

BusyBox:把上百个命令压进一个二进制

BusyBox 的精髓是"单体多入口"——所有命令都是指向同一个二进制的符号链接。通过深度裁剪,BusyBox 二进制可以控制在很小的大小内:

make busybox-menuconfig

# Networking Utilities → 去掉 ftp/telnet/inetd

# Editors → 去掉 vi(除非你需要)

# Shells → 保留 ash,去掉 bash 兼容层

# Linux System Utilities → 保留 mount/umconfig,去掉不常用的工具

保存后执行:

make busybox-update-defconfig

光这一步,往往就能砍掉大量不必要的功能。

Init 系统与启动脚本精简

坚持用 BusyBox init,别碰 systemd——后者会引入一堆依赖和守护进程,让体积失控。在 System configuration 里把 Init system 选为 BusyBox,/dev management 用动态 devtmpfs 即可。

/etc/inittab 也尽量瘦身,只起一个串口控制台:

::sysinit:/etc/init.d/rcS

::respawn:/sbin/getty -L ttyS0 115200 vt100

rcS 里只挂载 proc、sysfs,不启动任何多余服务。

编译期与 post-build 双重瘦身

Buildroot 的 Build options 中务必开启:

BR2_ENABLE_DEBUG=n          # 关闭调试符号

BR2_STRIP_strip=y           # strip 目标二进制

更狠的一招是 post-build 脚本,在打包前扫荡冗余文件:

#!/bin/sh

# board/<soc>/post-build.sh

rm -rf ${TARGET_DIR}/usr/share/locale/*

rm -rf ${TARGET_DIR}/usr/share/man/*

rm -rf ${TARGET_DIR}/usr/include/*

find ${TARGET_DIR} -name "*.a" -delete

arm-linux-gnueabihf-strip ${TARGET_DIR}/bin/* 2>/dev/null

文档、头文件、静态库、调试符号往往是"隐形大户",清掉它们不影响运行。

文件系统格式:SquashFS + 压缩

最后一步是在 Filesystem images 中选择 SquashFS,并启用压缩。SquashFS 是只读高度压缩文件系统,能显著减少从存储介质读取的数据量。配合前面各项优化,根文件系统实际占用的 Flash 空间可以压缩到非常小,为 16MB 的 SPI NOR 留出充裕的内核和设备树空间。

如果系统还需要写用户数据,把 /var、/tmp 挂成 tmpfs,或用 overlayfs 叠加一个可写分区,既保精简又保灵活。

经过以上六步——换 musl、瘦 BusyBox、用轻量 init、编译期 strip、post-build 清理、SquashFS 压缩——把根文件系统控制在 16MB 以内并非极限挑战,而是 Buildroot 的标准动作。剩下的,就是按你板子的外设需求微调 linux-menuconfig,把 USB、HDMI、Audio 这些用不上的驱动关掉,一个干净利落的嵌入式 Linux 便出炉了。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭