怎樣製作自己的linux
要製作一個linux系統,首先我們要了解它的原理,啓動的時候,首先是加電自檢,然後再BIOS裏面設定要讀取的那塊磁盤的MBR,加載bootloder,bootloer加載相對應分區的內核,內核完成自身初始化後,掛載根文件系統,並裝載init可執行文件,在inittab文件控制下,完成一系列的任務
我們先格式化一個磁盤,並分區,這裏分兩個區,sdb1和sdb2把第一個磁盤分區sdb1安裝grub,要在sdb2上裝內核,安裝過grub之後,再把內核也加上,並作相應的配置,就可以啓動一個系統了
首先,創建目錄/mnt/boot,並把設備sdb1掛載到/mnt/boot下面
mkdir /mnt/boot
mount /dev/sdb1 /mnt/boot
下面先安裝grub,(其實上篇已經介紹如何安裝了,這裏僅簡述命令)
mkdir /mnt/boot/grub
cp /usr/share/grub/i386-redhat/* /mnt/boot/grub
grub
grub> root (hd1,0)
grub> setup (hd1)
再創建/mnt/sysroot目錄,用來裝載內核
mkdir /mnt/sysroot (這裏我們隨便起一個目錄名,然後把新的分區掛載到上面)
mount /dev/sdb2 /mnt/sysroot/
ls /mnt/sysroot 查看是否已經掛載好,如有lost+found則表明掛在好新分區
Ls /boot/ 可以看到內核在裏面,拷貝內核到/mnt/boot下
cp /boot/vmlinuz-$(uname -r) /mnt/boot/vmlinuz (後綴名可以自己寫)
mkdir /tmp/linux 在臨時目錄裏創建一個目錄,用來寄存initrd文件
cd /tmp/linux
zcat /boot/initrd-$(uname –r).img | cpio –id 這個文件是歸檔壓縮的文件,是用cpioy歸檔的,所以解壓後,必須用cpio -id 才能打開,
vim init 編輯打開後的init文件
找到/dev/vol0/root 換成/dev/sda2
我們知道,本地磁盤sdb 可以當做另一個新主機的磁盤sda,所以grub已經在sda1上了,內核要在第二個磁盤分區上,所以在init文件中,要把/dev/vol0/root 修改爲/dev/sda2
格式化第二個磁盤分區。mkfs –t ext3 /dev/sdb2
然後再將其歸檔到指定目錄下:
find . | cpio –o –H newc –quiet | gzip -9 > /mnt/boot/initrd.gz(最後的歸檔名可以自擬)
下面我們可以創建一些目錄:
cd /mnt/sysroot
mkdir –pv ./{etc/rc.d,bin,sbin,usr,proc,sys,var,tmp,lib,mnt,media,misc,opt,dev}
內核與grub已經有了,下面我們把init和bash也拷貝過來
cp /sbin/init sbin/
cp /bin/bash bin/
這時候, bash,init,grub,initrd都有了,你是不是以爲大功告成了?我們可以用chroot這個命令測試一下,chroot /mnt/sysroot 此命令是將後面的目錄作爲根來調用,可以在/mnt/sysroot環境下試驗命令,結果…………嘿嘿!不行吧!
那是因爲少了命令所依賴的庫文件,可以用ldd 這個命令查看可執行文件依賴的庫文件
ldd /bin/bash
ldd /sbin/init
然後將以/lib開頭的庫文件拷貝到/mnt/sysroot/lib下,
下面還要配置一些文件:
先編輯inittab文件,此文件裏定義的有:
1 默認運行級別,2 系統初始化腳本指定 3特定級別目錄下腳本指定 4定義ctrl+alt+del組合鍵的功能 5 定義USP電源故障或電源重新恢復是執行的進程 6啓動虛擬終端 7 初始化圖形界面
Vim etc/inittab
Id :3:initdefault 默認運行級別是3
Si::sysinit:/etc/rc.d/rc,sysinit si是id,運行級別省略是指所有級別,sysinit是系統初始化, 後面是所要運行的腳本,一般格式爲:id:runlevels:action:process
編輯系統初始化腳本,這裏我們可以隨便寫點
Vim etc/rc.d/rc.sysinit
#!/bin/bash
Echo –e “\t Welcome to mylinux”
/bin/bash
保存退出後,修改權限:chmod +x etc/rc.d/rc.sysinit
最後別忘了,還有一個grub的配置文件呢!
Cd grub/
V im grub.conf
default=0
timeout=5
title mylinux
root(hd0)
kernel /vmlinuz ro root=/dev/sda2
initrd /initrd.gz
保存退出,然後sync ,同步到磁盤數據這時候,算是完成了,可以啓動你那個新的linux了。
怎麼樣,是不是有種小小的成就感了,其實這只是小試牛刀,如果你想了解更多有關linux的knowledge,請繼續關注我的博客,會不斷更新哦!