系统的启动过程,GRUB,KERNEL,INITRD在前面已经做了介绍
 
可以使用宿主机帮助制作
 
 
 
首先完成硬盘的分区,属性,挂载
Fdisk  mkfs   mount
mount   /dev/hda1 /mnt/hda1 
mount  /dev/hda2  /mnt/hda2
 
******编译内核kernel
  采用的是linux-2.6.34.1.tar.bz2
 
# cd  /usr/src
# tar jxvf linux-2.6.34.1.tar.bz2
# ln  -sv  linux-2.6.34.1  linux
# cd linux
# make menuconfig
根据需要选择需要的模块
# make  SUBDIR=arch/
表示只编译内核,暂时不编译模块,完成后会出现内核bzImage
# cp arch/x86/boot/bzImage  /mnt/boot
# make menuconfig
 
******编译文件系统initrd
这里推荐 busybox
 
# cd /usr/src
# tar  -jxvf  busybox-1.16.1.tar.bz2
# cd  busybox-1.16.1
# make menuconfig
选择 Busybox Settings --> Build Options -->  Build BusyBox as a static binary (no shared libs)这样可以把Busybox编译成一个不使用共享库的静态二进制文件,从而避免了对宿主机的共享库产生依赖
# make  install
# mkdir -pv /mnt/temp
# cp -r /usr/src/busybox/_install/*   /mnt/temp(temp用于创建文件系统)
# cd  /mnt/temp
# mkdir -pv  proc  sys  etc/init.d  tmp  dev  mnt/hda2
# mknod  dev/console  c  5  1
# mknod  dev/null  c  1  3
为initrd制作init程序,此程序的主要任务是实现rootfs的切换,因此,可以以脚本的方式来实现它:
# rm  linuxrc
# vim  init
添加如下内容:
#!/bin/sh
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mdev -s
mount -t ext3 /dev/hda2  /mnt/hda2
exec  switch_root  /mnt/hda1 /init
给此脚本执行权限:
chmod  +x  init
# find  .  | cpio  --quiet  -H newc  -o  | gzip  -9 -n > /mnt/hda1/initrd.gz(将做好的文件系统INITRD放在)
 
************建立真正的根文件系统
 
# cd  /mnt/hda2
1、建立rootfs:
# mkdir -pv  proc  sys  etc/init.d  tmp  dev  boot  var/log lib
2、创建两个必要的设备文件:
# mknod  dev/console  c  5  1
# mknod  dev/null  c  1  3
3、建立系统初始化脚本文件
# vim  etc/init.d/rcS
添加如下内容:
 
#!/bin/sh
echo -e "            Welcome to  \033[31mToyLinux\033[0m\n                "
echo -e "Mounting the filesystem .................[  \033[32mOK\033[0m  ]"
mount -t proc proc /proc
mount -t sysfs  sysfs  /sys
echo -e "Creating the files of device ............[  \033[32mOK\033[0m  ]"
mdev -s
echo -e "Mounting the filesystem .................[  \033[32mOK\033[0m  ]"
mount -a
echo -e "Remounting the root filesystem ..........[  \033[32mOK\033[0m  ]"
mount  -o  remount,rw  /
echo -e "Starting the log daemon .................[  \033[32mOK\033[0m  ]"
syslogd
klogd
echo -e "Configuring loopback interface ..........[  \033[32mOK\033[0m  ]"
ifconfig  lo  127.0.0.1/24
# END
而后让此脚本具有执行权限:
chmod +x  etc/init.d/rcS
4、配置init及其所需要inittab文件
# cd  /mnt/hda2
# mv  linuxrc  init
# vim  etc/inittab
添加如下内容:
::sysinit:/etc/init.d/rcS
console::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
5、为系统准备一个“文件系统表”配置文件/etc/fstab
# vim  etc/fstab
添加如下内容:
/dev/hda2               /                       ext3    defaults        1 1
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/hda1               /boot                   ext3    defaults        0 0
6、由于在rcS文件中启动了日志进程,因此系统在运行中会产生大量日志并将其显示于控制台;这将会经常性的打断正在进行的工作,为了避免这种情况,我们这里为日志进程建立配置文件,为其指定将日志发送至/var/log/messages文件;
# vim  etc/syslog.conf
添加如下一行:
*.info    /var/log/messages
**********************六、为此系统创建所需的引导程序
# grub-install  --root-directory=/mnt  /dev/hda
说明:此处的/dev/hda为目标系统所在的那块新磁盘;
接下来为grub建立配置文件:
# vim  /mnt/boot/grub/grub.conf
添加类似如下内容:
default  0
timeout  3
color light-green/black light-magenta/black
title ToyLinux (2.6.34.1)
 root (hd0,0)
 kernel /bzImage ro root=/dev/hda2 quiet
 initrd /initrd.gz
 
 
 
 
至此,一个简单的linux系统做好了,硬盘重启。