1. 程式人生 > >debian9安裝busybox,並製作根檔案系統(2)

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