?
一,什么是BabyLinux
BabyLinux不是一個(gè)完整的發(fā)行版,他是利用原有的一套完整的linux系統(tǒng)的內(nèi)核原代碼和編譯工具,利用busybox內(nèi)建的強(qiáng)大功能,在一張軟盤(pán)上做的一個(gè)很小的linux系統(tǒng).他具備一個(gè)linux系統(tǒng)的基本特征,支持linux系統(tǒng)最常用的一百多個(gè)命令,支持多種文件系統(tǒng),支持網(wǎng)絡(luò)等等,你可以把他當(dāng)做一張linux起動(dòng)盤(pán)和修復(fù)盤(pán)來(lái)用,你也可以把他當(dāng)做一個(gè)靜態(tài)路由的路由器軟件,當(dāng)然,你也可以把他當(dāng)做一個(gè)linux玩具,向你的朋友炫耀 linux可以做的多么小.我把他叫做BabyLinux因?yàn)樗苄∏?小的很可愛(ài),像一個(gè)剛剛出生的小baby.
二,為什么要作這樣一個(gè)linux
先說(shuō)說(shuō)我一開(kāi)始的想法,當(dāng)我一開(kāi)始接觸linux的時(shí)候,看到書(shū)上說(shuō),linux通常安裝只需要60M左右的空間,但是我發(fā)現(xiàn)裝在我硬盤(pán)上的Redhat 6.0確要占據(jù)好幾百M(fèi)的空間.為什么我的linux這么大呢? 后來(lái)我發(fā)現(xiàn),裝在我機(jī)器上的那么多東西只有不到30%是我平時(shí)常用的,還有30%是我極少用到的,另外的40%基本上是不用的.于是,我和大多數(shù)初學(xué)者一樣,開(kāi)始抱怨,為什么linux不能做的精簡(jiǎn)一點(diǎn)呢?于是,我萌發(fā)了自己裁減系統(tǒng)的想法.可惜那個(gè)時(shí)候我還沒(méi)有聽(tīng)說(shuō)過(guò)有LFS和Debain.等到我積累了足夠的linux知識(shí)后,我開(kāi)始制作這樣一個(gè)小系統(tǒng).
制作這樣一個(gè)小系統(tǒng)最大的意義在于,你可以通過(guò)制作系統(tǒng)了解linux的啟動(dòng)過(guò)程,學(xué)會(huì)ramdisk的使用,讓你在短時(shí)間內(nèi)學(xué)到更多的linux知識(shí). 當(dāng)然,你會(huì)得到很大的樂(lè)趣.這個(gè)項(xiàng)目只是做一個(gè)具有基本特征的linux系統(tǒng),如果你想自己做一個(gè)具有完整功能的linux,請(qǐng)閱讀Linux From Scratch (LFS)文檔.
三,什么人適合讀這篇文檔
如果你是一個(gè)linux愛(ài)好者,并且很想了解linux的啟動(dòng)過(guò)程和系統(tǒng)的基本結(jié)構(gòu),而且是一個(gè)喜歡動(dòng)手研究小玩意的人,那么這個(gè)文檔可以滿(mǎn)足你的需求. 如果你僅僅是用linux來(lái)做一些普通的日常工作,而不在乎你的linux到底怎么工作,那么這份文檔也許不太適合你.另外,如果你是linux愛(ài)好者, 但是目前還是一個(gè)剛剛?cè)腴T(mén)的newbi,我建議你先把linux命令學(xué)好.不過(guò)我想我會(huì)盡可能的把這份文檔寫(xiě)詳細(xì)一些,如果你有足夠的毅力,或許一個(gè) newbi也能成功做一個(gè)babylinux.或者,你遇到一件很不巧的事情,比如你的老婆來(lái)例假了,你的這個(gè)周末就泡湯了,那么閱讀這篇文檔并做一個(gè) linux小玩具可以打發(fā)你的時(shí)間.
四,應(yīng)該具備的知識(shí)
在做一個(gè)babylinux之前,你應(yīng)當(dāng)已經(jīng)會(huì)應(yīng)用linux最常用的命令.并且至少有一次成功編譯并安裝系統(tǒng)內(nèi)核的經(jīng)歷,會(huì)通過(guò)編譯源代碼來(lái)安裝軟件. 如果你具備了這些條件,那么做這樣一個(gè)小系統(tǒng)會(huì)很順利,如果你還沒(méi)有掌握這些知識(shí),你可能會(huì)遇到一些困難.但是只要有毅力,也可以成功.你不需要具備編程的知識(shí),因?yàn)槲业哪繕?biāo)是:讓具有中等以上linux水平的愛(ài)好者可以通過(guò)閱讀文檔輕松完成這個(gè)項(xiàng)目.關(guān)于一張軟盤(pán)上的linux還有一個(gè)很著名的 linux叫LOAP (Linux On A
Floppy) 但是他是由比較專(zhuān)業(yè)的人員需要編寫(xiě)很多程序完成的.而且沒(méi)有關(guān)于他制作過(guò)程的文檔.
五,linux系統(tǒng)引導(dǎo)過(guò)程簡(jiǎn)介
首先,主板的BIOS會(huì)讀取硬盤(pán)的主引導(dǎo)記錄(MBR),MBR中存放的是一段很小的程序,他的功能是從硬盤(pán)讀取操作系統(tǒng)核心文件并運(yùn)行,因?yàn)檫@個(gè)小程序太小了,因此通常這個(gè)小程序不具備直接引導(dǎo)系統(tǒng)內(nèi)核的能力,他先去引導(dǎo)另一個(gè)稍微大一點(diǎn)的小程序,再由這個(gè)大一點(diǎn)的小程序去引導(dǎo)系統(tǒng)內(nèi)核.在linux系統(tǒng)中這樣的小程序有LILO和GRUB.在這個(gè)項(xiàng)目中,我決定用LILO來(lái)做系統(tǒng)引導(dǎo)程序.在軟盤(pán)上啟動(dòng)linux系統(tǒng)的過(guò)程和在硬盤(pán)上啟動(dòng)的過(guò)程相似.
Linux系統(tǒng)內(nèi)核被引導(dǎo)程序裝入內(nèi)核并運(yùn)行后,linux內(nèi)核會(huì)檢測(cè)系統(tǒng)中的各種硬件.并做好各種硬件的初始化工作,使他們?cè)谙到y(tǒng)正式運(yùn)行后能正常工作.之后內(nèi)核做的最后一個(gè)工作是運(yùn)行
/sbin 下的init程序,init是英文單詞initialization(初始化)的簡(jiǎn)稱(chēng),init程序的工作是讀取/etc/inittab文件中描述的指令,對(duì)系統(tǒng)的各種軟硬件環(huán)境做最初化設(shè)定.最后運(yùn)行mingetty等待用戶(hù)輸入用戶(hù)名登錄系統(tǒng).所有的工作就這么簡(jiǎn)單,雖然linux啟動(dòng)的時(shí)候有很多內(nèi)容,看上去十分高深,但是都不過(guò)是對(duì)這個(gè)過(guò)程的擴(kuò)充.明白了這個(gè)道理,你可以寫(xiě)一些腳本程序讓他在系統(tǒng)啟動(dòng)的特定時(shí)間運(yùn)行完成任務(wù).事實(shí)上系統(tǒng)內(nèi)核并不關(guān)心/sbin下的init是不是真的init,只要是放在/sbin下名叫init的可執(zhí)行程序他都可以執(zhí)行.可以做以下實(shí)驗(yàn):
編寫(xiě)一個(gè)非常簡(jiǎn)單的C程序:
main()
{
printf(“hello,world!\n”);
}
保存后以init.c保存他,并用gcc編譯.
#gcc –-static -o init init.c
這里的--static 參數(shù)告訴gcc把這個(gè)程序靜態(tài)聯(lián)接,這樣這個(gè)程序不倚賴(lài)任何庫(kù)就能運(yùn)行.把編譯好的init程序拷貝到/sbin下,備份好原來(lái)的那個(gè).重新啟動(dòng)系統(tǒng)最后系統(tǒng)的輸出結(jié)果是: hello,world!
然后停在那里.做這個(gè)實(shí)驗(yàn)以前先確定你知道如何把系統(tǒng)恢復(fù)到原來(lái)的狀態(tài),有一個(gè)簡(jiǎn)單的方法,在內(nèi)核啟動(dòng)前給他加上init=參數(shù),比如你原先的init被你改成了init.bak 只要在啟動(dòng)的時(shí)候給內(nèi)核加上init=/sbin/init.bak就可以用原來(lái)的init程序啟動(dòng)系統(tǒng).
做完以上實(shí)驗(yàn),就明白了內(nèi)核和init程序之間的關(guān)系.此外,init程序不一定是一個(gè)二進(jìn)制可執(zhí)行程序,他可以是一個(gè)bash腳本,一個(gè)指向另一個(gè)程序的聯(lián)接,他的位置也并不一定要在/sbin下,只要在啟動(dòng)內(nèi)核時(shí),給內(nèi)核加上init參數(shù)就能被運(yùn)行,比如,開(kāi)始時(shí)給內(nèi)核加上init= /bin/bash參數(shù),內(nèi)核在最后一步就直接運(yùn)行bash給出提示符,不用登錄系統(tǒng)就可以輸入命令了.其功能類(lèi)似單用戶(hù)模式啟動(dòng)系統(tǒng). /sbin/init 程序只是內(nèi)核默認(rèn)運(yùn)行的第一個(gè)程序.
評(píng)論
查看更多