定制根文件系統的方法很多,最常用的是使用BusyBox來構建定制根文件系統。它集成壓縮了Linux的許多工具和命令,可以使用戶迅速方便地建立一套相對完整、功能豐富的文件系統,其中包括大量常用的應用程序。下面詳細介紹有關Busybox定制根文件系統。
一、系統環境:
1、操作系統:Ubuntu140.4
2、交叉編譯工具:gcc version 6.1.1 20160711 (Linaro GCC 6.1-2016.08)
3、busybox源碼包:busybox-1.26.2
二、構建rootfs
1、建立rootfs目錄
在/home/xxx/xxx目錄下建立rootfs目錄,
$ mkdir rootfs
$ cd rootfs
$ mkdir root bin sbin etc dev usr lib tmp mnt sys proc var //建立常用目錄
$ mkdir usr/lib usr/bin usr/sbin
2、解壓源碼包:
$ tar -jxvf busybox-1.26.2.tar.bz2
3、配置BusyBox
$ make distclean
$ make defconfig
$ make menuconfig ARCH=arm
3.1選擇Busybox Settings --->
Installation Options --->
BusyBox installation prefix(在里面輸入BusyBox的安裝目錄,我是保存在/home/xxx/xxx/rootfs下)
3.2選擇Busybox Settings --->
選中[*] Don't use /usr
3.3 Busybox Settings---->
Build Options---->
選中 [*]Build BusyBox as a static binary(靜態鏈接)
Cross Compiler prefix配置為arm-linux-gnueabi-(指定交叉編譯器)
配置好后,保存相關配置信息。
4、編譯安裝Busybox
$ make
$ make install
5、添加/home/xxx/xxx/rootfs/dev目錄下的設備文件。
dev目錄下必須有console和null這兩個設備文件,使用mknod來創建這兩個設備文件。
$ cd dev/
$ sudo mknod -m 666 console c 5 1
$ sudo mknod -m 666 null c 1 3
6、把busybox源碼目錄下的examples/bootfloppy/etc的內容拷貝到rootfs目錄下的etc下
$ cd /home/xxx/xxx/rootfs/etc
$ cp /home/ xxx/xxx/Downloads/busybox-1.26.2/examples/bootfloppy/etc/* ./ -raf
8、修改配置文件
8.1、修改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 var /dev tmpfs defaults 0 0 ramfs /dev ramfs defaults 0 0 |
8.2修改profile文件為:
| # /etc/profile: system-wide .profile file for the Bourne shells
USER="root" LOGNAME=$USER export HOSTNAME=`/bin/hostname` export USER=root 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 |
8.3修改inittab文件為:
| # /etc/inittab ::sysinit:/etc/init.d/rcS ::askfirst:-/bin/sh ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r ::restart:/sbin/init |
8.4 配置系統的hostname。在etc目錄下執行如下命令:
$ mkdir sysconfig
$ cd sysconfig
$ touch HOSTNAME
$ echo tiny4412 > HOSTNAME
8.5 配置init.d/rcS文件為:
| #!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel
mount -a mkdir -p /dev/pts mount -t devpts devpts /dev/pts #mount -n -t usbfs none /proc/bus/usb echo /sbin/mdev > /proc/sys/kernel/hotplug mdev -s mkdir -p /var/lock
ifconfig lo 127.0.0.1
/bin/hostname -F /etc/sysconfig/HOSTNAME |
修改init.d/rcS文件權限為:
$ chmod 777 init.d/rcS
三、制作Ramdisk文件系統
制作Ramdisk的腳本mk_Ramdisk.sh如下:
| #!/bin/bash
rm -rf ramdisk*
sudo dd if=/dev/zero of=ramdisk bs=1k count=8192
sudo mkfs.ext4 -F ramdisk
sudo mkdir -p ./initrd sudo mount -t ext4 ramdisk ./initrd
sudo cp rootfs/* ./initrd -raf
sudo mknod initrd/dev/console c 5 1 sudo mknod initrd/dev/null c 1 3
sudo umount ./initrd
sudo gzip --best -c ramdisk > ramdisk.gz
sudo mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img rm ramdisk ramdisk.gz initrd -rf |
把該腳本拷貝到rootfs同一目錄下,執行該腳本制作Ramdisk文件系統。生成的ramdisk.img就是我們需要的Ramdisk文件系統。




