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












評論