busybox源码下载
https://busybox.net/downloads/
修改Makefile
修改顶层Makefile
vi Makefile
CROSS_COMPILE ?= /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
ARCH ?= arm
配置busybox
make defconfig
make menuconfig
Settings --->
[*] vi-style line editing commands
[*] Support Unicode
[*] Check $LC_ALL, $LC_CTYPE and $LANG environment variables
Linux Module Utilities --->
[ ] Simplified modutils
编译 busybox
make install CONFIG_PREFIX=/rootfs/
# CONFIG_PREFIX 指定编译结果存放的目录
向根文件系统添加 lib 库
向 rootfs 的“/lib”目录添加库文件
mkdir /rootfs/lib
# 拷贝交叉编译器的动态库到/roofs/lib/
cp /xxx/arm-linux-gnueabihf/libc/lib *so* *.a /rootfs/lib/ -d
rm /xxx/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3
cp /xxx/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3 /rootfs/lib/
向 rootfs 的“usr/lib”目录添加库文件
mkdir /rootfs/usr/lib
cp /xxx/arm-linux-gnueabihf/libc/usr/lib/*so* *.a /rootfs/usr/lib/ -d
创建其他文件夹
cd /rootfs/
mkdir etc dev proc mnt sys tmp root
向rootfs中添加etc/fstab文件
fstab 在 Linux 开机以后自动配置哪些需要自动挂载的分区
vi etc/fstab
#<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
格式:<file system> <mount point> <type> <options> <dump> <pass>
<file system>: 要挂载的特殊的设备,也可以是块设备,比如/dev/sda 等等。
<mount point>: 挂载点。
<type>: 文件系统类型,比如 ext2、ext3、proc、romfs、tmpfs 等等。
<options>: 挂载选项,在 Ubuntu 中输入“man mount”命令可以查看具体的选项。一般使用 defaults,
也就是默认选项,defaults 包含了 rw、suid、 dev、 exec、 auto、 nouser 和 async。
<dump>: 为 1 的话表示允许备份,为 0 不备份,一般不备份,因此设置为 0。
<pass>: 磁盘检查设置,为 0 表示不检查。根目录‘/’设置为 1,其他的都不能设置为 1,
其他的分区从 2 开始。一般不在 fstab 中挂载根目录,因此这里一般设置为 0。
向rootfs中添加etc/inittab文件
#etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r 7 ::shutdown:/sbin/swapoff -a
动作 描述
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。
创建启动文件rcS
cd /rootfs
mkdir /etc/init.d -p && vi rcS
#!/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 8 mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
chmod 777 rcS