使用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加载~ 

 

posted @   王东力  阅读(1261)  评论(0)    收藏  举报
编辑推荐:
· 领域驱动设计实战:聚合根设计与领域模型实现
· 突破Excel百万数据导出瓶颈:全链路优化实战指南
· 如何把ASP.NET Core WebApi打造成Mcp Server
· Linux系列:如何用perf跟踪.NET程序的mmap泄露
· 日常问题排查-空闲一段时间再请求就超时
阅读排行:
· c# 批量注入示例代码
· 【Uber 面试真题】SQL :每个星期连续5星评价最多的司机
· .net core workflow流程定义
· .NET周刊【5月第1期 2025-05-04】
· 领域驱动设计实战:聚合根设计与领域模型实现
点击右上角即可分享
微信分享提示