首先,POST加电自检,先自动载入一段程序,进行加电自检,当基本的硬件没有问题时启动BIOS,然后根据BIOS中设定好的系统启动顺序,即Boot Sequence中设定好的次序去启动对应设备上的MBR,如果MBR存在就去读取该MBR中的BootLoader,BootLoader中配置有引导该操作系统的内核的位置,到此BIOS完成将控制权交给BootLoader。接着,BootLoader会根据用户的选择来加载相应操作系统的Kernel,但在加载内核前,会先启动initrd,initrd会加载Kernel启动所需要的基本的硬件设备驱动,如内核访问真正的根文件系统所在设备的驱动。initrd在这里只是起一个过渡作用,用于实现连接Kernel和真正的根文件系统。当Kernel启动所需要的基本的硬件设备驱动程序加载完以后,内核就开始启动,完成如硬件探测、装载驱动、挂载根文件系统(rootfs)、启动用户空间中的第一个进程/sbin/init等工作,最后执行用户空间进程/sbin/init(其配置文件为/etc/inittab)。
我们了解了linux的启动流程,现在在去制作我们自己的小linux,就知道我们必须提供什么,这个小linux才能启动了。首先要有内核,这个我们可以拷贝宿主机的内核使用;其次,要用启动内核所需的initrd文件,这个也可以拷贝宿主机的文件,只需要稍加修改即可;还需要安装grub,这个可以提供BootLoader;还需要有根文件系统,系统初始化所需要的文件、目录及库文件等。下面我们就来一起制作自己的小linux吧。
先去安装grub,命令及执行结果如下:
- grub-install --root-directory=/mnt /dev/hda
- uname –r #查看内核版本号
- cp /boot/vmlinuz-2.6.28.10 /mnt/boot/vmlinuz #拷贝宿主机内核
- mkdir /root/backup
- cd /root/backup
- zcat /boot/initrd-2.6.28.10 | cpio –id #注意initrd-2.6.28.10为压缩文件,可用# file /boot/initrd-2.6.28.10查看其文件类型,zcat用于实现不解压直接查看文件
- vim init #修改如下信息为/dev/hda2,因我们的小linux的根在/dev/hda2
- mkrootdev -t ext3 -o defaults,ro /dev/hda2
- ls /mnt/boot
- find . | cpio –H newc –quiet –o | gzip -9 > /mnt/boot/initrd.gz #执行该命令时必须确保当前处于/root/backup目录下,可使用# pwd命令查看当前处于哪个目录下
- cp /root/apple.xpm.gz /mnt/boot/grub/
- vim /mnt/boot/grub/grub.conf :输入如下内容
- default=0
- timeout=3
- splashimage=(hd0,0)/grub/apple.xpm.gz
- title HuLunBeiEr LittleLinux
- root (hd0,0)
- kernel /vmlinuz
- initrd /initrd.gz
- cd /mnt/sysroot
- ls
- mkdir proc sys dev tmp var/log sbin bin lib etc/rc.d root boot mnt home usr/{bin,sbin} –pv
- tree #查看创建的目录树
- # vim etc/inittab
- id:3:initdefault:
- si::sysinit:/etc/rc.d/rc.sysinit
- 上边提到了一个脚本,现在我们就去创建该脚本,并添加如下内容:
- # vim etc/rc.d/rc.sysinit :添加如下信息
- #!/bin/bash
- #
- echo -e "\tWelcome to \033[31mHuLunBerEr\033[0m Linux "
- /bin/bash
- chmod +x etc/rc.d/rc.sysinit
- cd
- vim copy.sh :输入如下内容
- #!/bin/bash
- #
- DEST=/mnt/sysroot
- libcp() {
- LIBPATH=${1%/*}
- [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
- [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."
- }
- bincp() {
- CMDPATH=${1%/*}
- [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
- [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH
- for LIB in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
- libcp $LIB
- done
- }
- read -p "Your command: " CMD
- until [ $CMD == 'q' ]; do
- ! which $CMD &> /dev/null && echo "Wrong command" && read -p "Input again:" CMD && continue
- COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
- bincp $COMMAND
- echo "copy $COMMAND finished."
- read -p "Continue: " CMD
- done
- ls,cp,cat,init,bash,ifconfig,ip,route,vim,find,grep,echo
拷贝完命令后,用# sync命令多同步几遍。至此,我们的小linux以制作完毕,现在我们就去看一下我们的小linux怎么样吧,能不能启动起来。我们先使用如下命令查看一下:
- chroot /mnt/sysroot
下面是启动界面效果:
下面是进入小linux后的界面:
至此,我们的小linux制作完毕。怎么样,你的小linux制作的如何了呢?
注:本来想把制作好的启动界面图片添加附件给附上,但是不知道为什么,居然不支持该文件类型,图片是apple.xpm.gz,所以这里就给出三个图片供自己选择使用吧,制作图片可使用如下命令:# gimp & 制作好之后再保存图片时一定要选择另存为xpm格式的文件,然后再压缩。