系統的啓動過程,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
# 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
# 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
# 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編譯成一個不使用共享庫的靜態二進制文件,從而避免了對宿主機的共享庫產生依賴
選擇 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用於創建文件系統)
# 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
# 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
# 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
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
# 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
# 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 "
#!/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
mount -t proc proc /proc
mount -t sysfs sysfs /sys
echo -e "Creating the files of device ............[ \033[32mOK\033[0m ]"
mdev -s
mdev -s
echo -e "Mounting the filesystem .................[ \033[32mOK\033[0m ]"
mount -a
mount -a
echo -e "Remounting the root filesystem ..........[ \033[32mOK\033[0m ]"
mount -o remount,rw /
mount -o remount,rw /
echo -e "Starting the log daemon .................[ \033[32mOK\033[0m ]"
syslogd
klogd
syslogd
klogd
echo -e "Configuring loopback interface ..........[ \033[32mOK\033[0m ]"
ifconfig lo 127.0.0.1/24
ifconfig lo 127.0.0.1/24
# END
而後讓此腳本具有執行權限:
chmod +x etc/init.d/rcS
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
console::respawn:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
5、爲系統準備一個“文件系統表”配置文件/etc/fstab
# vim 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
/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
*.info /var/log/messages
**********************六、爲此係統創建所需的引導程序
# grub-install --root-directory=/mnt /dev/hda
說明:此處的/dev/hda爲目標系統所在的那塊新磁盤;
接下來爲grub建立配置文件:
# vim /mnt/boot/grub/grub.conf
# 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
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系統做好了,硬盤重啓。