打開終端,輸入:cd /usr/src/linux2.4,然後輸入make xconfig.現在編譯內核正式開始了
1.1 “code maturity level options”選項,代表代碼的成熟等級,因為這是一個試驗的部分,我們不需要,所以關閉它。
1.2 “Loadable module support”可加載模塊支持
可加載模塊是指內核代碼(kernel code)的一些片斷,比如驅動程序,當編譯內核的時候它們也被單獨編譯。因此,這些代碼不是內核的一部分,但是當需要它的時候,它可以被加載並使用。內核代碼編譯成可加載模塊,可以使內核更小,而且更穩定。所以裡面的三項我們全選。
1.3 Processor type and features:處理器類型和特色
在這裡,你可以選擇你的處理器(Processor)的類型,決定是否選擇不同的選項。通常“/dev/cpu”選項更高級,多數用戶並不需要選擇它。 “High Memory Support”只有當你的計算機有超過1GB內存(不是磁盤空間)時才是必須的。多數計算機的內存從64到512MB(並且擁有8到60GB硬盤空間),因此“High Memory Support”通常並不使用。實際上現在所有的處理器都集成了浮點運算單元(譯者注:從586級開始所有CPU集成了浮點運算單元),所以通常你可以不選擇這個選項。 “MTRR”選項允許在PCI或者AGP總線眾進行更快速的通訊。由於現在所有系統都將它們的顯卡接在PCI或AGP總線上,你通常需要選擇 “MTRR”:無論如何,打開這個選項通常都是安全的——即使你的機器沒有使用 PCI或AGP總線的顯卡。對稱多處理器(SMP)需要能夠支持超過一個處理器的主板,比如一塊支持雙Pentium II處理器的主板。 “Symmetric multi-processing”選項保證內核能夠以最佳方式加載雙處理器。最後一個選項(“APIC”選項)通常也需要多處理器,但它通常是關閉的。所以在這一欄我只選了MTRR,其他都不選。
1.4 General setup:常規內核選項。
Networking support,linux網絡支持,必須選上,否則無法編譯內核。
Pci support 因為現在所有系統都使用PCI總線,所以選上。
PCI access mode PCI存取模式,選擇any.
System V IPC 程序通信和同步,選上
BSD process accounting 保持進程結束時產生的錯誤代碼,選上
Sysctl support 允許程序修改某些內核選項而不需要重新編譯內核或者重新啟動計算機,選上
Kernel support for a.out binaries a.out的執行文件是比較古老的可執行代碼,但有些程序還要用上,所以選上
Kernel support for ELF binaries ,現在的可執行程序格式,選上
Power management support 電源管理支持,選上
1.5 Memory Technology Devices (MTD),配置存儲設備(Memory Technology Devices),這個選項使Linux可以讀取閃存卡(Flash Card)之類的存儲器,關閉
1.6 Parallel port support,配置並口(parallel port).在USB技術出現以前,並口是最常用的連接計算機和打印機、掃描儀的方式,關閉
1.7 Plug and Play configuration配置即插即用(PnP)設備.因為我不需要USB設備,所以我關閉這個選項
1.8 Block devices 配置塊設備(block devices)
Normal floppy disk support我要使用軟驅,所以選上
1.9 Multi-device support (RAID and LVM) 配置多驅動器(multiple devices)不需要RAID(廉價冗余磁盤陣列)或者LVM支持,所以全部關閉
1.10 Networking options 網絡配置選項
Packet Socket選項用來與網卡進行通信而不需要在內核中實現網絡協議,選上
Unix domain sockets 進行網絡鏈接,選上
TCP/IP networking此選項包括了Internet和內部網絡所需要的協議。選上
1.11 Telephony Support 電話支持,不需要,關閉
1.12 ATA/IDE/MFM/RLL support 配置對ATA,IDE,MFM和RLL的支持(硬盤的通訊協議)
現在都用ATA,IDE格式硬盤,所以選上
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support,基本上所有的計算機都使用IDE/ATAPI界面,因此選上
Include IDE/ATAPI CDROM support 支持光驅的時候需要,關閉
Include IDE/ATAPI TAPE support 關閉
Include IDE/ATAPI FLOPPY support 關閉
CMD640 chipset bugfix/support 關閉
1.13 SCSI support 配置SCSI支持.沒有SCSI硬盤,也不用USB設備,所以關閉
1.14 Fusion MPT device support 為灰色,系統自動選關閉
1.15 I2O device support 配置I2O設備支持(I2O Device Support)
沒有I2O界面,所以選擇關閉。
1.16 Network device support 配置網卡支持(Network Device Support)
Network device support 在沒有網卡支持的情況下,很難將內核編譯成功,選上
Dummy net driver support(虛擬網卡驅動),系統會經常用到虛擬網卡,選為一個可加載模塊。
Ethernet(10 or 100Mbit)配置以太網卡(Ethernet Device)根據自己的實際情況配置,比如我有一塊3c509/3c529芯片的3com卡,則選3com cards並將3c509/3c529選為可加載模塊
1.17 Amateur Radio support 配置業余廣播支持(Amateur Radio Support)不需要,關閉
1.18 IrDA (infrared) support配置紅外線(無線)通訊支持 不需要,關閉
1.19 ISDN subsystem 配置ISDN.不需要,關閉
1.20 Old CD-ROM drivers (not SCSI, not IDE) 配置老CDROM.沒有老CDROM,關閉
1.21 Input core support 配置Input Core Support. 這個選項提供了2.4.x內核中最重要的特性之一的USB支持。 Input core support是處於內核與一些USB設備之間的層(Layer)。我不需要USB支持,所以,關閉
1.22 Character devices配置字符型設備(Character Devices)
virtual terminal允許在XWindow中打開xterm和使用字符界面登錄,選上
support for console on virtual terminal告訴內核將諸如模塊錯誤、內核錯誤啟動信息之類的警告信息發送到什麼地方,在XWindow下,通常設置一個專門的窗口來接收內核信息,但是在字符界面下,這些信息通常被發送到第一個虛擬終端(Virtual Terminal),所以,選上
standard/generic (8250/16550 and compatible UARTs) serial support,內核支持串行口,選上
mouse support (not serial and bus mice)用的是PS/2鼠標,所以。選上
PS/2 mouse (aka "auxiliary device" support) 用的是PS/2鼠標,所以。選上
unix98 PTY support 使用遠程使用自己機器上的xterm,不需要,關閉
(除此以外的本欄選項,其他的選項全部選擇關閉)
1.23 Multimedia devices 配置多媒體設備“Multimedia Devices”不需要,關閉
1.24 Crypto Hardware suppor,關閉
1.25 File systems配置文件系統(File System)
DOS FAT support windowsNT/2000文件系統,不選擇,關閉
ISO 9660 CDROM file system support 光驅支持,不需要,關閉
/proc file system support /proc目錄中的文件包含了關於系統狀態的許多重要信息,比如那些中斷正在使用 所以選擇,打開
Second extended fs support此選項針對Linux的標准文件系統(Ext2 FS) 必須打開這個選項,所以,打開
UDF file system support不需要,關閉
Network file systems假如計算機處於一個需要使用Network file systems選項的大型網絡之中,否則不需要,所以,關閉
Partition Types此選項是一個很高級但對於有效的使用Linux內核來說並不必要的選項,關閉
native language support在這個菜單中,可以選擇那些編碼將被Linux用來處理DOS和Windows下的文件名,因為剛才選擇了不支持DOS 和WINDOWS,所以,關閉
1.26 Console drivers 配置控制台驅動,
VGA text console選項在VGA模式下啟動字符模式,打開
video mode selection support此選項使啟動的時候能夠使用字符模式的分辨率,不需要,關閉
1.27 sound 聲卡配置
根據自己的聲卡選擇相關的驅動,比如我的是nforce系列的聲卡,所以我就選擇了這一個系列的。
1.28 USB support配置USB支持
因為我將USB驅動關閉了,所以我比需要配置USB支持,所以,關閉
1.29 Kernel hacking 配置“kernel hacking”選項系統默認
1.30 Save and Exit 保存並退出
(注:沒有提到的選項,安系統默認選項)
1.31 在終端輸入命令make dep (讀取配置過程生成的配置文件,創建對應於配置的依賴關系樹)
1.32 make clean (完成刪除前面步驟留下的文件,以避免出現一些錯誤)
1.33 make bzImage (完全編譯壓縮內核)
到此,裁減內核就完成了,這個內核大小是740k
boot/root盤由兩部分組成,即核心和根文件系統。要把這兩部分都放到一個1.44MB的軟盤上去,通常要對內核和根文件系統進行壓縮,壓縮核心的最好方法是進行重新編譯內核,將一些不必要的支持去掉,這一步我們已經完成了,下面我們是做一個根文件系統的壓縮包。對於根文件系統的壓縮包括兩方面的問題,第一是只保留必要的根文件系統組件,第二是將根文件系統做成一個壓縮包,類似於內核工作的原理。
根文件系統概述 一個根文件系統必須包括支持完整Linux系統的全部東西,它至少應包括以下幾項: ?基本文件系統結構
?至少含有以下目錄:/dev、 /proc、 /bin、 /etc、 /lib、 /usr、 /tmp
?最基本的應用程序,如sh、 ls、 cp、 mv等
?最低限度的配置文件,如rc、 inittab、 fstab等
?設備:/dev/hd*、 /dev/tty*、 /dev/fd0
?基本程序運行所需的庫函數 以上所需文件一般情況下會超過1.44M,因此我們是先准備好內容後再壓縮到軟盤中,當用軟盤啟動時,再把文件解壓到內存中,形成一個虛擬盤(RAMDISK),通過RAMDISK控制系統啟動。為了能創建以上的根文件系統,必須有一個空閒的能夠放下大約4MB文件的RAMDISK。系統缺省情況下已替我們建好了一個大小為4096KB的RAMDISK,其設備名一般為/dev/ram0,我們就使用它來保存我們預先准備好的根文件系統。
創建根文件系統
(1)在終端輸入命令:mke2fs -m 0 -i 2000 /dev/ram0,這樣就創建了一個 虛擬盤 mke2fs將會自動判斷設備容量的大小並相應地配置自身,-m 0 參數防止它給root保留空間,這樣會騰出更多的有用空間。
(2)接著把虛擬盤掛在節點/mnt上:
在終端輸入命令:mount -t ext2 /dev/ram0 /mnt/floppy
(3) 接著是創建目錄。根文件系統最少應該有如下8個目錄:
/dev — 設備
/proc — proc 文件系統所需目錄
/etc — 系統配置文件
/sbin — 重要的系統程序
/bin — 基本應用程序
/lib — 共享函數庫
/mnt — 裝載其他磁盤節點
/usr — 附加應用程序
執行如下命令創建這些目錄:
#cd /mnt/floppy
#mkdir dev proc etc sbin bin lib mnt usr
(4)接下來的工作就是確定各個目錄下的內容了:
/dev:/dev中含有系統不可缺少的設備文件。用命令:
cp –dpr /dev/{console,fd0.hda,hda8,hda9,hda10,initctl,initrd,kmem,mem,null,ram,ram0,ramdisj,sda,tty1,tty} /mnt/flopp/dev/ 將console,fd0.hda,hda8,hda9,hda10,initctl,kmem,mem,null,ram,ram0,ramdisj, sda, tty1,tty等必須的設備文件復制到dev文件夾中。
其中參數-dpr是為了保證連接文件仍然不變。
Console為系統控制台設備,非常重要;
Fd0,第一個軟驅;
Had,hda8,hda9,hda10 為硬盤設備,其中hda8,hda9,hda10不是必須的;
Initctl 為一個FIFO設備,和init有關;
Initrd 初始化設備;
Kmem 內核虛擬內存;
Mem 訪問物理內存;
Null null設備;
Ram ram disk 設備,是/dev/ram0應用initrd機制所必須的;
Tty 當前tty設備;
?/etc:這個目錄中含有一些必不可少的系統配置文件。用命令:
cp /etc/{default,ld.so.cache,ld.so.conf,login.defs,fstab,groub,init.d,inittab,issue,modules.conf,mtab,nsswitch.conf,pam.d,profile,rc.d} /mnt/floppy/etc/ 將文件default,ld.so.cache,ld.so.conf,login.defs,fstab,groub,init.d,inittab, issue,modules.conf,mtab,nsswitch.conf,pam.d,profile,rc.d復制到當前文件夾etc下面。
Default 某個命令的缺省設置;
Ld.so.cache 由idconfig命令根據/etc/id.so.conf文件產生;
ld.so.conf 庫文件路徑配置文件;
login.defs 全局缺省設置;
fstab 文件系統列表,
fstab應包括:
/dev/ram0 / ext2 defaults
/dev/fd0 / ext2 defaults
/proc /proc proc defaults
init.d符號連接到/etc/rc.d/init.d
inittab init配置文件
inittab包括:
id:2:initdefault:
si::sysinit:/etc/rc
1:2345:respawn:/sbin/getty 9600 tty1
2:23:respawn:/sbin/getty 9600 tty2
modules.conf 模塊的配置文件
mtab 已經掛載的文件系統列表
nsswitch.conf name service switch 的配置文件
pam.d放置PAM配置文件的目錄
profile 系統環境變量和登陸配置文件
rc.d 放置啟動腳本的目錄
/bin和/sbin:該目錄中包含有必不可少的應用程序,在該目錄下放置 init, getty,login, mount,以次來運行rc的外殼shell。
/lib: 該目錄中包含有你的啟動盤啟動過程中所需要的共享函數庫。
幾乎所有的程序都需要libc庫,列一下目錄/lib中的libc:
libext2fs.so.2,libcom_err.so.2,libuuid.so.1,libc.so.6,ld-linux.so.2 ,libnss_files*,pam_unix.so
(5)打包
完成了上述工作,卸下虛擬盤,拷貝到一個文件中,然後壓縮。
umount /mnt
dd if=/dev/ram0 bs=1k | gzip -v9>gj.gz
壓縮結束後,就擁有了一個壓縮的根文件系統,這個壓縮文件的名字叫gi.gz,檢查它的大小,如果大了,還得刪除一些東西。
第三:組織引導盤
有了根文件系統和內核之後,最後的工作就是把它們組織在一起。
接下來創建一個內核文件系統。把一張干淨的軟盤插入軟驅,在上面創建ext2文件系統。
相繼在shell中輸入命令:
mke2fs /dev/fd0 (創建文件系統)
mount /dev/fd0 /mnt/floppy(掛載軟盤)
rm -rf /mnt/floppy/lost+found(刪除系統生成的文件夾)
mkdir /mnt/floppy{boot,dev}(創建兩個文件夾)
mkdir /mnt/floppy/boot/grub
再執行:
cp -R /dev/{null,fd0} /mnt/floppy/dev
cp /boot/grub/stage1 /mnt/floppy/boot/grub
cp /boot/grub/stage2 /mnt/floppy/boot/grub
接著拷貝啟動加載器boot.b到目錄/boot中,
cp /boot/boot.b /mnt/floppy/boot
把grub引導寫到軟盤上面
#grub
在 grub>; 提示符處,輸入:
grub>; root (fd0)
grub>; setup (fd0)
grub>; quit
寫完引導後
#cp vmlinuz-jou /mnt/floppy/boot (復制內核到boot文件夾下)
#cp gj.gz /mnt/floppy/boot (復制壓縮文件系統到boot文件夾下)
#cp /boot/grub/grub.conf /mnt/floppy/boot/grub (把引導配置文件復制到grub下面)
編輯grub.conf, 內容如下:
timeout 10
default 0
title My little Linux
root (fd0)
kernel /boot/vmlinuz-jou ro root=/dev/ram0
initrd /boot/ gj.gz
然後制作grub.conf的link文件menu.lst
#ln -s /mnt/floppy/boot/grub/grub.conf /mnt/floppy/boot/grub/menu.lst
#umount /mnt/floppy(退出軟盤)
制作完成!