debian9安裝busybox,並製作根檔案系統(2)
3,製作根檔案系統
在上文debian9安裝busybox,並製作根檔案系統(1)中輸入make install命令進行安裝,busybox會自動將rootfs根檔案系統安裝到之前設定的目錄下,之前我設定的是/home/guoyanzhang/rootfs,進入之後,
##ls -l drwxr-xr-x 2 guoyanzhang guoyanzhang 4096 11月 6 12:36 bin drwxr-xr-x 2 guoyanzhang guoyanzhang 4096 11月 6 09:28 dev drwxr-xr-x 2 guoyanzhang guoyanzhang 4096 11月 6 09:28 etc drwxr-xr-x 2 guoyanzhang guoyanzhang 4096 11月 6 09:28 home drwxr-xr-x 2 guoyanzhang guoyanzhang 4096 11月 6 09:28 lib lrwxrwxrwx 1 guoyanzhang guoyanzhang 11 11月 6 12:36 linuxrc -> bin/busybox drwxr-xr-x 2 guoyanzhang guoyanzhang 4096 11月 6 09:28 mnt drwxr-xr-x 2 guoyanzhang guoyanzhang 4096 11月 6 09:28 proc drwxr-xr-x 2 guoyanzhang guoyanzhang 4096 11月 6 09:28 root drwxr-xr-x 2 guoyanzhang guoyanzhang 4096 11月 6 12:36 sbin drwxr-xr-x 2 guoyanzhang guoyanzhang 4096 11月 6 09:28 sys drwxr-xr-x 2 guoyanzhang guoyanzhang 4096 11月 6 09:28 tmp drwxr-xr-x 4 guoyanzhang guoyanzhang 4096 11月 6 09:28 usr
上述的make install命令完成後,在rootfs目錄下僅僅是建立一個根檔案系統的框架,上面的資料夾,只有bin和sbin下面有東西,還有一個linuxrc,其他都是空的,很多系統執行所必須的檔案尚未建立成功,必須手動複製進去。
如果在menuconfig裡沒有修改_install,則make install之後,在busybox目錄下會看見 _install目錄,裡面有/bin,/sbi, linuxrc三個檔案,需要將這三個目錄或檔案拷到第一步所建的rootfs資料夾下。
#cp bin/ sbin/ linuxrc /home/rootfs -ra
切記一定要帶上-a的引數,因為bin目錄裡大部分都是連結,如果不帶-a的引數,拷過去之後會做相應的複製,不再是連結的形式
3.1,複製busybox/examples/bootfloppy/etc整個目錄下的檔案到rootfs/etc目錄下
##cp /home/guoyanzhang/practice/busybox/busybox-1.29.3/examples/bootfloppy/etc/* /home/guoyanzhang/rootfs/etc/ -r
3.2,建立如下裝置檔案,dev目錄下必須有console和null這兩個裝置檔案,使用mknod來建立這兩個裝置檔案,
##sudo mknod -m 660 console c 5 1
##sudo mknod -m 660 null c 1 3
3.3,修改rootfs/etc/fstab檔案,如下:
#device mount-point type dump fsck order
proc /proc proc defaultsi 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
3.4,修改rootfs/etc/profile檔案,如下:
# /etc/profile: system-wide .profile file for the Bourne shells
#echo
#echo -n "Processing /etc/profile... "
# no-op
#echo "Done"
#echo
USER="root"
LOGNAME=$USER
export HOSTNAME='/bin/hostname'
export USER=root
export HOME=/root
export PS1="[[email protected] \w]\#"
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib://usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
3.5,修改rootfs/etc/inittab檔案,如下:
情況1,開機免登陸,直接開啟shell(前面數字為行號)
::sysinit:/etc/init.d/rcS
#::respawn:-/bin/sh
#::respawn:-/bin/login
console::askfirst:-/bin/sh
#tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
情況2, 開機需要登陸(前面數字為行號)
::sysinit:/etc/init.d/rcS
#::respawn:-/bin/sh
::respawn:-/bin/login
#console::askfirst:-/bin/sh
#tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
3.6,配置系統的hostname,在rootfs/etc目錄下執行如下命令:
##cd rootfs/etc
##mkdir sysconfig
##cd sysconfig
##touch HOSTNAME
##echo yourHWname > HOSTNAME
3.7,配置rootfs/etc/init.d/rcS檔案為:
#! /bin/sh
#/bin/mount -a
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevelevel=N
umask 022
export PATH runlevel prevlevel
mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
#mount -t devpts devpts /dev/pts
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
4,製作ramdisk檔案系統,如果電腦中有mkimage工具,可以使用以下指令碼。指令碼放到rootfs檔案同目錄下,執行生成的ramdisk.img就是我們需要的ramdisk檔案系統。
#!/bin/bash
cd /home/guoyanzhang/
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
參考1:https://www.cnblogs.com/AP0904225/p/7020418.html
參考2:https://blog.csdn.net/LEON1741/article/details/54848842
參考3:https://www.cnblogs.com/Charles-Zhang-Blog/p/3419301.html