在制作我们的小linux时,这里使用的是VMware虚拟机,安装的RedHat5.8版本的系统,其他的请参考相关资料。
    在制作我们自己的小 linux 前,先来看一下 linux 系统启动流程:

教你制作一个简单的小linux_第1张图片

    首先,POST加电自检,先自动载入一段程序,进行加电自检,当基本的硬件没有问题时启动BIOS,然后根据BIOS中设定好的系统启动顺序,即Boot Sequence中设定好的次序去启动对应设备上的MBR,如果MBR存在就去读取该MBR中的BootLoaderBootLoader中配置有引导该操作系统的内核的位置,到此BIOS完成将控制权交给BootLoader。接着,BootLoader会根据用户的选择来加载相应操作系统的Kernel,但在加载内核前,会先启动initrdinitrd会加载Kernel启动所需要的基本的硬件设备驱动,如内核访问真正的根文件系统所在设备的驱动。initrd在这里只是起一个过渡作用,用于实现连接Kernel和真正的根文件系统。当Kernel启动所需要的基本的硬件设备驱动程序加载完以后,内核就开始启动,完成如硬件探测、装载驱动、挂载根文件系统(rootfs)、启动用户空间中的第一个进程/sbin/init等工作,最后执行用户空间进程/sbin/init(其配置文件为/etc/inittab)

我们了解了linux的启动流程,现在在去制作我们自己的小linux,就知道我们必须提供什么,这个小linux才能启动了。首先要有内核,这个我们可以拷贝宿主机的内核使用;其次,要用启动内核所需的initrd文件,这个也可以拷贝宿主机的文件,只需要稍加修改即可;还需要安装grub,这个可以提供BootLoader;还需要有根文件系统,系统初始化所需要的文件、目录及库文件等。下面我们就来一起制作自己的小linux吧。

首先,为系统添加一块新的磁盘,这里我们添加一块 IDE 口的磁盘,分区并格式化,这里不再给出实现过程,仅给出本机上磁盘分区情况,供参考。

教你制作一个简单的小linux_第2张图片

接着我们去创建两个目录 /mnt/boot /mnt/sysroot ,分别用来挂载 /dev/hda1 /dev/hda2 两块磁盘,格式化和挂载的命令上图以给出,这里只给出进行结果:

教你制作一个简单的小linux_第3张图片

    先去安装grub,命令及执行结果如下:

   
   
   
   
  1. grub-install --root-directory=/mnt /dev/hda 

教你制作一个简单的小linux_第4张图片

现在去拷贝宿主机上的内核做我们小 linux 的内核使用,并将其重命名为 vmlinuz ,如果不知道本宿主机的内核版本号,可用如下命令查看一下,然后再拷贝,命令如下:
   
   
   
   
  1. uname –r                  #查看内核版本号 
  2. cp /boot/vmlinuz-2.6.28.10 /mnt/boot/vmlinuz   #拷贝宿主机内核 
 
现在去制作 initrd 文件,先在 /root 目录中创建目录 backup ,然后将宿主机上的 initrd 文件展开在该目录下,修改 init 文件,并将多余的信息如安装某个模块等注释掉,精简 initrd 文件,具体命令如下:
 
   
   
   
   
  1. mkdir /root/backup 
  2. cd /root/backup 
  3. zcat /boot/initrd-2.6.28.10 | cpio –id   #注意initrd-2.6.28.10为压缩文件,可用# file /boot/initrd-2.6.28.10查看其文件类型,zcat用于实现不解压直接查看文件 
  4. vim init   #修改如下信息为/dev/hda2,因我们的小linux的根在/dev/hda2 
  5. mkrootdev -t ext3 -o defaults,ro /dev/hda2 
然后保存退出,将该目录下的所有文件,打包归档并压缩到 /mnt/boot 目录下,并重命名为 initrd.gz ,命令及执行结果如下:
   
   
   
   
  1. ls /mnt/boot 
  2. find . | cpio –H newc –quiet –o | gzip -9 > /mnt/boot/initrd.gz   #执行该命令时必须确保当前处于/root/backup目录下,可使用# pwd命令查看当前处于哪个目录下 
教你制作一个简单的小linux_第5张图片
    内核我们已经拷贝过了, initrd 文件也制作好了,对,刚安装的 grub 还没有配置文件,现在我们去编辑 grub 的配置文件,在配置文件前,我们先去从宿主机上拷贝个已经做好的图片,做我们小 linux 启动时的背景图片,具体图片制作过程这里不再演示。命令及结果如下:
   
   
   
   
  1. cp /root/apple.xpm.gz /mnt/boot/grub/ 
  2. vim /mnt/boot/grub/grub.conf   :输入如下内容 
  3. default=0 
  4. timeout=3 
  5. splashp_w_picpath=(hd0,0)/grub/apple.xpm.gz 
  6. title  HuLunBeiEr  LittleLinux 
  7.       root (hd0,0
  8.       kernel /vmlinuz 
  9.       initrd /initrd.gz 
    来看一下我们的 /mnt/boot 目录下现在都有哪些文件吧。

    到目前为止, /mnt/boot 目录下的所有需要用到的文件我们都已制作完毕,先在就去创建根目录吧。命令如下:
   
   
   
   
  1. cd /mnt/sysroot  
  2. ls  
  3. mkdir proc sys dev tmp var/log sbin bin lib etc/rc.d root boot mnt home usr/{bin,sbin} –pv  
  4. tree     #查看创建的目录树 
教你制作一个简单的小linux_第6张图片

教你制作一个简单的小linux_第7张图片

    所需要的各个目录我们都已创建完成。我们知道,系统初始化的过程是由 /etc/inittab 文件完成的,现在我们就去编辑该文件,并添加系统初始化命令: 
   
   
   
   
  1. # vim etc/inittab 
  2. id:3:initdefault: 
  3. si::sysinit:/etc/rc.d/rc.sysinit 
  4.  
  5. 上边提到了一个脚本,现在我们就去创建该脚本,并添加如下内容: 
  6.  
  7. # vim etc/rc.d/rc.sysinit   :添加如下信息 
  8. #!/bin/bash 
  9. # 
  10. echo -e "\tWelcome to \033[31mHuLunBerEr\033[0m Linux " 
  11. /bin/bash  
    为脚本赋予权限:
   
   
   
   
  1. chmod +x etc/rc.d/rc.sysinit 
    到此,我们的小 linux 已创建的差不多了,对,最关键的一个还没有添加,那就是 bash init 以及各自依赖的库,现在我们不一个个去添加,通过一个脚本,我们直接将所需要的统统复制到我们的小 linux 所在的目录下,脚本如下: 
         
         
         
         
    1. cd  
    2. vim copy.sh   :输入如下内容  
    3. #!/bin/bash  
    4.  
    5. DEST=/mnt/sysroot  
    6. libcp() {  
    7.   LIBPATH=${1%/*}  
    8.   [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH  
    9.   
    10.   [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."  
    11.   
    12. }  
    13.    
    14. bincp() {  
    15.   CMDPATH=${1%/*}  
    16.   [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH  
    17.   [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH   
    18.   for LIB in  `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do  
    19.     libcp $LIB  
    20.   done  
    21. }  
    22.    
    23. read -p "Your command: " CMD  
    24. until [ $CMD == 'q' ]; do  
    25.    ! which $CMD &> /dev/null && echo "Wrong command" && read -p "Input again:" CMD && continue  
    26.   COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`  
    27.   
    28.   bincp $COMMAND  
    29.   echo "copy $COMMAND finished."  
    30.   read -p "Continue: " CMD  
    31. done  
 
    给该脚本赋予执行权限 # chmod +x copy.sh ,执行该脚本,将我们可能要用到的一些命令都添加进来,这里我们添加的命令有:
   
   
   
   
  1. ls,cp,cat,init,bash,ifconfig,ip,route,vim,find,grep,echo 

教你制作一个简单的小linux_第8张图片

    拷贝完命令后,用# sync命令多同步几遍。至此,我们的小linux以制作完毕,现在我们就去看一下我们的小linux怎么样吧,能不能启动起来。我们先使用如下命令查看一下:

   
   
   
   
  1. chroot /mnt/sysroot 

    下面是启动界面效果:

教你制作一个简单的小linux_第9张图片

    下面是进入小linux后的界面:

教你制作一个简单的小linux_第10张图片

 

 

 

至此,我们的小linux制作完毕。怎么样,你的小linux制作的如何了呢?

 

注:本来想把制作好的启动界面图片添加附件给附上,但是不知道为什么,居然不支持该文件类型,图片是apple.xpm.gz,所以这里就给出三个图片供自己选择使用吧,制作图片可使用如下命令:# gimp &   制作好之后再保存图片时一定要选择另存为xpm格式的文件,然后再压缩。