使用busybox制作rootfs
busybox源码编译
- 下载busybox(建议最好下载1.30版本以上的)
- 解压tar-jxvf busybox-1.30-1.tar.bz2
- 配置busybox
1)进入busybox源码目录,输入make menuconfig(可能还会出现make命令无法执行。解决方法:sudo apt-get install build-essential sudo apt-get install libcurses5-dev)
2)编译的时候可以选择动态编译,也可以选择静态编译。在这里选择静态编译,及选中Busybox Setting->Bulid Options->[ ]Build Busybox as a static binary(no shared libs)
3)选择exit然后保存 - 输入make编译
- 输入make install进行安装
- 安装后再busybox源目录下会生成一个_install目录
制作initrd镜像
-
在用户主目录下新建一个叫rootfs,将busybox源码目录_install的内容全部复制到该目录。
1)mkdir /home/fx/rootfs
2)cp ./_install/* /home/fx/rootfs -
添加根文件系统的必要目录
mkdir dev etc proc bin sbin sys tmp -
添加配置信息
1)将busybox源码examples/bootfloppy/etc 目录内容,复制到rootfs/etc
cp examples/bootfloppy/etc/* /home/fx/rootfs/etc
2)修改rootfs/etc/fstab文件
注意:自检设置,1:开机后磁盘自检 0:不自检
pass:优先级设置,若自检为1则可对多块硬盘进行优先级设置。
3) 修改rootfs/etc/profile文件第七行:定义PATH变量,赋值为后面的字符串,然后导出为环境变量。PATH表示了当前用户的系统命令、常用命令及应用程序的默认存储路径。
第八行:LD_LIBRARY_PATH设置了应用程序库的路径
第九行:定义PS1变量并导出为环境变量,PS1是基本提示符,(用户 主机名,工作目录名称)
4)修改rootfs/etc/inittab文件
系统启动后首先执行一次/etc/init.d/rcS脚本,脚本执行结束后执行profile脚本(/bin/sh加上”-”的话就会在登陆终端之后调用/etc/目录下的profile文件,而不加”-”则不会执行这个脚本),再执 行/bin/sh程序,之后就可以在控制台输入交互命令,
5)修改rootfs/etc/init.d/rcS的文件
第一行:这表示一个脚本文件,指明脚本解释器的路径
第二三四五行:表示显示信息
第六行:表示挂载所有/etc/fstab指定的文件系统 -
拷贝所需要的库(主要这里跟Linux 镜像的版本有关,在16.04 下面没有i386这个库,可以选择x86-84有所需要的库)
1)添加所需要的设备
2)制作8M大小的镜像文件
3)格式化这个镜像文件为ext2
4)在/mnt目录下建立initrd目录挂载点
5)将当前目录的initrd.img挂载到.mnt/initrd
6)将rootfs目录下的所有内容复制到/mnt/initrd
7)卸载/mnt/initrd
8)将制作好的initrd放到/boot下
9)修改/boot/grub/grub.cfg(注意这里跟版本还有关系,例如error: you need to load the linux kernel first 这个问题是你配置有问题,缺少内核启动解决方法:赋值grub.cfg中ubuntu的启动信息)
10)reboot 然后shift 进入自己建立的rootfs
效果如图:
到这里,rootfs就制作成功了。