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="[USER@HOSTNAME \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