新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 最小的Linux系統(tǒng)制作過程詳解

最小的Linux系統(tǒng)制作過程詳解

作者: 時(shí)間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

在我編譯的busybox中,我編譯進(jìn)去120多個(gè)命令,基本上把busybox支持的命令都包括進(jìn)去了.加上小系統(tǒng)所必需的文件系統(tǒng)目錄,/dev下的設(shè)備文件,以及/etc下幾個(gè)必需的配置文件,做成ramdisk壓縮后的大小是440多K, 加上900K左右的內(nèi)核剛好可以放入一張1440K軟盤,請(qǐng)注意,你應(yīng)該留下至少50K的空間,因?yàn)槲覀円谲洷P上創(chuàng)建一個(gè)ext2文件系統(tǒng),而文件系統(tǒng)本生需要占據(jù)大概25K的磁盤空間.另外lilo的引導(dǎo)文件boot.b的大小是5.7K,還有裝上lilo后自動(dòng)產(chǎn)生的map文件也要10多K的空間, map文件的具體大小由內(nèi)核安裝的實(shí)際大小決定,通常不會(huì)超過30K.

綜上所述,請(qǐng)遵循下面的公式:

內(nèi)核大小+文件系統(tǒng)壓縮印象文件+50K = 1440K

另外一點(diǎn)需要說明的是:以上所羅列的文件系統(tǒng)模塊大小是察看我現(xiàn)在使用的Redhat 9 的

/lib/modules下的模塊文件得到的,實(shí)際編譯進(jìn)內(nèi)核大小會(huì)小一點(diǎn),因?yàn)槲覀冇胢ake bzImage

在內(nèi)核源代碼目錄樹下生成的內(nèi)核是經(jīng)過壓縮過的.

如果你對(duì)以上說的內(nèi)容不太明白也沒有關(guān)系,我會(huì)在下面的內(nèi)容中做詳細(xì)的說明.

2,必需編譯進(jìn)內(nèi)核的內(nèi)容

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

3,關(guān)于內(nèi)核的版本

我是在Redhat 9 linux系統(tǒng)下打造的babylinux小系統(tǒng).使用的是Redhat 9 自帶的2.4.20版的內(nèi)核.

為什么我不用最新的2.6的內(nèi)核?

一開始我也企圖用最新的內(nèi)核,但是通過試驗(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

的軟盤,而我用2.4.20的內(nèi)核編譯一個(gè)最小化的內(nèi)核只需要217K,的大小.如果優(yōu)化了gcc參數(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)衡下來用2.4的內(nèi)核是比較合理的.如果你用的是2.6內(nèi)核的FC系統(tǒng),那么最好還是去下載一個(gè)2.4版的內(nèi)核,www.kernel.org 有各個(gè)時(shí)期的內(nèi)核可以下載.

4, 內(nèi)核的配置

如果你對(duì)linux內(nèi)核的配置和編譯已經(jīng)很熟悉了,請(qǐng)?zhí)^這一段,直接看busybox的編譯.

以root身份登錄系統(tǒng)

進(jìn)入/usr/src/linux目錄

[root@gucuiwen root]# cd /usr/src/linux

如果你下載了一個(gè)2.4版本的內(nèi)核,為了避免麻煩,請(qǐng)將他拷貝到/usr/src下,然后接壓縮,再做一個(gè)指向他的名為linux的鏈接.雖然這并不是必需的,但是根據(jù)我以往的經(jīng)驗(yàn),如果我把linux源代碼放在其他目錄下解開并編譯,偶然會(huì)有一些莫名其妙的小問題發(fā)生.

#cp linux-2.4.20.bz2 /usr/src/

#cd /usr/src

#tar xfvj linux-2.4.20.bz2

如果是tar.gz格式,可以這樣解開

#tar xfvz linux-2.4.20.tar.gz

為了方便,做一個(gè)到目錄linux-2.4.20的連接:

#ln -s linux-2.4.20 linux

進(jìn)入linux源代碼目錄:

#cd linux

清理源代碼樹:

#make mrproper

運(yùn)行配置程序:

#make xconfig

code maturity level options

先選擇N,當(dāng)我們配置好常規(guī)的東西,要加入framebuffer支持時(shí)再將這一項(xiàng)選擇Y,因?yàn)樵?.4.20中,framebuffer支持尚屬于實(shí)驗(yàn)性代碼.如果不在code maturity level options選擇為Y,將不能配置framebuffer.

Loadable module support

選擇N,為了簡化系統(tǒng)的制作,我在這個(gè)項(xiàng)目中不選擇可加載內(nèi)核模塊的支持.

processor type and features

processor family 中選擇你需要的CPU類型,如果你想讓老至386,新到P4的CPU都能運(yùn)行babaylinux那么請(qǐng)選擇386CPU,否則請(qǐng)按自己的實(shí)際情況選擇.

其他選項(xiàng)都選擇N.這些在babylinux中都是不需要的.

General setup

networking support 選擇Y

PCI support 選擇Y 除非你不用PCI設(shè)備,不過一般人都是需要的,因?yàn)楝F(xiàn)在網(wǎng)卡大部分是PCI的.

System V ipc 選擇Y

systrl support選擇Y

kernel support for ELF 選擇Y

其余內(nèi)容都可以選擇N,如果有特殊需求,比如的網(wǎng)卡是ISA的,那么請(qǐng)將相應(yīng)的內(nèi)容選上.但是不能貪心,時(shí)刻牢記,我們能利用的空間只有 1440K ,內(nèi)核的大小絕不能超過 900K,任何不必要的東西都應(yīng)該從內(nèi)核中去除.

memory technology devices (MTD)

Parallel port support

Plug and Play configuration

以上三個(gè)大項(xiàng)中的所有內(nèi)容選擇N

block devices

Normal floppy disk support

Loopback device support

RAM disk support

initial RAM disk (initrd) support

Per partition statics in /proc/partitions

以上幾項(xiàng)選擇Y,其余全部選擇N.

這里的選項(xiàng)比較重要,我想重點(diǎn)說明一下.對(duì)于軟盤的支持,那是不必說的,那是必備的.

loopback device 即回環(huán)設(shè)備,我們平時(shí)用命令

#mount -o loop somecd.ISO /mnt/cdrom

掛裝光盤映象文件,或者其他文件系統(tǒng)映象文件時(shí)就用到了內(nèi)核中的loopback 模塊,如果沒有編譯進(jìn)這個(gè)模塊,你將不能用上面的命令掛裝光盤映象和文件系統(tǒng)映象.



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉