使用busybox制作完成的最小rootfs
我使用的busybox是1.33.1版本的,下载地址:https://busybox.net/downloads/
起因:我发现我的tiny4412开发板在更换了kernel之后无法启动(已解决),考虑到之前用的rootfs并非我自己编译所得,所以决定自己编译一个。
进入busybox-1.33.1目录以后,需要修改Makefile来指定编译工具链和开发板架构,在164行和190行附近有如下两行代码
1 CROSS_COMPILE ?= /home/moxa/linux/toolchain/gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabi/bin/arm-linux-gnueabi- 2 ARCH ?= arm
将CROSS_COMPILE指定为自己的编译工具链(这里最好使用与编译linux kernel一样的工具链,以免造成未知麻烦),将ARCH指定为 arm(根据开发版)
然后再busybox-1.33.1目录下执行make defconfig生成默认配置,再执行make menuconfig
Settings --->
--- Build Options
[*] Build static binary (no shared libs)
build static binary需要选中,这样才能把BusyBox编译成静态链接的可执行文件,后续就不再需要将其他动态库加入到rootfs,达到rootfs体积最小的目的
然后保存退出,执行make 后再执行make install
busybox-1.33.1目录下就会生成_install文件夹,即为rootfs。可以看到_install文件夹一共1.6M
1 moxa@moxa-ThinkPad-X240:~/linux/github/busybox-1.33.1$ du -h _install/ 2 1.5M _install/bin 3 4.0K _install/usr/bin 4 4.0K _install/usr/sbin 5 12K _install/usr 6 4.0K _install/sbin 7 1.6M _install/
接下来继续制作完成rootfs,进入到_install文件夹
执行如下命令,创建必要的文件和文件夹
mkdir dev etc home lib mnt proc root sys tmp var -p
创建文件 vim etc/inittab,内容如下
1 ::sysinit:/etc/init.d/rcS 2 ::respawn:-/bin/sh 3 ::askfirst:-/bin/sh 4 ::restart:/sbin/init 5 ::ctrlaltdel:/sbin/reboot 6 ::shutdown:/sbin/swapoff -a
创建文件夹 mkdir etc/init.d/ -p
创建文件vim etc/init.d/rcS 内容如下
1 #!/bin/sh 2 #This is the first script called by init process 3 /bin/mount -a 4 echo /sbin/mdev>/proc/sys/kernel/hotplug 5 mdev -s
创建文件vim etc/fstab内容如下:
1 #device mount-point type options dump fsck order 2 proc /proc proc defaults 0 0 3 tmpfs /tmp tmpfs defaults 0 0 4 sysfs /sys sysfs defaults 0 0 5 tmpfs /dev tmpfs defaults 0 0
创建文件vim etc/profile 内容如下
1 #!/bin/sh 2 export HOSTNAME=root 3 export USER=root 4 export HOME=root 5 export PS1="[$USER@$HOSTNAME \W]\# " 6 PATH=/bin:/sbin:/usr/bin:/usr/sbin 7 LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH 8 export PATH LD_LIBRARY_PATH
至此,我们最小的rootfs就完成了,_install即为完成的最小rootfs
后续会出将rootfs制作成ramdisk供linux kernel加载~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 领域驱动设计实战:聚合根设计与领域模型实现
· 突破Excel百万数据导出瓶颈:全链路优化实战指南
· 如何把ASP.NET Core WebApi打造成Mcp Server
· Linux系列:如何用perf跟踪.NET程序的mmap泄露
· 日常问题排查-空闲一段时间再请求就超时
· c# 批量注入示例代码
· 【Uber 面试真题】SQL :每个星期连续5星评价最多的司机
· .net core workflow流程定义
· .NET周刊【5月第1期 2025-05-04】
· 领域驱动设计实战:聚合根设计与领域模型实现