第七十二讲——使用buybox手动攒系统 本文共有23505个字,关键词: kernel+initrd(buybox制作)+rootfs(buybox制作) 在内核中是没有编译ext3文件系统的,而真正的文件系统是ext3格式的,这就意味着buybox要提供ext3文件系统,当ext3装载进内核,内核就能够识别ext3文件系统了,就能够加载根文件系统rootfs,rootfs基于buybox制作,虽然buybox很小,但是buybox能够提供的命令非常多。 #make arch/ 只编译核心(内核) 只编译对应目录下的源程序,但是arch还是紧密的依赖各模块的,所以会遍历各模块。 当编译完成之后,在arch目录下会有一个目录,32位操作系统下为X86/boot/bzimage bzimage表示是使用bz压缩的映像文件,于是我们只需要将这个文件复制到/boot目录下并改名为vmlinuz即可。 硬件驱动:initrd用于装载访问根文件系统所依赖的驱动(存储设备和文件系统相关的模块)。余下的驱动由rc.sysinit完成初始化,如果系统所在的设备为U盘的话,initrd还需要提供U盘的驱动。即initrd需要提供内核访问真正根文件系统所在设备需要的驱动程序,和文件系统相关的模块。 rootfs: buybox的init是不支持运行级别的 buybox只支持ash,hash,如需要支持bash则需要移植。 busybox提供的init的配置文件/etc/inittab的格式与系统带的格式不尽相同,如果我们移植了系统上的init,则/etc/inittab也要符合其规则。 首先对硬盘分区挂载,安装grub grub-install –root-directory=/mnt/root(为新硬盘的挂载点) /dev/sd# 为新硬盘中的系统创建必须得目录。 提供内核:将编译后的bzimage复制到新系统的/boot目录下 #sync 同步硬盘数据 提供initrd文件,使用buybox(先将buybox先展开) buybox所依赖的内核的头文件比我们rhel5.8系统的要新一点,因此我们先去下载一个新的内核文件。 #mkdir */buybox*/include/mtd #cp 下载内核下/include/mnt/ubi-user.sh */buybox*/include/mtd 即将展开后的内核的头文件放入buybox中, 然后切换到buybox目录中,执行make menuconfig 打开buybox中的配置文件,只需要将编译选项修改一下,编译为一个静态文件,移植起来比较方便,安装路径也可以修改,直接更改为需要的目录。 #make install 创建initrd文件: cd到buybox目录 #mkdir /tmp/initrd #cp _install/* /tmp/initrd -a 除了bash命令,其他的命令基本上都有 将目录里为linuxrc的链接文件删除。 创建设备文件: #mknod */dev/console c 5 1 #mknod */dev/null c 5 3 #ls dev/确定设备下的设别文件没有问题 创建init脚本 #vim init #!/bin/sh(buybox下没有bash,只有ash,hash) mount –t proc(类型) proc(文件系统) /proc(挂载点) mount –t sysfs sysfs /sys #挂载proc和sys伪文件系统,proc中为内核参数的映射文件,sys用于输出硬件信息,在这里必须要手动声明,不然内核无法正常工作,或者说内核无法探测到其他硬件,也无法将信息输出给用户空间 insmod /lib/modules/jbd.ko insmod /lib/modules/etx3.ko #加载内核模块(ext3文件系统) 为了将加载模块的信息进行输出到启动屏幕,我们还需要对init脚本进行修饰。 #vim init #!/bin/sh buybox支持的为ash,hash echo “mounting proc and sys...” mount –t proc proc /proc mount –t sysfs sysfs /sys echo “loading ext3 modules...” insmod /lib/modules/jbd.ko insmod /lib/modules/ext3.ko echo “defect and export hardwareinfomation...” mdev –S echo “mount real rootfs to/mount/sysroot...” mount –t ext3 /dev/hda2 /mnt/sysroot echo “switch read rootfs..” exec switch_root /mnt/sysroot /sbin/init 保存并给予执行权限 #chmod +x init 内核的版本一定要与模块相匹配 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2017-02-10 评论 2635 次浏览