busybox版本:1.17.3
官網下載路徑:https://busybox.net/downloads/
網盤下載路徑:https://pan.baidu.com/s/1nvrEa73 密碼:7y4r
交叉編譯工具:arm-2009q3.tar.bz2
網盤下載路徑:http://pan.baidu.com/s/1dE7P9rb 密碼:300i
1、創建根文件系統目錄
xxx@ubuntu:~$ mkdir myrootfs
xxx@ubuntu:~$ cd myrootfs/
xxx@ubuntu:~/myrootfs$ mkdir rootfs
xxx@ubuntu:~/myrootfs$ cd rootfs/
xxx@ubuntu:~/myrootfs/rootfs$ mkdir bin sbin lib etc sys dev proc root home usr mnt tmp opt var
xxx@ubuntu:~/myrootfs/rootfs$ ls
bin dev etc home lib mnt opt proc root sbin sys tmp usr var
2、拷貝busybox到myrootfs中並解壓
xxx@ubuntu:~/myrootfs$ ls
busybox-1.17.3.tar.bz2 rootfs
xxx@ubuntu:~/myrootfs$ tar -xvf busybox-1.17.3.tar.bz2
3、配置交叉工具鏈
xxx@ubuntu:~/myrootfs$ cd busybox-1.17.3/
xxx@ubuntu:~/myrootfs/busybox-1.17.3$ vim Makefile
修改以下,保存退出:
CROSS_COMPILE ?= arm-none-linux-gnueabi-
ARCH ?= arm
4、配置menuconfig並保存
xxx@ubuntu:~/myrootfs/busybox-1.17.3$ make menuconfig
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
Installation Options --->
[*] Don't use /usr
5、 編譯並安裝
xxx@ubuntu:~/myrootfs/busybox-1.17.3$ make
xxx@ubuntu:~/myrootfs/busybox-1.17.3$ make install
6、將拷貝到制作的文件系統目錄中
xxx@ubuntu:~/myrootfs/busybox-1.17.3$ cd _install/
xxx@ubuntu:~/myrootfs/busybox-1.17.3/_install$ ls
bin linuxrc sbin
xxx@ubuntu:~/myrootfs/busybox-1.17.3/_install$ cp -raf * ../../rootfs/
7、拷貝交叉編譯工具鏈中的庫,交叉工具鏈的位置與自己安裝路徑有關,詳見:Linux 安裝交叉編譯工具鏈
xxx@ubuntu:~/myrootfs/busybox-1.17.3/_install$ cd ../../rootfs/
xxx@ubuntu:~/myrootfs/rootfs$ cp -raf /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* lib/
xxx@ubuntu:~/myrootfs/rootfs$ du -h lib/
3.8M lib/
8、為交叉編譯工具鏈瘦身
xxx@ubuntu:~/myrootfs/rootfs$ chmod a+w lib/*
xxx@ubuntu:~/myrootfs/rootfs$ arm-none-linux-gnueabi-strip lib/*
xxx@ubuntu:~/myrootfs/rootfs$ du -h lib/
3.0M lib/
9、參照 busybox 源碼中的 busybox-1.17.3/examples/inittab 例子編寫 inittab
xxx@ubuntu:~/myrootfs/rootfs$ cd etc/
xxx@ubuntu:~/myrootfs/rootfs/etc$ touch inittab
xxx@ubuntu:~/myrootfs/rootfs/etc$ vim inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
格式說明:
<id>:<runlevels>:<action>:<process> : 在什么時間啟動什么進程
id: 進程所使用的終端名
runlevels:不用填寫
<action>: Valid actions include: sysinit, respawn, askfirst, wait, once, restart, ctrlaltdel, and shutdown.\
sysinit: 系統初始化的時候,放在最前面
respawn,askfirst是一樣的,如果process意外終止啦,系統會講其重啟
askfirst 會有提示Please press Enter to activate this console
wait: 該進程一定要執行完,才能執行下一個
once, 進程如果意外終止,那么不會重啟
restart:每次重啟時都要執行
ctrlaltdel:按組合鍵時執行
shutdown:關機時執行
10、創建 init.d/rcS 腳本,並添加可執行權限
xxx@ubuntu:~/myrootfs/rootfs/etc$ mkdir init.d
xxx@ubuntu:~/myrootfs/rootfs/etc$ cd init.d/
xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ touch rcS
xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ chmod a+x rcS
xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ vim rcS
#! /bin/sh
echo "-----myrootfs start-----"
# 掛載 etc/fstab 中指定的所有文件系統
/bin/mount -a
# insmod 加載驅動是,會在 /dev 下創建設備節點
/sbin/mdev -s
echo "-----myrootfs end -----"
11、創建 etc/fatab 文件
xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ cd ..
xxx@ubuntu:~/myrootfs/rootfs/etc$ touch fstab
xxx@ubuntu:~/myrootfs/rootfs/etc$ vim fstab
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
dev /dev tmpfs defaults 0 0
sys /sys sysfs defaults 0 0
tmp /tmp tmpfs defaults 0 0
12、創建 /etc/profile 文件,命令提示符前會添加用戶名和主機
xxx@ubuntu:~/myrootfs/rootfs/etc$ touch profile
xxx@ubuntu:~/myrootfs/rootfs/etc$ vim profile
#!/bin/sh
export HOSTNAME=ubuntu
export USER=xxx
export HOME=root
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH