用busybox制作Linux及解决制作过程中的问题

本文发布时间: 2019-Mar-22
一、busybox定义及版本 我们制作微型Linux,要借助一个软件,我们这里讲的是busybox,首先我们要知道busybox是什么?它 是一个含有很多个最常用linux命令和工具的软件,例如:ls,cp,echo, grep,mount等。 我们在当前需要做一个程序,编译出来之后,这个程序要想运行它还需要依赖很多库文件,我们要向移植这个命令过去,就要把它所依赖的库文件也一并复制过去,这样它才能正常运行。我们前面制作的小linux的时候我们要移植bash,我们先用ldd去查看它所依赖的库,这是因为我们使用动态连接的方式去编译的程序。事实上,也完全可以实现将它所依赖的库直接编译进这个程序,这样可能会使我们程序的体积变大,但是我们把它移动到哪里都能直接用,因为所依赖的库都直接做进里面了。那我们编译busybox的时候,为了让它移植的过程尽可能简化,我们直接编译busybox的时候,把它编译成静态的方式,把它所依赖的库直接做进busybox。在http://www.busybox.net/可以查看busybox的版本,现在busybox的最新稳定版是BusyBox 1.20.2 (stable),开发版最新的是BusyBox 1.21.0 (unstable)。这里我们使用的都是稳定版。 我们首先要在原有的虚拟机上装上一个IDE格式的硬盘,并且分两个 区/dev/hda1和/dev/hda2。并且还要创建目录/mnt/boot和/mnt/sysroot,然后把/dev/hda1、/dev/hda2分别挂载到/mnt/boot、/mnt/sysroot下面。(这个过程在前面制作简单linux的时候有详细版,相同的地方到/dev/hda1和/dev/hda2在/etc/fstab文件中挂起,用mount查看一下是否挂起)这里我们就直接到我们的服务器上下载了,如果朋友们想尝试一下,到网上下载稳定版的BusyBox 1.20.2 (stable)。下面我们就开始演示这个过程。二、装载微Linux1、我们这里先准备好开发环境【提示:必须要有开发环境】要想安装开发环境就要使用yum库,前面我已经讲到yum库的安装这里就不多说,我们这里从安装开发环境说,我们先用yum grouplist查看一下开发环境是否安装,如果安装了我们就进行第二步下载busybox,如果没安装我们就要安装“Development Tools”和“Development Libraries”,用yum groupinstall “Development Tools”“Development Libraries”进行安装【提示:这里安装需要一些时间,要耐心等待】,安装完成后我们就开始执行第二步下载busybox。2、开始下载busybox这里我们就直接到我们的服务器上下载了,如果朋友们想尝试一下,到网上下载稳定版的BusyBox 1.20.2 (stable)。下载的命令是get busybox-1.20.2.tar.bz2下载完成后,解压busybox,要先进入busybox然后编译,它的编译方式跟内核一样,要先执行make menuconfig【提示:在执行make menuconfig的时候不要把屏幕缩的太小,会报错的,我这里不演示了,有兴趣的可以尝试一下】,我们事先也说过它可以模仿很多命名,所以我们要进行个别的选择,一个一个选太麻烦所以它给我们一个目录。3、编辑busybox进入这个目录后我们最主要改的就是在Busybox Settings --->Build Options ---> [*] Build BusyBox as a static binary (no shared libs)主要就是将[ ]里面的打上*(为启用状态)。我们这样做就是将编译状态中的静态二进制给它启用。我们还需要查一下装到什么地方了,在Busybox Settings ---> Installation Options ("make install" behavior) ---> What kind of applet links to install (as soft-links) --->[ (./_install) BusyBox installation prefix (NEW) ]4、安装busybox这个时候我们就直接去编译安装busybox,直接执行make install这时候可能会报错的,因为最新版本的busybox要依赖更新版的内核头文件,我们使用的是2.6.18的内核,而它当中不具备新版的busybox所具备的某些功能,所以编译过程中很可能会出错,我们要使用2.6.28以上的版本,我们在这里选用2.6.38的版本,主要的依赖就是/usr/src/linux-2.6.38.5/include/mtd/ubi-user.h这个文件,把它复制过去。这时候我们进入到/root/busybox-1.20.2下,在busybox-1.20.2下也有一个include,我们在里面创建一个mtd目录,然后把把inubi-user.h复制到里面。然后我们就开始执行make instll了。(因为程序很小,这个速度是很快的)【提示:这里一定要注意在哪个目录下面,我们要在busybox-1.20.2下面执行make install】这时候在当前目录下创建了一个_install,所有创建的文件都在这里面,我们就以_install为蓝本去创建一些我们所需要的文件。5、用_instll先创建initrd我们用_instll先创建initrd,但是我们在创建initrd的时候我们先给它一个临时目录/tmp/busybox。这里我们打算使用红帽提供的内核,但这个内核不支持ext3【提示:内核不支持ext3,就意味着它没法访问真正的根文件系统】,这里的initrd主要存在目的就是为内核提供所需要依赖访问根文件系统所需要的模块了。我们要借助initrd来装载ext3这个模块了。我们在/busybox/lib/modules装载两个模块。 下来我们就要提供init脚本,因为busybox提供的没有bash,只有sh。进行编辑vim init。编辑完成退出后还需要加入权限(chmod +x init)#!/bin/sh ####【注意:这里一定要写/bin/sh】 # mount -t proc proc /proc ####挂载proc文件系统 mount -t sysfs sysfs /sys ####挂载sys文件系统 insmod /lib/modules/jbd.ko ####加载模块 insmod /lib/modules/ext3.ko mdev –s ####探测额外硬件【下面有详细解释】 mount -t ext3 /dev/hda2 /mnt/sysroot ####挂载根文件系统 exec switch_root /mnt/sysroot /sbin/init ####切换虚根到真正的文件系统 有时候我们可能需要系统来探测额外的硬件,并触发这些设备的,红帽给我们提供的是udev,而busybox给我们提供的是mdev,而这个mdev在/tmp/busybox/mnt/sysroot/sbin下。我们在/busybox/mnt/创建sysroot。我们还需要手动创建设备文件,分别是dev/console和dev/null【建议:使用手动创建】这时候我们就可以将此目录做成initrd了。我们看一下大小是不是很小呀!6、准备内核这个时候我们就要复制内核了,并且重命名为vmlinuz。cp /boot/vmlinuz-2.6.18-308.el5 /mnt/boot/vmlinuz7、安装grub【提示:安装完成以后我们最好还是查看一下/mnt/boot,看看是否和我们期望的一样】8、提供配置文件[root@localhost busybox]# vim /mnt/boot/grub/grub.confdefault=0 timeout=1 title shuaige Linux (2.6.18) root(hd0,0) kernel /vmlinuz ro root=/dev/hda2 initrd /initrd.gz 9、开始准备sysroot了,【提示:这个目录就用不着了,我们要回到原目录下】,我们把/ busybox-1.20.2下面的_install复制粘贴在/mnt/sysroot里面。[root@localhost busybox-1.20.2]# cd[root@localhost ~]# cd busybox-1.20.2[root@localhost busybox-1.20.2]# cp _install/* /mnt/sysroot –a10、创建目录我们在/mnt/sysroot下创建一些目录。命令:mkdir proc sys dev tmp var/{log,lock.run} lib/moduies etc/rc.d/init.d root boot mnt media –pv11、创建配置文件配置/mnt/sysroot /etc/inittab【提示:busybox所支持的inittab和我们的inittab是不太一样的】里面不需要设定级别::sysinit:/etc/rc.d/rc.sysinit 初始化脚本console::respawn:-/bin/sh::ctrlaltdel:sbin/reboot 按下Ctrl +Alt+Del 执行reboot ::shutdown:/bin/umount -a –r 执行shutdown命令的时候,要卸载文件系统12、为系统准备一个“文件系统表”配置文件内容需要挂载到/mnt/sysroot/etc/fstab,内容如下:sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/hda1 /boot ext3 defaults 0 0 /dev/hda2 / ext3 defaults 1 1 13、创建设备文件这里的真正的根文件系统也是需要创建文件设备的。[root@localhost sysroot]# mknod dev/console c 5 1[root@localhost sysroot]# mknod dev/null c 1 314、建立系统初始化脚本[root@localhost sysroot] # vim etc/rc.d/rc.sysinit 内容如下:#!/bin/sh echo -e "\tWelcome to \033[31mShuaiGe\033[0m Linux" echo -e "Remounting the root filesystem ..........[ \033[32mOK \033[0m ]" mount -t proc proc /proc mount -t sysfs sysfs /sys mount -o remount,rw / echo -e "Creating the files of devic ...................[ \033[32mOK\033[0m ]" mdev -s echo -e "Mounting the filesystem.......................[ \033[32mOK\033[0m ]" mount -a swapon -a 15、然后给它执行权限。到这里我们的微虚拟机的制作过程已告一段落,只要注意到我上面所提的注意事项,完成这个是不成问题的。[root@localhost sysroot]#chmod +x etc/rc.d/rc.sysinit


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:10pm
栏目列表