最小的Linux系統(tǒng)制作過程詳解
個人認(rèn)為這個功能是非常重要的,所以編譯了進(jìn)去.
RAM disk support 即內(nèi)存磁盤(比較貼切的說法是虛擬磁盤,即撥出一部分內(nèi)存當(dāng)做磁盤用).這是制作babylinux項目中的核心內(nèi)容,由于一張軟盤的空間有限, babylinux的根文件系統(tǒng)是用gzip壓縮法高度壓縮的,在運(yùn)行時,將解壓縮后的文件拷貝到一個RAM disk運(yùn)行,所以在運(yùn)行時,你在根文件系統(tǒng)上的所有操作實(shí)際上是在內(nèi)存上進(jìn)行的.但是在形式上和在真正的磁盤上運(yùn)行一樣.只不過放在RAM disk上的所有內(nèi)容會在系統(tǒng)關(guān)機(jī)后全部消失.
不僅在運(yùn)行babylinux時用到ramdisk,我們在制作壓縮的根文件系統(tǒng)時也要用到ramdisk,學(xué)習(xí)ramdisk的使用是做一個babylinux的重要目的之一. 在linux中,還支持另外一種虛擬磁盤,叫做shm,
(shared memory),這種虛擬磁盤機(jī)制比ramdisk更加先進(jìn),ramdisk的大小是固定的,由編譯內(nèi)核時候的default ram disk size 決定.默認(rèn)為4096K(4M),也可以在內(nèi)核裝載前加上ramdisk_size=參數(shù)來決定他的大小,但是系統(tǒng)一旦啟動,ramdisk的大小是不能改變的,而shm的大小卻動態(tài)的改變.默認(rèn)情況下為物理內(nèi)存的一半,當(dāng)系統(tǒng)需要更多內(nèi)存的時,他就自動縮小.系統(tǒng)內(nèi)存富余時,他自動增大,這樣可以充分靈活的利用內(nèi)存空間,shm通常用來作為系統(tǒng)的磁盤高速緩存,存放系統(tǒng)運(yùn)行中的臨時文件等.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,因為ramdisk可以很方便地在系統(tǒng)啟動的時候加載,而shm卻沒那么容易,下面就來講一下關(guān)于內(nèi)核啟動時加載ramdisk映象的相關(guān)內(nèi)容.
initial RAM disk (initrd) support
即初始化ramdisk支持,這個選項讓內(nèi)核有能力在內(nèi)核加載階段就能裝入RAMDISK,并運(yùn)行其中的內(nèi)容,否則只能在系統(tǒng)運(yùn)行階段用ramdisk ,我們平時在編譯了一個新內(nèi)核后,如果你的根文件系統(tǒng)用的是ext3,而你沒有把ext3編譯進(jìn)內(nèi)核,而只作為一個模塊編譯了,那么就需要用 mkinitrd命令做一個initrd (initializtion ramdisk),這個ramdisk里放了ext3的模塊,這樣內(nèi)核在加載根文件系統(tǒng)前就能正確識別ext3文件系統(tǒng).否則,內(nèi)核加載的最后一步就會出現(xiàn)kernel panic cant not find init .... 的錯誤.
在babylinux項目中,這個選項是必需的,這里的作用是把解壓的根文件系統(tǒng)映象裝入ramdisk.
Per partition statics in /proc/partitions
這個選項不是必需的,但是我發(fā)現(xiàn)如果我不把這個功能編譯進(jìn)內(nèi)核,那么當(dāng)我在掛裝文件系統(tǒng)的時候會有些小問題,比如我不能以簡寫的掛裝命令來掛裝文件系統(tǒng). 我不確定到底是不是這個選項的關(guān)系,但是把這個選項編譯進(jìn)內(nèi)核只增大一點(diǎn)點(diǎn)內(nèi)核空間,所以為了避免麻煩,我把他編譯了進(jìn)去.
Multi-device support (RAID and LVM)
Cryptography support (CryptoAPI)
這兩個大項全部選擇N,因為在個人用PC上,及少牽涉到這兩項,如果你真的有RAID設(shè)備或者LVM,那么就自己摸索著配置一下吧.
Networking options
這一大項中,只需要把下列項目編譯進(jìn)內(nèi)核:
Packet socket :mmapped IO
TCP/IP networking
對于IP:advanced router這項,如果你想重點(diǎn)把babylinux用做靜態(tài)路由軟件,那么把這項編譯進(jìn)去,而對于network packet filtering (replaces ipchains)這一項,沒有必要編譯進(jìn)去了,因為busybox沒有提供iptables工具來設(shè)置包過濾防火墻.同樣,unix domain sockets這項也不必選擇,只有運(yùn)行X的情況下才需要選這項.
Telephony Support 選擇N
ATA/IDE/MFM/RLL support
選擇Y,然后下面的'IDE,ATA and ATAPI Block Devices'按鈕就被激活
下面幾項請選擇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)行在一臺很老的pentium或486上,請把CMD640 chipset bugfix/support編譯進(jìn)去,因為那時候主板的CMD640 IDE控制芯片大多有莫名其妙的BUG,把這項編譯進(jìn)去會修復(fù)這個bug.
下面幾個大項:
SCSI support
Fusion MPT device support
IEEE 1394(FireWire) support
I2O device support
全部選擇N,這里可能有你想要的好東西,比如1394接口驅(qū)動,但是在babylinux上意義不大,而且我們的空間只有1440K.
下面一個大項:
Network device support
選擇Y,這樣就可以支持網(wǎng)卡了,其余都選擇N.然后點(diǎn)Ethernet(10 or 100 Mbit)按鈕選擇你需要的網(wǎng)卡驅(qū)動,你可以把最常見的幾種Reltek8139,NE2000,3COM等網(wǎng)卡編譯進(jìn)內(nèi)核.雖然網(wǎng)卡的驅(qū)動通常都很小, 但是不要太貪心,選2~3個就足夠了,否則你的內(nèi)核就會一下子多出幾十K.在我先前編譯的babylinux內(nèi)核中,我把via-rhine網(wǎng)卡編譯了進(jìn)去,是因為我打造babylinux的機(jī)器上只有一塊那個芯片的網(wǎng)卡.
如果你發(fā)現(xiàn)你需要的網(wǎng)卡是灰色的,不能點(diǎn),那么先確定他上一級的選項已經(jīng)點(diǎn)了,比如你想選NE2000的網(wǎng)卡,就必需先選擇ELSA,VLB,PCI and on board controllers.如果還不能點(diǎn),那么請確定是否已經(jīng)把PCI的支持選項選上了,(在Geneal setup)里.沒有PCI的支持,PCI的網(wǎng)卡將不能選.
可能你是個有錢人,在自己的PC上用千兆網(wǎng)卡,那么請在千兆網(wǎng)卡那一欄選擇.
評論