一、编写目的
本文档用于记录使用Busybox构建arm linux最小根文件系统的过程,方便日后查阅、参考。
Busybox下载地址:http://busybox.net/downloads/busybox-1.22.1.tar.bz2
http://pan.baidu.com/s/1sjHdK2x
二、构建根文件系统
1. 编译busybox
a) 解压源码
# tar -xvf /media/sf_ShareDIR/source/busybox-1.22.1.tar.bz2 -C ./
b) 修改Makefile,设置CROSS_COMPILE和ARCH
# gedit Makefile
CROSS_COMPILE ?= arm-linux-
ARCH ?= arm
c) 配置Busybox
# make menuconfig
配置项目类型 | 说 明 |
Busybox Settings ---> General Configuration | 一些通用的设置,一般不需要理会 |
Busybox Settings ---> Build Options | 连接方式、编译选项 |
Busybox Settings ---> Debugging Options | 调试信息选项,一般不选 |
Busybox Settings ---> Installation Options | 安装路径,可以在命令行中指定 |
Busybox Settings ---> Busybox Library Tuning | Busybox性能微调,比如设置控制台输入字符限制等设置 |
Archival Utilities | 各种压缩、解压工具选择 |
Coreutils | 核心命令选择,如ls、cp等 |
Console Utilities | 控制台相关命令,如clear等 |
Debian Utilities | Debian Linux中的一些命令 |
Editors | 编辑命令,如vi等 |
Finding Utilities | 查找命令,一般不用 |
Init Utilities | Init程序的配置选项,比如是否读取inittab文件,使用默认即可 |
Login/Password Management Utilities | 登录、用户帐号/密码等方面命令 |
Linux Ext2 FS Progs | Ext2文件系统的一些工具 |
Linux Module Utilities | 加载/卸载模块的命令,一般选用 |
Linux System Utilities | 一些系统命令,比如dmesg、fdisk等 |
Miscellaneous Utilities | 一些不好分类的命令 |
Networking Utilities | 网络命令,如telnetd、ping、tftp等 |
Print Utilities | 文件打印命令,lpd、lpr等 |
Mail Utilities | 邮件工具 |
Process Utilities | 进程相关的命令,如ps、free、kill、top等 |
Runit Utilities | runit是一种类Unix操作系统的init方案,可在整个操作系统运行时初始化、监视及终止进程。runit可并行启动系统服务,这样可以加快操作系统的启动 |
Shells | 有多种shell,比如msh、ash,一般选用ash |
System Logging Utilities | 系统记录方面的命令 |
这里全部使用默认的配置即可。
d) 编译busybox
# make
e) 安装busybox至/opt/Build_MIniFS/fs_mini目录下
# make CONFIG_PREFIX=/opt/Build_MIniFS/fs_mini install
2. 移植glibc库
glibc库可直接从交叉编译工具arm-linux-的目录中获取,使用如下命令复制即可。
# cp /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/ /opt/Build_MIniFS/fs_mini/ -rf
后来发现应使用/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/中的库文件才对,否则会出现无法运行部分程序,如在micro2440中无法启动LINUX,或运行程序提示“Illegal instruction”。
3. 构建根文件系统目录
a) 构建etc目录
i. # mkdir ./etc ./etc/init.d
ii. # gedit ./etc/inittab
# /etc/inittab ::sysinit:/etc/init.d/rcS console::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r |
iii. # gedit ./etc/init.d/rcS
#!/bin/sh
mount -a
mkdir /dev/pts mount -t devpts devpts /dev/pts mdev -s |
# chmod +x ./etc/init.d/rcS
iv. # gedit ./etc/fstab
# device mount-point type options dump fsck order proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 tmpfs /dev tmpfs defaults 0 0 |
v. # gedit ./etc/profile
export PS1='Locker#' |
b) 构建dev目录
如果使用mdev创建设备文件时,只需要在此目录下创建console跟null设备文件即可。
i. # mkdir ./dev
ii. # mknod ./dev/console c 5 1
iii. # mknod ./dev/null c 1 3
c) 构建其它目录
其它目录可以是空目录,比如proc、mnt、tmp、sys、root等,如下创建:
# mkdir proc mnt tmp sys root
三、总结
至此,最小文件系统的所有目录已经创建完成,整个过程还是比较顺利和简单。最终生成的最小文件系统已经打包为201407090326_fs_mini.tar.bz2,可通过以下地址下载。
# tar -jcvf 201407090326_fs_mini.tar.bz2 ./fs_mini/
http://pan.baidu.com/s/1gdorX9h
将修复lib库文件后的文件系统保存为201407281804_fs_mini.tar.bz2,上传到网盘(http://pan.baidu.com/s/1qWqHQW0)。