Busybox构建根文件系统和制作Ramdisk
定制根文件系统的方法很多,最常用的是使用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文件系统。