新聞中心

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

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

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

個(gè)人認(rèn)為這個(gè)功能是非常重要的,所以編譯了進(jìn)去.

RAM disk support 即內(nèi)存磁盤(比較貼切的說法是虛擬磁盤,即撥出一部分內(nèi)存當(dāng)做磁盤用).這是制作babylinux項(xiàng)目中的核心內(nèi)容,由于一張軟盤的空間有限, babylinux的根文件系統(tǒng)是用gzip壓縮法高度壓縮的,在運(yùn)行時(shí),將解壓縮后的文件拷貝到一個(gè)RAM disk運(yùn)行,所以在運(yùn)行時(shí),你在根文件系統(tǒng)上的所有操作實(shí)際上是在內(nèi)存上進(jìn)行的.但是在形式上和在真正的磁盤上運(yùn)行一樣.只不過放在RAM disk上的所有內(nèi)容會(huì)在系統(tǒng)關(guān)機(jī)后全部消失.

不僅在運(yùn)行babylinux時(shí)用到ramdisk,我們在制作壓縮的根文件系統(tǒng)時(shí)也要用到ramdisk,學(xué)習(xí)ramdisk的使用是做一個(gè)babylinux的重要目的之一. 在linux中,還支持另外一種虛擬磁盤,叫做shm,

(shared memory),這種虛擬磁盤機(jī)制比ramdisk更加先進(jìn),ramdisk的大小是固定的,由編譯內(nèi)核時(shí)候的default ram disk size 決定.默認(rèn)為4096K(4M),也可以在內(nèi)核裝載前加上ramdisk_size=參數(shù)來決定他的大小,但是系統(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通常用來作為系統(tǒng)的磁盤高速緩存,存放系統(tǒng)運(yùn)行中的臨時(shí)文件等.redaht 的linux在默認(rèn)情況下都有shm的支持,可以用mount和df察看他的掛裝點(diǎn)和大小,如下命令:

[root@gucuiwen linux]# mount

/dev/hda1 on / type ext3 (rw)

none on /proc type proc (rw)

usbdevfs on /proc/bus/usb type usbdevfs (rw)

none on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/hda6 on /home type ext3 (rw)

/dev/hda5 on /oracle type ext3 (rw)

none on /dev/shm type tmpfs (rw)

/dev/hda7 on /var type ext3 (rw)

[root@gucuiwen linux]# df -h

文件系統(tǒng) 容量 已用 可用 已用% 掛載點(diǎn)

/dev/hda1 2.9G 2.7G 26M 100% /

/dev/hda6 3.8G 1.8G 1.8G 50% /home

/dev/hda5 5.7G 677M 4.8G 13% /oracle

none 125M 0 125M 0% /dev/shm

/dev/hda7 711M 91M 584M 14% /var

雖然shm有這么多的優(yōu)點(diǎn),我還是選擇了ramdisk,因?yàn)閞amdisk可以很方便地在系統(tǒng)啟動(dòng)的時(shí)候加載,而shm卻沒那么容易,下面就來講一下關(guān)于內(nèi)核啟動(dòng)時(shí)加載ramdisk映象的相關(guān)內(nèi)容.

initial RAM disk (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)用的是ext3,而你沒有把ext3編譯進(jìn)內(nèi)核,而只作為一個(gè)模塊編譯了,那么就需要用 mkinitrd命令做一個(gè)initrd (initializtion ramdisk),這個(gè)ramdisk里放了ext3的模塊,這樣內(nèi)核在加載根文件系統(tǒng)前就能正確識(shí)別ext3文件系統(tǒng).否則,內(nèi)核加載的最后一步就會(huì)出現(xiàn)kernel panic cant not find init .... 的錯(cuò)誤.

在babylinux項(xiàng)目中,這個(gè)選項(xiàng)是必需的,這里的作用是把解壓的根文件系統(tǒng)映象裝入ramdisk.

Per partition statics in /proc/partitions

這個(gè)選項(xiàng)不是必需的,但是我發(fā)現(xiàn)如果我不把這個(gè)功能編譯進(jìn)內(nèi)核,那么當(dāng)我在掛裝文件系統(tǒng)的時(shí)候會(huì)有些小問題,比如我不能以簡寫的掛裝命令來掛裝文件系統(tǒng). 我不確定到底是不是這個(gè)選項(xiàng)的關(guān)系,但是把這個(gè)選項(xiàng)編譯進(jìn)內(nèi)核只增大一點(diǎn)點(diǎn)內(nèi)核空間,所以為了避免麻煩,我把他編譯了進(jìn)去.

Multi-device support (RAID and LVM)

Cryptography support (CryptoAPI)

這兩個(gè)大項(xiàng)全部選擇N,因?yàn)樵趥€(gè)人用PC上,及少牽涉到這兩項(xiàng),如果你真的有RAID設(shè)備或者LVM,那么就自己摸索著配置一下吧.

Networking options

這一大項(xiàng)中,只需要把下列項(xiàng)目編譯進(jìn)內(nèi)核:

Packet socket :mmapped IO

TCP/IP networking

對于IP:advanced router這項(xiàng),如果你想重點(diǎn)把babylinux用做靜態(tài)路由軟件,那么把這項(xiàng)編譯進(jìn)去,而對于network packet filtering (replaces ipchains)這一項(xiàng),沒有必要編譯進(jìn)去了,因?yàn)閎usybox沒有提供iptables工具來設(shè)置包過濾防火墻.同樣,unix domain sockets這項(xiàng)也不必選擇,只有運(yùn)行X的情況下才需要選這項(xiàng).

Telephony Support 選擇N

ATA/IDE/MFM/RLL support

選擇Y,然后下面的'IDE,ATA and ATAPI Block Devices'按鈕就被激活

下面幾項(xiàng)請選擇Y,其余都可以是N.

Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support

Include IDE/ATA-2 DISK support

Auto-Geometry Resizing support

Include IDE/ATA CDROM support

如果你的內(nèi)核要運(yùn)行在一臺(tái)很老的pentium或486上,請把CMD640 chipset bugfix/support編譯進(jìn)去,因?yàn)槟菚r(shí)候主板的CMD640 IDE控制芯片大多有莫名其妙的BUG,把這項(xiàng)編譯進(jìn)去會(huì)修復(fù)這個(gè)bug.

下面幾個(gè)大項(xiàng):

SCSI support

Fusion MPT device support

IEEE 1394(FireWire) support

I2O device support

全部選擇N,這里可能有你想要的好東西,比如1394接口驅(qū)動(dòng),但是在babylinux上意義不大,而且我們的空間只有1440K.

下面一個(gè)大項(xiàng):

Network device support

選擇Y,這樣就可以支持網(wǎng)卡了,其余都選擇N.然后點(diǎn)Ethernet(10 or 100 Mbit)按鈕選擇你需要的網(wǎng)卡驅(qū)動(dòng),你可以把最常見的幾種Reltek8139,NE2000,3COM等網(wǎng)卡編譯進(jìn)內(nèi)核.雖然網(wǎng)卡的驅(qū)動(dòng)通常都很小, 但是不要太貪心,選2~3個(gè)就足夠了,否則你的內(nèi)核就會(huì)一下子多出幾十K.在我先前編譯的babylinux內(nèi)核中,我把via-rhine網(wǎng)卡編譯了進(jìn)去,是因?yàn)槲掖蛟靊abylinux的機(jī)器上只有一塊那個(gè)芯片的網(wǎng)卡.

如果你發(fā)現(xiàn)你需要的網(wǎng)卡是灰色的,不能點(diǎn),那么先確定他上一級的選項(xiàng)已經(jīng)點(diǎn)了,比如你想選NE2000的網(wǎng)卡,就必需先選擇ELSA,VLB,PCI and on board controllers.如果還不能點(diǎn),那么請確定是否已經(jīng)把PCI的支持選項(xiàng)選上了,(在Geneal setup)里.沒有PCI的支持,PCI的網(wǎng)卡將不能選.

可能你是個(gè)有錢人,在自己的PC上用千兆網(wǎng)卡,那么請?jiān)谇д拙W(wǎng)卡那一欄選擇.



關(guān)鍵詞:

評論


相關(guān)推薦

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

關(guān)閉