制作根文件系统有专门的工具可以使用,叫做BusyBox,BusyBox是标准Linux工具的一个单个可执行实现。BusyBox包含了一些简单的工具,例如cat和echo,还包含了一些更大、更复杂的工具,例如grep、find、mount以及telnet。有些人将BusyBox称为Linux工具里的瑞士军刀.简单的说BusyBox就好像是个大工具箱,它集成压缩了Linux的许多工具和命令。在本节我们使用BusyBox来制作一个根文件系统。
1 获取BusyBox源码
BusyBox可以从官网下载,官网地址为:https://busybox.net/,如图 1.1所示:
在官网左侧的“Get BusyBox”栏有一行“Download Source”,点击“Download Source”即可打开BusyBox的下载页,如图 1.2所示:
从上图可以看出,目前最新的BusyBox 版本是 1.31.1。大家可以选择其中的一个版本下载使用。不过还是建议大家使用我们提供的1.29.0 版本的 BusyBox。目前测试还没有出现任何问题。BusyBox源码路径:i.MX6UL终结者光盘资料/06_Linux驱动例程/第三方库源码/busybox-1.29.0.tar.bz2。准备好源码之后就可以构建根文件系统了。
32.3.2 编译BusyBox构建根文件系统
将准备好的BusyBox源码上传到Ubuntu虚拟机下并解压。使用下列命令解压:
tar -xvf busybox-1.29.0.tar.bz2
解压完成后得到busybox-1.29.0目录,如图 2.1所示:
下面几个步骤开始配置busybox源码并编译。
1、指定平台和交叉编译工具
打开 busybox 的顶层 Makefile,修改CROSS_COMPILE(第164行)和ARCH(第190行)的值,如下所示:
164 CROSS_COMPILE ?= /usr/local/arm/gcc-linaro-4.9.4-2017.01-
x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
…
190 ARCH ?= arm
2、修改Busybox源码,支持中文
直接编译busybox源码,使用串口电脑终端时中文显示不正常。需要修改busybox源码,取消busybox 对中文显示的限制。
修改文件:busybox-1.29.0/libbb/printable_string.c,找到函数 printable_string,修改如下:
12 const char* FAST_FUNC printable_string(uni_stat_t *stats, const char *str)
13 {
14 char *dst;
15 const char *s;
16
17 s = str;
18 while (1) {
......
30 if (c < ' ')
31 break;
32 /* 注释掉下面这个两行代码 */
33 /* if (c >= 0x7f)
34 break; */
35 s++;
36 }
37