移植busybox生成最小的rootfs
一、下载
https://busybox.net/downloads/
我下载的版本为1.29.2。
二、配置
在busybox的根目录下修改Makefile文件,将ARCH修改为arm
,CROSS_COMPILE修改为/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
(对应我的交叉编译工具链所在位置)。
执行make menuconfig命令进行配置,1.29.2为目前最新版本,(NEW)代表默认值,并不需要再去更改;老版本busybox的参数需要自己更改。
Settings --->
[*] Build static binary (no shared libs)
[*] Command line editing
[*] vi-style line editing commands
Linux Module Utilities --->
[ ] Simplified modutils
[*]depmod (NEW)
[*]insmod (NEW)
[*]lsmod (NEW)
[*]modprobe (NEW)
[*]rmmod (NEW)
Linux System Utilities --->
[*] mdev (16 kb) (NEW)
[*] Support /etc/mdev.conf (NEW)
[*] Support subdirs/symlinks (NEW)
[*] Support regular expressions substitutions when renaming device (NEW)
[*] Support command execution at device addition/removal (NEW)
[*] Support loading of firmware (NEW)
三、编译安装
这时make进行编译链接,我这里提示了几个错误,主要信息是下图中圈起来的内容,提示没有定义’setns’和’syncfs’。解决办法有两个,一种是更换编译工具;另外一种是menuconfig屏蔽掉相关配置,不进行编译链接。
第二种方法相对简单一点,menuconfig中屏蔽相关配置的步骤是:
Coreutils --->
[ ] sync (769 bytes)
Linux System Utilities --->
[ ] nsenter (8.6 kb)
这样make后就不会报错了,接下来进行安装。make install这种方式是源码安装,需要指定安装路径,不指定的话会有一个默认路径,如果默认路径在ubuntu根目录下,这时候安装会把ubuntu的系统文件覆盖,那就完啦!不过默认路径并不在ubuntu根目录,查看并修改安装路径的的方法是进入menuconfig,找到Settings
—> (/root/rootfs_zht/rootfs) Destination path for 'make install'
,当前显示的路径为默认路径,修改为自己的就行了。
make install安装完成后即可看到指定目录下面生成了几个文件夹,即最小的根文件系统。
①linuxrc是一个可执行的应用程序。属于应用层,和内核源码没关系;在开发板内核系统下可执行;linuxrc只能静态编译,属于内核态过渡到用户态的第一个程序;②linuxrc负责执行时引出用户界面;③负责系统启动后的配置;④linuxrc在嵌入式系统中一般是busybox。
四、挂载运行
采用了nfs方式挂载rootfs,可以看到成功挂载并且成功运行。
参考资料: 朱老师嵌入式linux