
修改顶层目录下的Makefile,设置编译器和架构相关的变量

busybox默认是不支持中文字符的,这样出现的问题就是中文文件的文件名会显示"???"这种
修改libbb/printable_string.c文件的FAST_FUNC printable_stringh函数
修改libbb/unicode.c文件中的unicode_conv_to_printable2函数

有三种配置方案:
我们选择默认配置即可

make menuconfig // 进入图形化配置界面

选择是否静态编译,静态编译的话就不需要库文件,但是编译出来的库会很大。我们不选择(因为采用静态编译的
话 DNS 会出问题!无法进行域名解析)
配置路径如下
Location:
-> Settings
->Build static binary(no shard libs)
继续配置如下:
Location:
->Settings
->vi-style line editing commands

继续配置:
Location:
-> Linux Module Utilities
-> Simplified modutils
默认会勾选,我们取消它

继续配置如下路径配置项:
Location:
-> Linux System Utilities
-> mdev (16kb) # 确保下面的全部选中

使能unicode编码和支持中文
Location:
-> Settings
-> Support Unicode # 选中
-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables # 选中

使用命令make编译busybox

使用如下命名将根文件系统安装到指定目录(需要先创建该目录)
make install CONFIG_PREFIX=~/rootfs


将交叉编译链里面的库拷贝到根文件系统下


后面的“-d”表示拷贝符号链接

拷贝的文件中有个比较特殊的库文件:ld-linux-armhf.so.3, 他是一个链接文件,但在根文件系统中不能作为符号链接,否则的话在根文件系统中执行程序无法执行,我们需要将它变为本尊
先删除rootfs/lib下的ld-linux-armhf.so.3,在重新将链接工具库/arm-linux-gnueabihf/libc/lib的ld-linux-armhf.so.3拷贝过来






并填入如下内容
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin/:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
给予权限
chmod 777 rcS
在 rootfs 中创建/etc/fstab 文件,fstab 在 Linux 开机以后自动配置哪些需要自动挂载的分区
填入如下内容
#<file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
/etc/inittab文件写的指令格式
<id>:<runlevels>:<action>:<process>
| 动作 | 描述 |
|---|---|
| sysinit | 在系统初始化的时候 process 才会执行一次。 |
| respawn | 当 process 终止以后马上启动一个新的。 |
| askfirst | 和 respawn 类似,在运行 process 之前在控制台上显示“Please press Enter to activate this console.”。只要用户按下“Enter”键以后才会执行 process。 |
| wait | 告诉 init,要等待相应的进程执行完以后才能继续执行。 |
| once | 仅执行一次,而且不会等待 process 执行完成。 |
| restart | 当 init 重启的时候才会执行 procee。 |
| ctrlaltdel | 当按下 ctrl+alt+del 组合键才会执行 process。 |
| shutdown | 关机的时候执行 process。 |
/etc/inittab填入如下内容
# :::
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctraltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
第 2 行,系统启动以后运行/etc/init.d/rcS 这个脚本文件。
第 3 行,将 console 作为控制台终端,也就是 ttymxc0。
第 4 行,重启的话运行/sbin/init。
第 5 行,按下 ctrl+alt+del 组合键的话就运行/sbin/reboot,看来 ctrl+alt+del 组合键用于重启系统。
第 6 行,关机的时候执行/bin/umount,也就是卸载各个文件系统。
第 7 行,关机的时候执行/sbin/swapoff,也就是关闭交换分区。
测试我是选择的网络挂载根文件系统来测试的。
首先需要安装nfs服务器,将路径配置为我们刚刚创建的rootfs
配置uboot里面的bootargs变量,指定其为网络NFS挂载文件系统,格式如下
root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>
按照实际情况,我的配置为:
root=/dev/nfs nfsroot=192.168.9.9:/home/hxd/rootfs,proto=tcp rw
ip=192.168.9.6:192.168.9.9:192.168.9.1:255.255.255.0::eth0:off
故设置bootargs的命令为:
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.9.9:/home/hxd/rootfs,proto=tcp rw
ip=192.168.9.6:192.168.9.9:192.168.9.1:255.255.255.0::eth0:off';saveenv
输入boot命令,成功!
