啥是根文件系统
根文件系统一般叫做rootfs。根文件系统的这个“根”字就说明了这个文件系统的重要性,它是其他文件系统的根,没有这个“根”,其他的文件系统或者软件就别想工作。比如我们常用的 ls、mv、ifconfig 等命令其实就是一个个小软件,只是这些软件没有图形界面,而且需要输入命令来运行。这些小软件就保存在根文件系统中。
使用BusyBox构建根文件系统
BusyBox 是一个集成了大量的 Linux 命令和工具的软件,像 ls、mv、ifconfig 等命令 BusyBox 都会提供。BusyBox 就是一个大的工具箱,这个工具箱里面集成了 Linux 的许多工具和命令。一般下载 BusyBox 的源码,然后配置 BusyBox,选择自己想要的功能,最后编译即可。
- 下载源码并修改,官网地址是
https://busybox.net/
mkdir rootfs
tar -vxjf busybox-1.29.0.tar.bz2
1.修改Makefie
# 第164行改为如下内容
CROSS_COMPILE ?= /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
# bbox: we may have CONFIG_CROSS_COMPILER_PREFIX in .config,
# and it has not been included yet... thus using an awkward syntax.
ifeq ($(CROSS_COMPILE),)
CROSS_COMPILE := $(shell grep ^CONFIG_CROSS_COMPILER_PREFIX .config 2>/dev/null)
CROSS_COMPILE := $(subst CONFIG_CROSS_COMPILER_PREFIX=,,$(CROSS_COMPILE))
CROSS_COMPILE := $(subst ",,$(CROSS_COMPILE))
#")
endif
2.修改文件busybox1.29.0/libbb/printable_string.c
32/* 注释掉下面这个两行代码 */
33 /* if (c >= 0x7f)
34 break; */
47 /* 修改下面代码 */
48 /* if (c < ' ' || c >= 0x7f) */
49 if( c < ' ')
3.修改busybox-1.29.0/libbb/unicode.c
1022 /* 修改下面一行代码 */
1023 /* *d++ = (c >= ' ' && c < 0x7f) ? c : '?'; */
1024 *d++ = (c >= ' ') ? c : '?';
1032 /* 修改下面一行代码 */
1033 /* if (c < ' ' || c >= 0x7f) */
1034 if(c < ' ')
3.配置busybox
输入命令make menuconfig
打开图形化配置。
配置项如下:
1.Location:
-> Settings
-> Build static binary (no shared libs)
取消选中“Simplified modutils”
2.Location:
-> Settings
-> vi-style line editing commands
选择“vi-style line editing commands ”
3.Location:
-> Linux System Utilities
-> mdev (16 kb) //确保下面的全部选中,默认都是选中的
4.Location:
-> Settings
-> Support Unicode //选中
-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables //选中
4.编译busybox
make
# 指定编译结果的存放目录
make install CONFIG_PREFIX=/home/sml/linux/nfs/rootfs
如上流程,就可以构建一个初级rootfs,目前还不能使用,需要一些其他文件继续完善rootfs。