赞
踩
《【北京迅为】itop-3568 开发板文件系统构建手册v1.0.pdf》学习笔记
BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Linux 系统的自带的shell。
——百度百科
Busybox 的官网下载地址为:https://busybox.net/downloads/。该工具是一个开源程序,迅为教程中使用的版本是 busybox-1.33.1,所以我也选择下载这个版本。
较新版本的 busybox 在使用 ls 命令时无法显示中文,因为 busybox1.17.0 以后的版本对中文的支持做了限制,如果想让 busybox 支持中文,需要进行以下修改:
打开终端,进入 busybox 源码根目录,输入 make menuconfig
打开配置界面,开启下图两个配置项(Settings --> Library Tuning --> Support Unicode,在 Settings 的较后部分)
打开终端,进入 busybox 源码根目录,输入 make menuconfig
打开配置界面。首先设置交叉编译器(Settings–>Build Options–>Cross Compiler prefix):
交叉编译器名要根据自己开发环境来填写,下面是我的环境变量中的交叉编译器:
busybox 默认安装到 ./_install 目录,如果需要更改,可以修改配置菜单的 Setting–>Installation Options 下的相关选项:
配置完 busybox 后,在 busybox 根目录执行 make
和 make install
来编译和安装 busybox。
安装完成后,进入安装目录,可以看到四个目录(bin、linuxrc、sbin 和 usr)
添加一些必要的目录( dev、lib、mnt、lib、mnt、proc、sys、tmp、var、etc/init.d):
由于 busybox 编译时默认不使用静态库,且安装后的最小系统的 lib/ 目录为空,所以要想让 bin/ 和 sbin/ 内的二进制(命令)文件运行,必须拷贝交叉编译器的动态库文件到最小系统的 lib/ 目录内。
拷贝时需要保留库文件间的链接关系。
fstab 包含了存储设备及文件系统的信息,fstab 可以自动挂载各种文件系统的硬盘、分区和可移动设备等。
这里我直接将 Ubuntu 的 /etc/fstab 拷贝到最小系统中(然后手动修改):
设置权限(不知道是不是必须的步骤)
passwd 文件用来存放用户的信息。同样的,我把 Ubuntu 的 passwd 文件拷贝到最小根文件系统中(然后手动修改):
该文件每行的格式为:<name>:<password><uid>:<gid>:<comment>:<home>:<shell>
将 busybox 源码根目录下的 example 文件夹内的 inittab 文件拷贝到最小根文件系统中:
保留以下五行内容:
sysinit:为 init 提供初始化命令行的路径
askfirst:每当相应进程终止便会重新启动(它会让 init 在控制台提示用户按下 Enter 继续)
restart:init 重启时,执行相应相应进程(这里执行 init 本身)
shutdown:系统关机时,执行相应进程
上面的 inttable 文件里 ::sysinit:/etc/init.d/rcS
表明在系统启动时,会执行 /etc/init.d/rcS 脚本,在最小根文件系统的 etc/init.d 目录下创建 rcS 文件:
rcS 的内容如下:
profile 文件用来设置我们的环境变量,在最小根文件系统的 etc/ 目录下创建 profile 文件:
profile 文件内容如下:
通过上面的步骤,根文件系统制作完成,现在需要将根文件系统打包成镜像,烧录到开发板中。
创建一个空文件夹 rootfs
,使用 du 命令查看我的最小根文件系统大小(约 64M),然后用 dd 命令生成一个 80M 大小的 .ext4 文件(按理来说,70M 就够了,但我实测却报错了,所以直接取 80M),最后使用 mkfs.ext4 将 rootfs.ext4 格式化。(-L 参数后面跟着的是文件系统的标头名称):
将 rootfs.ext4 挂载到空目录 rootfs,然后将之前修改过的最小根文件系统的所有文件拷贝到 rootfs 里(注意保留文件间的链接关系)。
拷贝完成后,将 rootfs.ext4 取消挂载,并重命名为 rootfs.img,至此,根文件系统镜像制作完成。
最后,使用瑞芯微开发工具将 rootfs.img 文件拷贝到开发板。
下面是我制作的 busybox 根文件系统,可以看到,该文件系统既可以输入中文,也可以显示中文:
接下来测试一下库文件,下面是一个简单的 C 程序,现测试其能否运行我刚才制作的最小文件系统中。
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // argc:命令行中参数的个数 // argv:命令行的参数 int i = 0; printf("参数个数为 %d\n", argc); for(i = 0; i < argc; i++) { printf("第%d个参数为 %s.\n", i + 1, argv[i]); } return 0; }
运行结果如下,C 程序成功运行:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。