製作簡單的linux系統

 
系統的啓動過程,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系統做好了,硬盤重啓。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章