最小的Linux操作系統(tǒng)制作過(guò)程詳解_第1頁(yè)
最小的Linux操作系統(tǒng)制作過(guò)程詳解_第2頁(yè)
最小的Linux操作系統(tǒng)制作過(guò)程詳解_第3頁(yè)
最小的Linux操作系統(tǒng)制作過(guò)程詳解_第4頁(yè)
最小的Linux操作系統(tǒng)制作過(guò)程詳解_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余27頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、最小的Linux操作系統(tǒng)制作過(guò)程詳解一,什么是BabyLinuxBabyLinux不是一個(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è)剛剛出生的小bab

2、y。二.為什么要作這樣一個(gè)linux先說(shuō)說(shuō)我一開(kāi)始的想法,當(dāng)我一開(kāi)始接觸linux的時(shí)候,看到書(shū)上說(shuō),linux通常安裝只需要60M左右的空間,但是我發(fā)現(xiàn)裝在我硬盤(pán)上的Redhat6.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)最

3、大的意義在于,你可以通過(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)閱讀LinuxFromScratch(LFS)文檔。三,什么人適合讀這篇文檔如果你是一個(gè)linux愛(ài)好者,并且很想了解linux的啟動(dòng)過(guò)程和系統(tǒng)的基本結(jié)構(gòu),而且是一個(gè)喜歡動(dòng)手研究小玩意的人,那么這個(gè)文檔可以滿足你的需求。如果你僅僅是用linux來(lái)做一些普通的日常工作,而不在乎你的linux到底怎么工作,那么這份文檔也許不太適合你。另外,如果你是linux

4、愛(ài)好者,但是目前還是一個(gè)剛剛?cè)腴T(mén)的newbi,我建議你先把linux命令學(xué)好。不過(guò)我想我會(huì)盡可能的把這份文檔寫(xiě)詳細(xì)一些,如果你有足夠的毅力,或許一個(gè)newbi也能成功做一個(gè)babylinux。或者,你遇到一件很不巧的事情,比如你的老婆來(lái)例假了,你的這個(gè)周末就泡湯了,那么閱讀這篇文檔并做一個(gè)linux小玩具可以打發(fā)你的時(shí)問(wèn)。四,應(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ì)遇到一些困難。但是只要有毅力

5、,也可以成功。你不需要具備編程的知識(shí),因?yàn)槲业哪繕?biāo)是:讓具有中等以上linux水平的愛(ài)好者可以通過(guò)閱讀文檔輕松完成這個(gè)項(xiàng)目。關(guān)于一張軟盤(pán)上的linux還有一個(gè)很著名的linux叫LOAP(LinuxOnAFloppy)但是他是由比較專(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)核。

6、在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等待用戶輸入用戶名登錄系統(tǒng)。所有的工作就這么簡(jiǎn)單,

7、雖然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("hhellon");保存后以initoc保存他,并用gcc編譯。#gccstatic-oinitinit。c這里的-static參數(shù)告訴gcc把這個(gè)程序靜態(tài)聯(lián)接,這樣這個(gè)程序不倚賴(lài)任何庫(kù)就能運(yùn)行。把編譯好的init程序拷貝到/sb

8、in下,備份好原來(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被你改成了initobak只要在啟動(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)行,比如,

9、開(kāi)始時(shí)給內(nèi)核加上init=/bin/bash參數(shù),內(nèi)核在最后一步就直接運(yùn)行bash給出提示符,不用登錄系統(tǒng)就可以輸入命令了。其功能類(lèi)似單用戶模式啟動(dòng)系統(tǒng)。/sbin/init程序只是內(nèi)核默認(rèn)運(yùn)行的第一個(gè)程序。六,編譯一個(gè)linux系統(tǒng)內(nèi)核1,編譯前的規(guī)劃和準(zhǔn)備在編譯內(nèi)核前,請(qǐng)先確定你的需求,把你的需求羅列成一張?jiān)敿?xì)的表格。你需要讓內(nèi)核支持什么硬件,支持多少種分區(qū)類(lèi)型和文件系統(tǒng),支持哪些網(wǎng)卡,支持哪些網(wǎng)絡(luò)協(xié)議。等等。請(qǐng)盡可能詳細(xì)的羅列這些內(nèi)容,但是你也不要太貪心,因?yàn)槟闼心芾玫目臻g只有1440K,如果你編譯出一個(gè)大于1440K或很接近這個(gè)數(shù)字的內(nèi)核,你的這個(gè)項(xiàng)目就不能完成了,你已經(jīng)沒(méi)有空間再

10、放ramdisk映象文件,除非你原意再多出一張軟盤(pán),做一個(gè)兩張軟盤(pán)的小linux系統(tǒng)。對(duì)于聲卡驅(qū)動(dòng)之類(lèi),我勸你還是放棄吧,因?yàn)橐粋€(gè)聲卡驅(qū)動(dòng)也許只讓你的內(nèi)核增大了十多K,但是你有了一個(gè)聲卡驅(qū)動(dòng)就務(wù)必要有一個(gè)播放器吧,否則聲卡驅(qū)動(dòng)就沒(méi)有意義,可一個(gè)播放器的大小可不是一張軟盤(pán)可以裝得下的。在我先前制作的babylinux內(nèi)核有900多K,其中,文件系統(tǒng)部分站了大部分,因?yàn)槲业哪繕?biāo)是把他做成一個(gè)系統(tǒng)修復(fù)盤(pán)。因此我在內(nèi)核中編譯7種文件系統(tǒng)的支持,每減少一個(gè)文件系統(tǒng)就可以減小幾十甚至200多K的內(nèi)核大小。越是復(fù)雜,越是安全的文件系統(tǒng),其支持模塊也越大,比如在linux下FAT模塊只有32K,VFAT只有1

11、7K,但是ext3的模塊就有86K,JFS達(dá)至U216K,reiserfs模塊是224K,可以想像,編譯一個(gè)支持7個(gè)文件系統(tǒng)的900多K的內(nèi)核,文件系統(tǒng)部分就占了600K以上的空間,所以如果某一個(gè)文件系統(tǒng)是你根本不用的,那么還是不要編譯進(jìn)內(nèi)核把,這樣至少可以省下100多K的空間。對(duì)于其他的驅(qū)動(dòng),比如網(wǎng)卡,通常大小只有8,9K,最大的也不過(guò)10多K,因此可以把常用的網(wǎng)卡芯片的驅(qū)動(dòng)都編譯進(jìn)去。另外如果你想讓你的babylinux支持U盤(pán),那么scsi的驅(qū)動(dòng)模塊也是不可小看的,他通常要接近150K,因?yàn)閁盤(pán)是被當(dāng)做scsi設(shè)備來(lái)驅(qū)動(dòng)的。另外你還需要讓你的內(nèi)核支持即插即用,這些都是不小的空間開(kāi)銷(xiāo),我的

12、建議是你放棄一兩個(gè)你不用的文件系統(tǒng)??傊?,你最后編譯出來(lái)的內(nèi)核大小最好不要超過(guò)900K,否則你在busybox里只能編譯進(jìn)去很少的命令。在我編譯的busybox中,我編譯進(jìn)去120多個(gè)命令,基本上把busybox支持的命令都包括進(jìn)去了。加上小系統(tǒng)所必需的文件系統(tǒng)目錄,/dev下的設(shè)備文件,以及/etc下幾個(gè)必需的配置文件,做成ramdisk壓縮后的大小是440多K,加上900K左右的內(nèi)核剛好可以放入一張1440K軟盤(pán),請(qǐng)注意,你應(yīng)該留下至少50K的空間,因?yàn)槲覀円谲洷P(pán)上創(chuàng)建一個(gè)ext2文件系統(tǒng),而文件系統(tǒng)本生需要占據(jù)大概25K的磁盤(pán)空間。另外lilo的引導(dǎo)文件boot。b的大小是5。7K,還

13、有裝上lilo后自動(dòng)產(chǎn)生的map文件也要10多K的空間,map文件的具體大小由內(nèi)核安裝的實(shí)際大小決定,通常不會(huì)超過(guò)30K。綜上所述,請(qǐng)遵循下面的公式:內(nèi)核大小+文件系統(tǒng)壓縮印象文件+50K<=1440K另外一點(diǎn)需要說(shuō)明的是:以上所羅列的文件系統(tǒng)模塊大小是察看我現(xiàn)在使用的Redhat9的/lib/modules下的模塊文件得到的,實(shí)際編譯進(jìn)內(nèi)核大小會(huì)小一點(diǎn),因?yàn)槲覀冇胢akebzImage在內(nèi)核源代碼目錄樹(shù)下生成的內(nèi)核是經(jīng)過(guò)壓縮過(guò)的。如果你對(duì)以上說(shuō)的內(nèi)容不太明白也沒(méi)有關(guān)系,我會(huì)在下面的內(nèi)容中做詳細(xì)的說(shuō)明。2,必需編譯進(jìn)內(nèi)核的內(nèi)容首先,我們制作的這個(gè)小系統(tǒng)是基于一張軟盤(pán)的,因此,你的內(nèi)核必需

14、支持軟盤(pán)。另外對(duì)IDE硬盤(pán)和cdrom的支持也是不可少的,否則做出來(lái)的babylinux就沒(méi)有實(shí)用價(jià)值,因?yàn)樗荒茉L問(wèn)硬盤(pán)和光盤(pán)上的內(nèi)容這樣的linux雖然可以做的更小,但是制造一個(gè)完全沒(méi)有用的東西是浪費(fèi)時(shí)間。其他的包括framebuffer等,如果你需要支持在字符界面下以高分辨率顯示,以看到更多的屏幕內(nèi)容,那么就必需把framebuffer支持編譯進(jìn)內(nèi)核,此外在高分辨率下使用的8x8字體也必需編譯進(jìn)去。否則即使你給內(nèi)核傳遞了vga=參數(shù),內(nèi)核會(huì)因?yàn)闆](méi)有可用的小字體而自動(dòng)轉(zhuǎn)跳到低分辨率模式下,這是以前困擾我好幾天想不明白的事情,后來(lái)通過(guò)反復(fù)試驗(yàn)才明白原來(lái)是缺少字體的文體。這里我先大致提一下需要

15、注意的事情。在下一小節(jié)具體編譯時(shí),我會(huì)繼續(xù)就某些細(xì)節(jié)問(wèn)題說(shuō)明。3,關(guān)于內(nèi)核的版本我是在Redhat9linux系統(tǒng)下打造的babylinux小系統(tǒng)。使用的是Redhat9自帶的2。4。20版的內(nèi)核。為什么我不用最新的2。6的內(nèi)核?一開(kāi)始我也企圖用最新的內(nèi)核,但是通過(guò)試驗(yàn)我發(fā)現(xiàn),在用最新的2。6。9內(nèi)核的情況下,我編譯一個(gè)all-no的(即所有內(nèi)容都選N,不支持任何硬件,只有一個(gè)最基本的內(nèi)核)最小化內(nèi)核就要460K左右,如果我在這個(gè)基礎(chǔ)上再加入幾種文件系統(tǒng)和必要的驅(qū)動(dòng),那么內(nèi)核的大小就不能裝下一張1440K的軟盤(pán),而我用2。4。20的內(nèi)核編譯一個(gè)最小化的內(nèi)核只需要217K,的大小。如果優(yōu)化了gc

16、c參數(shù)他還能再小些。這樣我就立即省下了200多K的空間,在平時(shí),200多K的內(nèi)容微不足道,但是在babylinux里,這個(gè)數(shù)目是整個(gè)空間的1/7,相當(dāng)于一個(gè)reiserfs文件系統(tǒng)模塊的大小。當(dāng)然,我也嘗試了2。2以及更老的內(nèi)核,但是他們?nèi)鄙傥倚枰臇|西,因此最后權(quán)衡下來(lái)用2。4的內(nèi)核是比較合理的。如果你用的是2。6內(nèi)核的FC系統(tǒng),那么最好還是去下載一個(gè)2。4版的內(nèi)核,www。kernelorg有各個(gè)時(shí)期的內(nèi)核可以下載。4,內(nèi)核的配置如果你對(duì)linux內(nèi)核的配置和編譯已經(jīng)很熟悉了,請(qǐng)?zhí)^(guò)這一段,直接看busybox的編譯。以root身份登錄系統(tǒng)進(jìn)入/usr/src/linux目錄rootguc

17、uiwenroot#cd/usr/src/linux如果你下載了一個(gè)2。4版本的內(nèi)核,為了避免麻煩,請(qǐng)將他拷貝到/usr/src下,然后接壓縮,再做一個(gè)指向他的名為linux的鏈接。雖然這并不是必需的,但是根據(jù)我以往的經(jīng)驗(yàn),如果我把linux源代碼放在其他目錄下解開(kāi)并編譯,偶然會(huì)有一些莫名其妙的小問(wèn)題發(fā)生。#cplinux-2。4。20。bz2/usr/src/#cd/usr/src#tarxfvjlinux-2。4。20。bz2如果是tar。gz格式,可以這樣解開(kāi)#tarxfvzlinux-2。4。20。tar。gz為了方便,做一個(gè)到目錄linux-2。4。20的連接:#ln-slinux-

18、2。4。20linux進(jìn)入linux源代碼目錄:#cdlinux清理源代碼樹(shù):#makemrproper運(yùn)行配置程序:#makexconfigcodematurityleveloptions先選擇N,當(dāng)我們配置好常規(guī)的東西,要加入framebuffer支持時(shí)再將這一項(xiàng)選擇Y,因?yàn)樵?。4。20中,framebuffer支持尚屬于實(shí)驗(yàn)性代碼。如果不在codematurityleveloptions選擇為Y,將不能配置framebuffer。Loadablemodulesupport選才¥N,為了簡(jiǎn)化系統(tǒng)的制作,我在這個(gè)項(xiàng)目中不選擇可加載內(nèi)核模塊的支持。processortypeandf

19、eaturesprocessorfamily中選擇你需要的CPU類(lèi)型,如果你想讓老至386,新到P4的CPU都能運(yùn)行babaylinux那么請(qǐng)選擇386CPU,否則請(qǐng)按自己的實(shí)際情況選擇。其他選項(xiàng)都選擇No這些在babylinux中都是不需要的。Generalsetupnetworkingsupport選擇YPCIsupport選才¥Y除非你不用PCI設(shè)備,不過(guò)一般人都是需要的,因?yàn)楝F(xiàn)在網(wǎng)卡大部分是PCI的。SystemVipc選擇Ysystrlsupport選擇YkernelsupportforELF選擇Y其余內(nèi)容都可以選擇N,如果有特殊需求,比如的網(wǎng)卡是ISA的,那么請(qǐng)將相應(yīng)的內(nèi)

20、容選上。但是不能貪心,時(shí)刻牢記,我們能利用的空間只有1440K,內(nèi)核的大小絕不能超過(guò)900K,任何不必要的東西都應(yīng)該從內(nèi)核中去除。memorytechnologydevices(MTD)ParallelportsupportPlugandPlayconfiguration以上三個(gè)大項(xiàng)中的所有內(nèi)容選擇NblockdevicesNormalfloppydisksupportLoopbackdevicesupportRAMdisksupportinitialRAMdisk(initrd)supportPerpartitionstaticsin/proc/partitions以上幾項(xiàng)選擇Y,其余全部選

21、擇No這里的選項(xiàng)比較重要,我想重點(diǎn)說(shuō)明一下。對(duì)于軟盤(pán)的支持,那是不必說(shuō)的,那是必備的。loopbackdevice即回環(huán)設(shè)備,我們平時(shí)用命令#mount-oloopsomecdISO/mnt/cdrom掛裝光盤(pán)映象文件,或者其他文件系統(tǒng)映象文件時(shí)就用到了內(nèi)核中的loopback模塊,如果沒(méi)有編譯進(jìn)這個(gè)模塊,你將不能用上面的命令掛裝光盤(pán)映象和文件系統(tǒng)映象。個(gè)人認(rèn)為這個(gè)功能是非常重要的,所以編譯了進(jìn)去。RAMdisksupport即內(nèi)存磁盤(pán)(比較貼切的說(shuō)法是虛擬磁盤(pán),即撥出一部分內(nèi)存當(dāng)做磁盤(pán)用)。這是制作babylinux項(xiàng)目中的核心內(nèi)容,由于一張軟盤(pán)的空間有限,babylinux的根文件系統(tǒng)是用

22、gzip壓縮法高度壓縮的,在運(yùn)行時(shí),將解壓縮后的文件拷貝到一個(gè)RAMdisk運(yùn)行,所以在運(yùn)行時(shí),你在根文件系統(tǒng)上的所有操作實(shí)際上是在內(nèi)存上進(jìn)行的。但是在形式上和在真正的磁盤(pán)上運(yùn)行一樣。只不過(guò)放在RAMdisk上的所有內(nèi)容會(huì)在系統(tǒng)關(guān)機(jī)后全部消失。不僅在運(yùn)行babylinux時(shí)用到ramdisk,我們?cè)谥谱鲏嚎s的根文件系統(tǒng)時(shí)也要用到ramdisk,學(xué)習(xí)ramdisk的使用是做一個(gè)babylinux的重要目的之一。在linux中,還支持另外一種虛擬磁盤(pán),叫做shm,(sharedmemory)這種虛擬磁盤(pán)機(jī)制比ramdisk更加先進(jìn),ramdisk的大小是固定的,由編譯內(nèi)核時(shí)候的defaultram

23、disksize決定。默認(rèn)為4096K(4M),也可以在內(nèi)核裝載前加上ramdisk_size=#數(shù)來(lái)決定他的大小,但是系統(tǒng)一旦啟動(dòng),ramdisk的大小是不能改變的,而shm的大小卻動(dòng)態(tài)的改變。默認(rèn)情況下為物理內(nèi)存的一半,當(dāng)系統(tǒng)需要更多內(nèi)存的時(shí),他就自動(dòng)縮小。系統(tǒng)內(nèi)存富余時(shí),他自動(dòng)增大,這樣可以充分靈活的利用內(nèi)存空間,shm通常用來(lái)作為系統(tǒng)的磁盤(pán)高速緩存,存放系統(tǒng)運(yùn)行中的臨時(shí)文件等。redaht的linux在默認(rèn)情況下都有shm的支持,可以用mount和df察看他的掛裝點(diǎn)和大小,如下命令:rootgucuiwenlinux#mount/dev/hda1on/typeext3(rw)noneo

24、n/proctypeproc(rw)usbdevfson/proc/bus/usbtypeusbdevfs(rw)noneon/dev/ptstypedevpts(rwgid=5,mode=620)/dev/hda6on/hometypeext3(rw)/dev/hda5on/oracletypeext3(rw)noneon/dev/shmtypetmpfs(rw)/dev/hda7on/vartypeext3(rw)rootgucuiwenlinux#df-h文件系統(tǒng)容量已用可用已用掛載點(diǎn)/dev/hda129G2。7G26M100%/dev/hda638G1。8G1。8G50%/home/

25、dev/hda557G677M4。8G13%/oraclenone125M0125M0%/dev/shm/dev/hda7711M91M584M14%/var雖然shm有這么多的優(yōu)點(diǎn),我還是選擇了ramdisk,因?yàn)閞amdisk可以很方便地在系統(tǒng)啟動(dòng)的時(shí)候加載,而shm卻沒(méi)那么容易,下面就來(lái)講一下關(guān)于內(nèi)核啟動(dòng)時(shí)加載ramdisk映象的相關(guān)內(nèi)容。initialRAMdisk(initrd)support即初始化ramdisk上持,這個(gè)選項(xiàng)讓內(nèi)核有能力在內(nèi)核加載階段就能裝入RAMDISK,并運(yùn)行其中的內(nèi)容,否則只能在系統(tǒng)運(yùn)行階段用ramdisk,我們平時(shí)在編譯了一個(gè)新內(nèi)核后,如果你的根文件系統(tǒng)用

26、的是ext3,而你沒(méi)有把ext3編譯進(jìn)內(nèi)核,而只作為一個(gè)模塊編譯了,那么就需要用mkinitrd命令做一個(gè)initrd(initializtionramdisk),這個(gè)ramdisk里放了ext3的模塊,這樣內(nèi)核在加載根文件系統(tǒng)前就能正確識(shí)別ext3文件系統(tǒng)。否則,內(nèi)核加載的最后一步就會(huì)出現(xiàn)kernelpaniccantnotfindinit。的錯(cuò)誤。在babylinux項(xiàng)目中,這個(gè)選項(xiàng)是必需的,這里的作用是把解壓的根文件系統(tǒng)映象裝入ramdiskoPerpartitionstaticsin/proc/partitions這個(gè)選項(xiàng)不是必需的,但是我發(fā)現(xiàn)如果我不把這個(gè)功能編譯進(jìn)內(nèi)核,那么當(dāng)我在掛

27、裝文件系統(tǒng)的時(shí)候會(huì)有些小問(wèn)題,比如我不能以簡(jiǎn)寫(xiě)的掛裝命令來(lái)掛裝文件系統(tǒng)。我不確定到底是不是這個(gè)選項(xiàng)的關(guān)系,但是把這個(gè)選項(xiàng)編譯進(jìn)內(nèi)核只增大一點(diǎn)點(diǎn)內(nèi)核空間,所以為了避免麻煩,我把他編譯了進(jìn)去。Multi-devicesupport(RAIDandLVM)Cryptographysupport(CryptoAPI)這兩個(gè)大項(xiàng)全部選擇N,因?yàn)樵趥€(gè)人用PC上,及少牽涉到這兩項(xiàng),如果你真的有RAID設(shè)備或者LVM,那么就自己摸索著配置一下吧。Networkingoptions這一大項(xiàng)中,只需要把下列項(xiàng)目編譯進(jìn)內(nèi)核Packetsocket:mmappedIOTCP/IPnetworking對(duì)于IP:adva

28、ncedrouter這項(xiàng),如果你想重點(diǎn)把babylinux用做靜態(tài)路由軟件,那么把這項(xiàng)編譯進(jìn)去,而對(duì)于networkpacketfiltering(replacesipchains賤項(xiàng),沒(méi)有必要編譯進(jìn)去了,因?yàn)閎usybox沒(méi)有提供iptables工具來(lái)設(shè)置包過(guò)濾防火墻。同樣,unixdomainsockets這項(xiàng)也不必選擇,只有運(yùn)行X的情況下才需要選這項(xiàng)。TelephonySupport選擇NATA/IDE/MFM/RLLsupport選才¥Y,然后下面的'IDE,ATAandATAPIBlockDevices'按鈕就被激活下面幾項(xiàng)請(qǐng)選擇Y,其余都可以是NoEnha

29、ncedIDE/MFM/RLLdisk/cdrom/tape/floppysupportIncludeIDE/ATA-2DISKsupportAuto-GeometryResizingsupportIncludeIDE/ATACDROMsupport如果你的內(nèi)核要運(yùn)行在一臺(tái)很老的pentium或486上,請(qǐng)把CMD640chipsetbugfix/support編譯進(jìn)去,因?yàn)槟菚r(shí)候主板的CMD640IDE控制芯片大多有莫名其妙的BUG,把這項(xiàng)編譯進(jìn)去會(huì)修復(fù)這個(gè)bug。下面幾個(gè)大項(xiàng):SCSIsupportFusionMPTdevicesupportIEEE1394(FireWire)suppor

30、tI2Odevicesupport全部選擇N,這里可能有你想要的好東西,比如1394接口驅(qū)動(dòng),但是在babylinux上意義不大,而且我們的空間只有1440K。下面一個(gè)大項(xiàng):Networkdevicesupport選才¥Y,這樣就可以支持網(wǎng)卡了,其余都選擇No然后點(diǎn)Ethernet(10or100Mbit)按鈕選擇你需要的網(wǎng)卡驅(qū)動(dòng),你可以把最常見(jiàn)的幾種Reltek8139,NE2000,3COM等網(wǎng)卡編譯進(jìn)內(nèi)核。雖然網(wǎng)卡的驅(qū)動(dòng)通常都很小,但是不要太貪心,選23個(gè)就足夠了,否則你的內(nèi)核就會(huì)一下子多出幾十Ko在我先前編譯的babylinux內(nèi)核中,我把via-rhine網(wǎng)卡編譯了進(jìn)去,是

31、因?yàn)槲掖蛟靊abylinux的機(jī)器上只有一塊那個(gè)芯片的網(wǎng)卡。如果你發(fā)現(xiàn)你需要的網(wǎng)卡是灰色的,不能點(diǎn),那么先確定他上一級(jí)的選項(xiàng)已經(jīng)點(diǎn)了,比如你想選NE2000的網(wǎng)卡,就必需先選擇ELSA,VLB,PCIandonboardcontrollers。如果還不能點(diǎn),那么請(qǐng)確定是否已經(jīng)把PCI的支持選項(xiàng)選上了,(在Genealsetup)!。沒(méi)有PCI的支持,PCI的網(wǎng)卡將不能選。可能你是個(gè)有錢(qián)人,在自己的PC上用千兆網(wǎng)卡,那么請(qǐng)?jiān)谇д拙W(wǎng)卡那一欄選擇。接下來(lái)幾個(gè)大項(xiàng):AmateurRadiosupportIrDA(infrared)supportISDNsubsystemOldCD-ROMdrivers

32、(notSCSI,notIDE)Inputcoresupport全部選擇No接下來(lái)的Charcterdevices是很重要的一項(xiàng),他和Bloackdevices一樣重要,我將重點(diǎn)講述。除了Virtualterminal和Supportforconsoleonterminal兩項(xiàng),其他全選N。Virtualterminal即虛擬終端,這是一般linux必備選項(xiàng)。否則你的linux啟動(dòng)后,在屏幕看不到任何東西。另外還負(fù)責(zé)鍵盤(pán)輸入信息等等。只有在某些嵌入式linux應(yīng)用場(chǎng)合才會(huì)不要這個(gè)選項(xiàng),因?yàn)檫@些linux通常都不用操作。Supportforconsoleonterminal在虛擬終端上的控制臺(tái)。

33、他支持在終端上各種信息的輸出,這也是必備的。接下來(lái)的幾個(gè)大項(xiàng):MultimediadevicesCryptoHardwaresupport全部選擇No再接下來(lái)的那部分Filesytems可是重頭戲喔。這部分不用我太羅嗦了吧,自己需要支持什么就選什么。但是其中有三個(gè)是你必需選的:/procfilesystemsupport缺了他,很多命令和軟件就不能運(yùn)行。SecondextendedfssupportBabyLinux勺基本文件系統(tǒng)。ISO9660CDROMfilesytemsupport除非你不想用光盤(pán)。另外,諸如磁盤(pán)限額(Quotasupport),Reiserfs的DEBUG模式(Enab

34、lereiserfsdebugmode)等就不用編譯進(jìn)去了。這些東西意義不大,確要無(wú)端的增大內(nèi)核大小。請(qǐng)牢記一點(diǎn):編譯出來(lái)的內(nèi)核大小不要超過(guò)900K。Tip:是不是看的很累啊,我寫(xiě)得更累,別急,內(nèi)核配置部分馬上要好了。最后一個(gè)Consoledrivers這是支持linux在字符模式下高分辨率顯示的內(nèi)核模塊。前面三個(gè)全部選擇Y,Frame-buffersupport按鈕是灰色的不能選,別急,回到第一個(gè)大選項(xiàng):Codematurityleveloptions選擇Y,就可以激活這個(gè)按鈕了下面幾個(gè)選項(xiàng)需要選擇Y:SupportforframebufferdevicesVESAVGAgraphicsco

35、nsole你也可以選擇其他的顯卡驅(qū)動(dòng),比如nVidia的,但是VESA和VGA是通用性最好的,只要不是幾十年前的黑白顯卡(我只聽(tīng)說(shuō)過(guò),沒(méi)見(jiàn)過(guò)),都兼容VESA和VGA,因此,為了制作好的BabyLinux的通用性,請(qǐng)選擇這個(gè)驅(qū)動(dòng)。Supportonly8pixelswidefonts這個(gè)一定要選,否當(dāng)你給內(nèi)核傳遞vga=788參數(shù),讓linux在字符界面下高分辨率顯示的時(shí)候,系統(tǒng)會(huì)因?yàn)檎也坏胶线m的小字體而返回到低分辨率模式。好了!所有內(nèi)核的配置工作到這里就全部完成了,剩下的幾個(gè)大項(xiàng)全部選N就行了。保存后退出,配置程序會(huì)自動(dòng)生成一個(gè)隱藏的配置文件。config下面是我配置好的。config文件內(nèi)

36、容。如果你懶的自己去配置,那么直接把這個(gè)。config拷貝到你的源代碼目錄下就能直接用了。(已經(jīng)去掉了#開(kāi)頭的注釋行)CONFIG_X86=yCONFIG_UID16=yCONFIG_EXPERIMENTAL=yCONFIG_M586=yCONFIG_X86_WP_WORKS_OK=yCONFIG_X86_INVLPG=yCONFIG_X86_CMPXCHG=yCONFIG_X86_XADD=yCONFIG_X86_BSWAP=yCONFIG_X86_POPAD_OK=yCONFIG_RWSEM_XCHGADD_ALGORITHM=yCONFIG_X86_L1_CACHE_SHIFT=5CON

37、FIG_X86_USE_STRING_486=yCONFIG_X86_ALIGNMENT_16=yCONFIG_X86_PPRO_FENCE=yCONFIG_NOHIGHMEM=yCONFIG_NET=yCONFIG_PCI=yCONFIG_PCI_GODIRECT=yCONFIG_PCI_DIRECT=yCONFIG_SYSVIPC=yCONFIG_SYSCTL=yCONFIG_KCORE_ELF=yCONFIG_BINFMT_ELF=yCONFIG_BLK_DEV_FD=yCONFIG_BLK_DEV_LOOP=yCONFIG_BLK_DEV_RAM=yCONFIG_BLK_DEV_RAM

38、_SIZE=4096CONFIG_BLK_DEV_INITRD=yCONFIG_PACKET=yCONFIG_INET=yCONFIG_IP_MULTICAST=yCONFIG_IDE=yCONFIG_BLK_DEV_IDE=yCONFIG_BLK_DEV_IDEDISK=yCONFIG_IDEDISK_MULTI_MODE=yCONFIG_BLK_DEV_IDECD=yCONFIG_BLK_DEV_IDE_MODES=yCONFIG_NETDEVICES=yCONFIG_NET_ETHERNET=yCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT

39、_MOUSEDEV_SCREEN_Y=768CONFIG_VT=yCONFIG_VT_CONSOLE=yCONFIG_REISERFS_FS=yCONFIG_EXT3_FS=yCONFIG_JBD=yCONFIG_FAT_FS=yCONFIG_VFAT_FS=yCONFIG_RAMFS=yCONFIG_ISO9660_FS=yCONFIG_JFS_FS=yCONFIG_NTFS_FS=yCONFIG_PROC_FS=yCONFIG_EXT2_FS=yCONFIG_MSDOS_PARTITION=yCONFIG_NLS=yCONFIG_NLS_DEFAULT="iso8859-1&qu

40、ot;CONFIG_VGA_CONSOLE=yCONFIG_VIDEO_SELECT=yCONFIG_VIDEO_IGNORE_BAD_MODE=yCONFIG_FB=yCONFIG_DUMMY_CONSOLE=yCONFIG_FB_VESA=yCONFIG_VIDEO_SELECT=yCONFIG_FBCON_CFB8=yCONFIG_FBCON_CFB16=yCONFIG_FBCON_CFB24=yCONFIG_FBCON_CFB32=yCONFIG_FBCON_FONTWIDTH8_ONLY=yCONFIG_FONT_8x8=yCONFIG_FONT_8x16=y5,編譯內(nèi)核#maked

41、ep#makebzImage下面是最后編譯結(jié)果:Bootsector512bytesSetupis4733bytesSystemis845kBmake1:Leavingdirectory'/usr/src/linux-2。4。20-8/arch/i386/boot'我用上面的配置得到了一個(gè)845k的內(nèi)核。編譯好的內(nèi)核放在/usr/src/linux-204。20-8/arch/i386/boot下。將他拷貝在一個(gè)安全的地方備用。建立一個(gè)專(zhuān)放babylinux材料的目錄#mkdir/babylinux建立一個(gè)做babylinux根文件系統(tǒng)的目錄#mkdir/babylinux/r

42、ootfs備份內(nèi)核#cp/usr/src/linux-2o4。20-8/arch/i386/boot/bzImage/babylinux/七,編譯busybox1, busybox簡(jiǎn)介busybox是一個(gè)集成了一百多個(gè)最常用linux命令和工具的軟件,他甚至還集成了一個(gè)http服務(wù)器和一個(gè)telnet服務(wù)器,而所有這一切功能卻只有區(qū)區(qū)1M左右的大小。我們平時(shí)用的那些linux命令就好比是分力式的電子元件,而busybox就好比是一個(gè)集成電路,把常用的工具和命令集成壓縮在一個(gè)可執(zhí)行文件里,功能基本不變,而大小卻小很多倍,在嵌入式linux應(yīng)用中,busybox有非常廣的應(yīng)用,另外,大多數(shù)linu

43、x發(fā)行版的安裝程序中都有busybox的身影,安裝linux的時(shí)候案ctrl+alt+F2就能得到一個(gè)控制臺(tái),而這個(gè)控制臺(tái)中的所有命令都是指向busybox的鏈接。Busybox的小身材大作用的特性,給制作一張軟盤(pán)的linux帶來(lái)了及大方便。2, busybox的用法可以這樣用busybox#busyboxls他的功能就相當(dāng)運(yùn)行l(wèi)s命令最常用的用法是建立指向busybox的鏈接,不同的鏈接名完成不同的功能。# ln-sbusyboxls# ln-sbusyboxrm# ln-sbusyboxmkdir然后分別運(yùn)行這三個(gè)鏈接:# 。/ls# 。/rm# o/mkdir就可以分別完成了lsrm和m

44、kdir命令的功能。雖然他們都指向同一個(gè)可執(zhí)行程序busybox但是只要鏈接名不同,完成的功能就不同,busybox就是這么的神奇。很多l(xiāng)inux網(wǎng)站都提供busybox的源代碼下載。目前版本是busyboxl。0正式版。3,配置busyboxbusybox的配置程序和linux內(nèi)核菜單配置方式簡(jiǎn)直一模一樣。熟悉用makemenucon巾g方式配置linux內(nèi)核的朋友很容易上手。# cpbusybox-1。00。tar。gz/babylinux# cd/babylinux# tarxvfzbusybox-1。00。tar。gz# cdbusybox-1。00#makemenuconfig下面是

45、需要編譯進(jìn)busybox的功能選項(xiàng),其他的可以根據(jù)需要自選,但是同樣不要太貪心。GeneralConfiguration應(yīng)該選的選項(xiàng)ShowverboseappletusagemessagesRuntimeSUID/SGIDconfigurationvia/etc/busybox。confBuildOptionsBuildBusyBoxasastaticbinary(nosharedlibs)這個(gè)選項(xiàng)是一定要選擇的,這樣才能把busybox編譯成靜態(tài)鏈接的可執(zhí)行文件,運(yùn)行時(shí)才獨(dú)立于其他函數(shù)庫(kù)。否則必需要其他庫(kù)文件才能運(yùn)行,在單一個(gè)linux內(nèi)核不能使他正常工作。InstallationOpti

46、onsDon'tuse/usr這個(gè)選項(xiàng)也一定要選,否則makeinstall后busybox將安裝在原系統(tǒng)的/usr下,這將覆蓋掉系統(tǒng)原有的命令。選擇這個(gè)選項(xiàng)后,makeinstall后會(huì)在busybox目錄下生成一個(gè)叫Jnstall的目錄,里面有busybox和指向他的鏈接。其他選項(xiàng)都是一些linux基本命令選項(xiàng),自己需要哪些命令就編譯進(jìn)去,一般用默認(rèn)的就可以了。配置好后退出并保存4,編譯并安裝busybox#make#makeinstall編譯好后在busybox目錄下生成子目錄_install,里面的內(nèi)容:drwxr-xr-x2rootroot409611月2415:28binl

47、rwxrwxrwx1rootroot1111月2415:28linuxrc->bin/busyboxdrwxr-xr-x2rootroot409611月2415:28sbin其中可執(zhí)行文件busybox在bin目錄下,其他的都是指向他的符號(hào)鏈接。我編譯出來(lái)的busybox可執(zhí)行文件是935K,加上符號(hào)鏈接,整個(gè)_install目錄是952K。加上845K的內(nèi)核不是已經(jīng)超過(guò)1440K了嗎?別擔(dān)心,我們將對(duì)整個(gè)根文件系統(tǒng)做大幅度的壓縮。八,制作根文件系統(tǒng)1,基本目錄結(jié)構(gòu)#cd/babylinux/rootfs#mkdiretcusrvartmpprochomerootdev其中etc,pro

48、c和dev是一定要建的,bin和sbin不用建,因?yàn)閎usybox中已經(jīng)有了。其他的可以象征性的建幾個(gè)就可以了??截恇usybox# cp-R/babylinux/busybox-1。00/_install/*/babylinux/rootfs/2,建立設(shè)備文件名# cd/babylinux/rootfs/dev你可以用mknod手工建立,也可以直接從原系統(tǒng)的/dev目錄下拷貝過(guò)來(lái)。手工建立的方法:# ls-l/dev/consolecrw1rootroot5,111月3009:02/dev/console這樣就查看到了console設(shè)備的主設(shè)備號(hào)是5,輔設(shè)備號(hào)是1,是一個(gè)標(biāo)記為C的字符設(shè)備。

49、于是,我們可以用mknod建立一個(gè)同樣的設(shè)備文件:#mknodconsolec51但是手工方法建立太麻煩了,通常直接從/dev下把需要的設(shè)備文件拷貝過(guò)來(lái)這些設(shè)備文件是特殊文件,在拷貝時(shí)一定要加上-R參數(shù)才能拷貝。# cp-R/dev/console。/# cp-R/dev/null。/# cp-R/dev/zero。/000以下是我認(rèn)為需要的設(shè)備名:cdromfd0hda14hda4hdb11hdb19hdchdc16hdc6hdd13hdd3loop2ram2consolefd0H1440hda15hda5hdb12hdb2hdc1hdc17hdc7hdd14hdd4loop3tty0fbh

50、dahda16hda6hdb13hdb3hdc10hdc18hdc8hdd15hdd5loop4tty1fb0hda1hda17hda7hdb14hdb4hdc11hdc19hddhdd16hdd6loop5tty2fb1hda10hda18hda8hdb15hdb5hdc12hdc2hdd1hdd17hdd7nulltty3fb2hda11hda19hdbhdb16hdb6hdc13hdc3hdd10hdd18hdd8ramtty4fb3hda12hda2hdb1hdb17hdb7hdc14hdc4hdd11hdd19initctlram0tty5fb4hda13hda3hdb10hdb18

51、hdb8hdc15hdc5hdd12hdd2loop1ram1zero其中,fd0,hda,ram,ram1,tty1,null,zero,loop1,fb0,fb等是必備的。其它的hda,hda1,hdb等可以根據(jù)實(shí)際需要決定。但是上表中的選擇是比較合理的,即能滿足大部分的需要,有沒(méi)有不用的設(shè)備浪費(fèi)空間。注意,千萬(wàn)不要把/dev下的設(shè)備全拷貝過(guò)來(lái),那將產(chǎn)生大約420K的/dev目錄,這對(duì)babylinux來(lái)說(shuō)太大了。3,建立etc目錄下的配置文件busybox。confgroupinittabmotdpasswdresolvconfshadow-fstabinitodissuemtabpro

52、fileshadow其中init。d是一個(gè)目錄,從busybox-1。00源代碼目錄下拷貝過(guò)來(lái)。# cp-R/babylinux/busybox-1。00/examples/bootflopyp/etc/init。d/babylinux/rootfs/etc/busybox。conf一個(gè)空文件。其他文件的內(nèi)容如下:fstab/dev/fd0/ext2defaults00none/procprocdefaults00/dev/cdrom/mnt/cdromudf,iso9660noauto,owner,kudzu,ro00/dev/fd0/mnt/floppyautonoauto,owner,k

53、udzu00grouproot:x:0:rootinittab二sysinit:/etc/init。d/rcS:askfirst:/bin/shtty2:respawn:/bin/getty38400tty2tty3:respawn:/bin/getty38400tty3tty4:respawn:/bin/getty38400tty4# Stufftodowhenrestartingtheinitprocess:restart:/bin/init# Stufftodobeforerebooting:ctrlaltdel:/bin/reboot:shutdown:/bin/umount-a-r:

54、shutdown:/bin/swapoff-aissueBabyLinuxrelease01motdmtabpasswdroot:0:0:root:/root:/bin/ashprofile# /etc/profile:filefilefortheBourneshellsechoechoexportPS1="uhw$"echo"Done"aliasll='ls-l'aliasdu='du-h'aliasdf='df-h'aliasrm='rm-i'echores

55、olvoconfnameserver20296。209。5nameserver20296。209。6shadowroot:$1$adltAB9Sr/MSKqylIvSJT/:12705:0:99999:7:shadow-root:$1$DWU。tenP$B7ANiXoGoiZMwJR6Ih8810:12705:0:99999:7二:其中有很多是從原系統(tǒng)的/etc下拷貝過(guò)來(lái)修改的,如果你是一個(gè)具有中等以上水平的linux愛(ài)好者,那么應(yīng)該一看就明白了,當(dāng)然,你也可以根據(jù)自己的需要修改這些文件。其中最重要的是fstab和inittab,busybox內(nèi)建的init程序用到的inittab文件的語(yǔ)法和

56、一般的不一樣,不能直接把原系統(tǒng)/etc下inittab文件拷貝過(guò)來(lái)??梢园裝usybox-1。00目錄下的示例文件拷貝過(guò)來(lái)修改用。具體請(qǐng)看busybox的文檔。busybox的init也可以不用inittab。但是在我制作babylinux過(guò)程中有一個(gè)非常奇怪的bug。所有/sbin下的busybox鏈接在做成壓縮的根文件系統(tǒng),解壓后都不能正常運(yùn)行,顯示找不到該命令。只有當(dāng)我在/bin下做這些鏈接時(shí)才能運(yùn)行。具體原因還不太清除,所以你需要做下面的工作:#cd/babylinux/rootfs/sbin#lschrootgettyifconfiglosetuppivot_rootrebootsw

57、apoffsysctlfdiskhaltinitmkswappoweroffrouteswapontelnetd查看到sbin下有上述屣接轉(zhuǎn)到bin下#cd/babylinux/rootfs/bin重新做這些鏈接:# ln-sbusyboxchroot# ln-sbusyboxgetty# ln-sbusyboxifconfig000然后把sbin下的鏈接刪除,以節(jié)省空間# rm-rf/babylinux/rootfs/sbin/*再把原先inittab中所有的sbin改成bininit。d下的文件:rcS請(qǐng)確保這個(gè)文件是可執(zhí)行的,否則請(qǐng)改成可執(zhí)行的:# chmodu+xrcSrcS的內(nèi)容:# !/bin/shmount-oremount,rw/bin/mount-a>/etc/mtabechoechoechoechoecho-en"ttWelcomto0330;32mBabyLinux0330;39mn"echo-en"033

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論