請注意,本文主要針對核心 2.4.xx 版本進行說明∼ |
這個『核心』是除了 BIOS 之外,一個作業系統中最早被啟動的東西,他包含了所有可以讓硬體與軟體工作的資訊,所以,如果沒有搞定核心的話,那麼你的系統肯定會有點小問題!好了,那麼是不是將『所有目前核心有支援的東西都給他編譯進去我的核心中,那就可以支援目前所有的硬體與可執行的工作啦!』,這話說的是沒錯啦,但是你是否曾經看過一個為了怕自己今天出門會口渴、會餓、會冷、會熱、會被車撞、會摔跤、會被性騷擾,而在自己的大包包裡面放了大瓶礦泉水、便當、厚外套、短褲、防撞鋼樑、止滑墊、電擊棒....等一大堆東西,結果卻累死在半路上的案例嗎?當然有!但是很少啦!我相信不太有人會這樣做!(會這麼做的人通常都已經在醫院了∼)取而代之的是會看一下天氣,冷了就只帶外套,熱了就只帶短衣、如果穿的漂亮一點又預計晚點回家就多帶個電擊棒、出遠門到沒有便利商店的地方才多帶礦泉水....說這個幹什麼!對啦!就是要您瞭解到,核心的編譯重點在於『你要你的 Linux 作什麼?』,是啦!如果沒有必要的工作,就乾脆不要加在你的核心當中了!這樣才能讓你的 Linux 跑得更穩、更順暢!這也是為什麼我們要編譯核心的最主要原因了!
說到這裡突然想到以前國軍研究的『經國號戰鬥機』事件,在當時,經國號裡頭的配備都是『最棒的!』包括測量儀器、瞄準配備、武器系統等等,但是呢,卻配上一部普普通通的客機用引擎!挖哩ㄌㄟ?最早期試飛的時候,經國號竟然只能『在跑道上滑行!』真是悲哀!同樣的道理, Linux 的核心也是這樣的,如果你的硬體與核心之間沒有辦法達到良好的配合,那麼 Linux 確實可能會跑得不很順暢!!
Linux 的核心有幾個主要的特色,除了『Kernel 可以隨時、隨各人喜好而更動』之外,Kernel 的『版本更動次數太頻繁』也是一個特點!所以囉,除非你有特殊需求,否則一次編譯成功就可以啦!不需要隨時保持最新的核心版本,而且也沒有必要(編譯一次核心要粉久的ㄋㄟ!)。話說到這裡又突然想到今天看到的一篇文章,大意是說老闆想要雇用的人會希望是 Linux 的老手,因為他們比較容易瞭解問題的所在,除此之外,如果有任何問題發生,由於其使用 Linux 是可以隨時修補漏洞的!但是如果是 Windows 的話,就得要將機器關閉,直到 MS 推出修補套件後才能再啟用∼
那麼是否『我就一定需要在安裝好了 Linux 之後就趕緊給他編譯核心呢?』,老實說,『並不需要的』!這是因為幾乎在每一個 distribution 當中,他們已經預設好了相當大量的模組了,所以幾乎使用者常常或者可能會使用到的資料都已經被編譯成為模組(這個『模組』的意義後面會再解釋),也因此,呵呵!我們使用者確實不太需要重新來編譯核心!尤其是『一般的使用者,由於系統已經將核心編譯的相當的適合一般使用者使用了,因此一般入門的使用者,基本上,不太需要編譯核心』。OK!那麼鳥哥閒閒沒事幹跑來寫個什麼東西?既然都不需要編譯核心還寫編譯核心的分享文章,鳥哥賣弄才學呀!?很抱歉, VBird 雖然是個『不學有術』的混混,卻也不會平白無故的寫東西要您來指教∼當然是有需要才會來編譯核心啦!編譯核心的時機可以歸納為幾大類:
- 新功能的需求:我需要新的功能,而這個功能只有在新的核心裡面才有,那麼為了獲得這個功能,只好來重新編譯我的核心了(例如 iptables 這個防火牆機制只有在 2.4.xx 版本裡面才有,而新出產的 AGP 顯示卡,很多也需要新的核心推出之後,才能正常而且有效率的工作!)再舉個例子,在之前的 Red Hat 7.2 的版本中,由於預設是將 CD-ROM 編譯成核心的『模組』,也就是說,核心本身還沒有支援 CD-ROM 的功能,必須要掛上模組之後才能使用與讀取這個 CD-ROM !是否覺得很麻煩呢?呵呵!那麼這個時候,如果你想要直接讓 kernel 支援 CD ROM 的話,就得要重新編譯核心囉;
- 原本核心太過臃腫:如果您是那種對於系統『穩定性』很要求的人,那麼對於核心多編譯了很多莫名其妙的功能而不太喜歡的時候,那麼就可以重新編譯核心來取消掉該功能囉;
- 與硬體的搭配穩定性:由於原本 Linux 的核心大多是針對 Intel 的 CPU 來作開發的,所以如果你的 CPU 是 AMD 的系統時,有可能(注意!只是有可能,不見得一定會如此)會讓系統跑得『不太穩!』就 VBird 的經驗來看,使用舊的 Pentum 系列的舊機器安裝 Linux 的結果,還沒有胡亂當機的經驗!但是安裝在 K6-2, K6-3 上面的 Linux ,通常需要重新編譯一下核心會比較穩定一些!
另外,需要注意重新編譯核心雖然可以針對你的硬體作最佳化的步驟(例如剛剛提到的 CPU 的問題!),不過由於這些最佳化的步驟對於整體效能的影響可能還不到百分之五,因此如果是為了增加效能來編譯核心的話,基本上,效益不大!然而,如果是針對『系統穩定性』來考量的話,那麼就有絕對充分的理由來支持您重新編譯核心囉!
- 其他:就是你需要特殊的環境需求時,就得自行設計你的核心囉!(像是一些商業的套裝軟體系統,由於需要較為乾淨的作業系統,那麼他們的核心就需要更簡潔有力了!)
『如果系統已經運行很久了,而且也沒有什麼大問題,加上我又不增加冷門的硬體設備,那麼建議就不需要重新編譯核心了!』,因為重新編譯核心的最主要目的是『想讓系統變的更穩!』既然您的 Linux 主機已經達到這個目的了,何必再編譯核心?不過,就如同前面提到的,由於預設的核心不見得適合您的需要,加上預設的核心可能並無法與您的硬體配備相配合,所以 VBird 通常都是『一安裝完 Linux ,第一個動作(在還沒有進行任何的設定之前,也沒有上網,也沒有更新套件等等,反正就是安裝完畢 Linux ,第一次進入 Shell 時!)立刻就是以最新版本的 kernel 重新編譯一個屬於我這部主機的核心!』以讓我的核心都能夠相當的符合我的硬體配備,讓系統運作的更順暢!
然而由於『核心的主要工作是在控制硬體!』所以編譯核心之前,請先瞭解一下您的硬體配備,與您這部主機的未來功能!由於核心是『越簡單越好!』所以只要將這部主機的未來功能給他編進去就好了!其他的就不用去理他啦!
請特別留意!不同版本的核心之間,最好不要互相升級!否則及容易發生問題!例如: Red Hat 6.x 使用的是 2.2.xx 版本的核心,那麼就不要使用 2.4.xx 的核心來編譯他!如果誤用的話,很有可能造成您系統上面的服務無法正常的工作!還請特別留意呢!
[test @test
test]# uname -r
2.4.7-10 <==這個是 Red Hat 7.2 的預設核心版本! |
1. 下載核心:
[root @test /root]# wget http://aerosol.ev.ncku.edu.tw/~vbird/download/linux-2.4.18.tar.gz <==由本站下載核心 --02:55:31-- http://aerosol.ev.ncku.edu.tw/%7Evbird/download/linux-2.4.18.tar.gz => `linux-2.4.18.tar.gz' Connecting to aerosol.ev.ncku.edu.tw:80... connected! HTTP request sent, awaiting response... 200 OK Length: 30,108,170 [application/x-gzip]
0K .......... .......... .......... .......... .......... 0% @
49.65 KB/s
最後在您的 /root 底下會產生一個名為 linux-2.4.18.tar.gz 的檔案!那就適合新的 source 了! 2. 解壓縮:
|
需要比較留意的是,核心所放置的地點『一定是 /usr/src/linux』這一個目錄,然而由於不論哪一版核心編譯都是這一個目錄底下編譯的,所以我個人相當的建議將每一版的核心都使用不同的目錄來指定,然後以 link 的方式將該目錄 link 到 linux 就可以啦!較為簡單而且明瞭!底下的動作請都在 /usr/src/linux 底下進行呦!
[root @test
linux]# make mrproper
...... 會顯示相當多的 rm 去除檔案的訊息.... |
好了!現在您就已經具有相當完整的 Kernel source code 囉!接著下來則是選擇編譯模式咯!
[root @test linux]# make menuconfig |
出現如下圖示:
看到上面的圖示之後,你會發現有兩個畫面,一個是大框框內的反白光柱,另一個則是底下的
Select, Exit, 與 Help 游標,這幾個元件的用法如下:
[root @test
linux]# make mrproper
<==去除 .o 的編譯過的檔案
[root @test linux]# make menuconfig <==以文字選單的模式進行編譯! 底下開始編譯! Code maturity level options ---> <==關於核心測試功能的 code 開啟項目; [ ] Prompt for development and/or incomplete code/drivers <==因為我們沒有要研發核心,所以不選 Loadable module support ---> <==這個就是我們之前說的『模組』啦! [*] Enable loadable module support <==讓核心可以載入模組項目(必選) [ ] Set version information on all module symbols <==這個除非你要使用舊版本的資料,通常不選! [*] Kernel module loader <==也是必選啦! Processor type and features ---> <==選擇 CPU 的型號項目 (Pentium-MMX) Processor family <==請依照您的實際情況選擇您的 CPU 型號 < > Toshiba Laptop support <==底下這兩個有使用到(筆記型電腦)才選擇! < > Dell laptop support <M> /dev/cpu/microcode - Intel IA32 CPU microcode support <==如果是使用 Intel 的,可以編譯成模組 <M> /dev/cpu/*/msr - Model-specific register support <==如果是使用 Intel 的,可以編譯成模組 <M> /dev/cpu/*/cpuid - CPU information support <==如果是使用 Intel 的,可以編譯成模組 (off) High Memory Support <==這個東西跟你的 RAM 有關係,RAM小於 1 GB 則使用 off 即可 [ ] Math emulation <==是否需要數值模擬?當然不需要!我們的 CPU 都夠強了! [ ] MTRR (Memory Type Range Register) support <==P6 (PII等級以上) 並且要跑 X-Window 才加上吧,與 AGP 有關 [ ] Symmetric multi-processing support <==如果是雙 CPU 的主機板才選擇!否則就不要選了! [*] Local APIC support on uniprocessors (NEW) <==如果你的 CPU 有支援 APIC 則選擇!通常可以選擇起來啦! [*] IO-APIC support on uniprocessors <==跟上面的理由一致!選擇起來吧! General setup ---> <==一般設定部分 [*] Networking support <==底下四個一定要選,跟基本的硬體裝置有關! [*] PCI support (Any) PCI access mode [*] PCI device name database [ ] EISA support <==底下這兩個則與主機板上面的插槽有關!除非筆記型,否則不選 [ ] MCA support [*] Support for hot-pluggable devices <==有點類似隨插即用吧!可以選擇呦! PCMCIA/CardBus support ---> < > PCMCIA/CardBus support <==因為我沒有筆記型,所以不選,若為筆記型電腦,請選擇! PCI Hotplug Support ---> [*] System V IPC <==底下這三個東西對於效能都不錯!可以選擇呦! [*] BSD Process Accounting [*] Sysctl support (ELF) Kernel core (/proc/kcore) format <==底下這幾個東西可以編譯成模組啦!但是我直接編到核心囉! <*> Kernel support for a.out binaries <*> Kernel support for ELF binaries <*> Kernel support for MISC binari [*] Power Management support < > Advanced Power Management BIOS support <==如果你想要你的 BIOS 接管電源管理,可以選擇!我是不選的啦! Memory Technology Devices (MTD) ---> < > Memory Technology Device (MTD) support <==沒必要就不要選吧! Parallel port support ---> < > Parallel port support <==由於我的主機上面並沒有接印表機,所以沒選!如果你有印表機的話,一定要選擇 Plug and Play configuration ---> <*> Plug and Play support <==底下兩個 隨插即用! 馬上勾選! <*> ISA Plug and Play support Block devices ---> <==一些比較冷門的儲存機器!如果不確定的話,直接編譯成模組吧!沒關係的! <*> Normal PC floppy disk support < > XT hard disk support < > Compaq SMART2 support < > Compaq Smart Array 5xxx support < > Mylex DAC960/DAC1100 PCI RAID Controller support < > Loopback device support < > Network block device support < > RAM disk support Multi-device support (RAID and LVM) ---> [ ] Multiple devices driver support (RAID and LVM) <==除非要完 RAID (磁碟陣列)與 LVM ,否則不用選! Networking options ---> <==這一部份是最重要的除非特別強調,否則能編成模組就編成模組! <*> Packet socket [*] Packet socket: mmapped IO <M> Netlink device emulation (NEW) [*] Network packet filtering (replaces ipchains) [ ] Network packet filtering debugging (NEW) [*] Socket Filtering <*> Unix domain sockets [*] TCP/IP networking [*] IP: multicasting [*] IP: advanced router [*] IP: policy routing (NEW) [*] IP: use netfilter MARK value as routing key (NEW) [*] IP: fast network address translation (NEW) [*] IP: equal cost multipath (NEW) [*] IP: use TOS value as routing key (NEW) [*] IP: verbose route monitoring (NEW) [ ] IP: large routing tables (NEW) [*] IP: kernel level autoconfiguration [*] IP: DHCP support (NEW) [*] IP: BOOTP support (NEW) [*] IP: RARP support (NEW) <M> IP: tunneling <M> IP: GRE tunnels over IP [*] IP: broadcast GRE over IP (NEW) [*] IP: multicast routing [*] IP: PIM-SM version 1 support (NEW) [*] IP: PIM-SM version 2 support (NEW) [*] IP: TCP Explicit Congestion Notification support [*] IP: TCP syncookie support (disabled per default) IP: Netfilter Configuration ---> <==這就是防火牆機制裡頭的 iptables 啦!都編成模組! <M> Connection tracking (required for masq/NAT) (NEW) <M> FTP protocol support (NEW) <M> IRC protocol support (NEW) <M> IP tables support (required for filtering/masq/NAT) (NEW) <M> limit match support (NEW) <M> MAC address match support (NEW) <M> netfilter MARK match support (NEW) <M> Multiple port match support (NEW) <M> TOS match support (NEW) <M> AH/ESP match support (NEW) <M> LENGTH match support (NEW) <M> TTL match support (NEW) <M> tcpmss match support (NEW) <M> Connection state match support (NEW) <M> Packet filtering (NEW) <M> REJECT target support (NEW) <M> Full NAT (NEW) <M> MASQUERADE target support (NEW) <M> REDIRECT target support (NEW) <M> Packet mangling (NEW) <M> TOS target support (NEW) <M> MARK target support (NEW) <M> LOG target support (NEW) <M> TCPMSS target support (NEW) <M> ipchains (2.2-style) support (NEW) <M> ipfwadm (2.0-style) support (NEW) <M> The IPX protocol [ ] IPX: Full internal IPX network (NEW) < > Appletalk protocol support < > DECnet Support < > 802.1d Ethernet Bridging QoS and/or fair queueing ---> [ ] QoS and/or fair queueing Telephony Support ---> <==這東西我也不知道怎麼玩∼∼ < > Linux telephony support ATA/IDE/MFM/RLL support ---> <==儲存界面的選擇!當然 IDE 一定要選的啦!! 裡面如果有看到屬於您的晶片組,請記得將他選擇起來!例如如果使用 VIA 的晶片組,那麼最後一項VIA82CXXX chipset support就一定要選擇起來呢!如果你是跟 VBird 一樣,使用較老舊的主機板,那麼就用系統預設值也就可以了! <*> ATA/IDE/MFM/RLL support IDE, ATA and ATAPI Block devices ---> <*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support <*> Include IDE/ATA-2 DISK support [*] Use multi-mode by default <*> Include IDE/ATAPI CDROM support ---- IDE chipset support/bugfixes [*] CMD640 chipset bugfix/support [*] RZ1000 chipset bugfix/support [*] Generic PCI IDE chipset support [*] Sharing PCI IDE interrupts support [*] Generic PCI bus-master DMA support [*] Use PCI DMA by default when available [*] Intel PIIXn chipsets supportt [*] PIIXn Tuning supportt SCSI support ---> <==我的舊機器上並沒有安裝 SCSI 卡!我確定我不會使用到 SCSI ,但是如果你可能會安裝的話,請編譯! < > SCSI support Fusion MPT device support ---> I2O device support ---> < > I2O support Network device support ---> <==仔細的將你的網路設備編譯進來吧!這個也很重要的! [*] Network device support <*> Dummy net driver support <==這個一定要裝!但是請注意!如果你之前已經使用了 MRTG 了!這個裝完之後 MRTG 要重跑一次! <M> Bonding driver support <M> EQL (serial line load balancing) support <M> Universal TUN/TAP device driver support <M> General Instruments Surfboard 1000 Ethernet (10 or 100Mbit) ---> <==這裡面有相當多的卡,我只列出我要的卡而已!請選擇你自己的網路卡呦! [*] Ethernet (10 or 100Mbit) [*] EISA, VLB, PCI and on board controllers <*> EtherExpressPro/100 support <M> RealTek RTL-8139 PCI Fast Ethernet Adapter support [*] Use PIO instead of MMIO [*] Support for older RTL-8129/8130 boards <M> VIA Rhine support <==這就是傳說中的 D-Link 530 那塊卡的驅動程式啦! <*> PPP (point-to-point protocol) support <==這個一定要編進核心!不然就無法使用 ADSL 的 rp-pppoe 撥接囉! [*] PPP filtering (NEW) <M> PPP support for async serial ports (NEW) <M> PPP support for sync tty ports (NEW) <M> PPP Deflate compression (NEW) <M> PPP BSD-Compress compression (NEW) <M> PPP over ATM (EXPERIMENTAL) (NEW) Amateur Radio support ---> <==底下這四個應該不需要安裝吧!? IrDA (infrared) support ---> ISDN subsystem ---> Old CD-ROM drivers (not SCSI, not IDE) ---> Input core support ---> <==這個也編成模組就好囉! <M> Input core support <M> Keyboard support <M> Mouse support (1024) Horizontal screen resolution (NEW) (768) Vertical screen resolution (NEW) <M> Joystick support <M> Event interface support Character devices ---> <==周邊設備的選項!最重要的地方在 AGP 的設定項目!因為我沒有 AGP 所以沒有設定! [*] Virtual terminal [*] Support for console on virtual terminal <*> Standard/generic (8250/16550 and compatible UARTs) serial support [*] Unix98 PTY support <M> Mouse Support (not serial and bus mice) [*] PS/2 mouse (aka "auxiliary device") support < > /dev/agpgart (AGP Support) <==這個相當的重要!就是 AGP 顯示卡的支援核心!請選擇(若你有 AGP 的話!) [ ] Intel 440LX/BX/GX and I815/I830M/I840/I850 support <==下面的選項要上面的打勾之後才會出現! [ ] Intel I810/I815/I830M (on-board) support 請特別留意選擇你的適合的主機板晶片組呢! [ ] VIA chipset support [ ] AMD Irongate, 761, and 762 support [ ] Generic SiS support [ ] ALI chipset support [ ] Serverworks LE/HE support [ ] Direct Rendering Manager (XFree86 DRI support) [ ] Build drivers for old (XFree 4.0) DRM (NEW) --- DRM 4.1 drivers < > 3dfx Banshee/Voodoo3+ < > ATI Rage 128 < > ATI Radeon < > Intel I810 < > Matrox g200/g400 < > SiS (NEW) [ ] Direct Rendering Manager (XFree86 DRI support) Multimedia devices ---> File systems ---> <==底下的選項主要在提供核心支援的檔案格式!相當的重要!如果忘記編入的話,系統可是會讀不到東西! [*] Quota support <==沒有他! Quota 就無法起來!請選擇呦! <M> Kernel automounter support <*> Kernel automounter version 4 support (also supports v3) <M> Ext3 journalling file system support (EXPERIMENTAL) <M> DOS FAT fs supportt <M> MSDOS fs supportt <M> UMSDOS: Unix-like file system on top of standard MSDOS fss <M> VFAT (Windows-95) fs supportt <M> Compressed ROM file system support [*] Virtual memory file system support (former shm fs) <*> ISO 9660 CDROM file system support <==在 Red Hat 7.2 這裡就是被編成模組了!才需要每次載入! [*] Microsoft Joliet CDROM extensionss <M> Minix fs support <M> NTFS file system support (read only) [*] /proc file system support [*] /dev/pts file system for Unix98 PTYs <*> Second extended fs support <M> System V/Xenix/V7/Coherent file system support Network File Systems ---> <M> Coda file system support (advanced network fs) <*> NFS file system support <==NFS 也是需要的呦! <M> SMB file system support (to mount Windows shares etc.) <==網芳總是需要的吧! [*] Use a default NLS (NEW) Default Remote NLS Option: "cp950" (NEW) <==支援中文的語系! Partition Types ---> Native Language Support ---> <==除了底下說的幾個 * 的之外,其他的全部都編譯成為模組!(以備不時之需!) Default NLS Option: "iso8859-1" (NEW) <*> Traditional Chinese charset (Big5) (NEW) <*> NLS ISO 8859-1 (Latin 1; Western European Languages) (NEW) <M> for others Console drivers ---> [*] VGA text console Sound ---> < > Sound card support <==你有音效卡嗎?那就編譯他吧! USB support ---> <M> Support for USB Kernel hacking ---> |
好了!編譯完成之後選擇『Save Configuration to an Alternate File』然後寫成一個你喜歡的檔名,這個檔案內容就是你剛剛編譯完成的資料啦!然後選擇 <Exit> 之後,再儲存一次到系統當中!接著下來就準備要編譯囉!
[root @test
linux]# make dep <==建立相依的屬性關係!
[root @test linux]# make clean <==將舊的資料去除掉! [root @test linux]# make bzImage <==開始編譯核心!這個核心是經過壓縮的,此外,這個步驟也很長! [root @test linux]# make modules <==開始編譯模組!這個動作視您剛剛編譯的模組數量! [root @test linux]# make modules_install <==好了!將資料給他安裝在 /lib/modules/`uname -r` 裡面囉! [root @test linux]# make install <==嗯!就將剛剛 bzImage 建立完成的核心給他安裝上來! |
剛剛上一個步驟就已經將核心安裝好了嗎?很抱歉!非也非也∼我們到前一步驟中,僅是將模組安裝到 /lib/modules/`uname –r` 當中,而核心編譯完成並放在 /usr/src/linux/arch/i386/boot/bzImage 而已!所以,這個時候,請將核心放置在開機核心預設放置的目錄 /boot 吧![root @test root]# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.18在一般人的習慣中,我們還是比較喜歡將開機的核心稱做為 vmlinuz ,而由於版本不同,所以我們可以將他取名為 vmlinuz-2.4.18 這樣的檔案名稱,比較好進行確認啦!
核心搬移完畢之後就 OK 了嗎?當然不對囉!還記得在開機流程裡面介紹的 Linux 的開機管理員嗎?沒錯,那就是 lilo 跟 grub 囉,所以,接著下來我們要作的就是開機的設定囉?由於 lilo 與 grub 我們之前就提過了,所以這裡不詳細的介紹每個物件的內容,僅說明一下我的測試核心的規劃!通常,我都喜歡直接以硬碟開機來測試新的核心,而由於害怕新的核心沒有辦法工作 ( 註:很多時候,由於不同的 distribution 他所考慮的內容不一樣,因此,很有可能您編譯完成的核心並無法在您的 Linux distribution 上面工作的,所以,雖然他可以被編譯成功,但是我們還是得測試測試他呢! ) 因此,我都會將舊的核心繼續留下來,因為如果萬一新核心沒有辦法工作,那麼最起碼我還可以使用舊的核心繼續來管理我的 Linux 呢!這個時候就必需要有多重開機系統啦!
- Lilo 的安裝設定:
那麼如果您是使用 lilo 的話,就需要修改 /etc/lilo.conf 囉!依據剛剛我們建立的名為 /boot/vmlinuz-2.4.18 的核心檔案,您的 /etc/lilo.conf 內容應該有點像是這樣:
[root @test linux]# vi /etc/lilo.conf
boot=/dev/hda
map=/boot/map
vga=normal
default=linux-2.4.18
keytable=/boot/us.klt
prompt
nowarn
timeout=100
message=/boot/message
menu-scheme=wb:bw:wb:bw
image=/boot/vmlinuz-2.4.18
label=linux-2.4.18
root=/dev/hda1
append="devfs=mount"
read-only
image=/boot/vmlinuz
label=linux
root=/dev/hda1
initrd=/boot/initrd.img
append="devfs=mount"
read-only
image=/boot/vmlinuz
label=failsafe
root=/dev/hda1
initrd=/boot/initrd.img
append="devfs=nomount failsafe"
read-only
image=/boot/vmlinuz
label=linux-test
root=/dev/hda1
initrd=/boot/initrd.img
append="devfs=mount"
read-only[root @test boot]# lilo
Added linux-2.4.18 *
Added linux
Added failsafe
Added linux-test
黃色字體的部分是經過修改的,其他的則是 Mandrake 9.0 的預設值!這樣就修改好囉!然後給他安裝到 MBR 或 Super block 吧!出現了 * 符號囉!呵呵!安裝成功了,請重新開機,試圖使用一下您的新核心吧!更詳細的 LILO 說明請參考開機流程裡面的 LILO 說明喔!
- Grub 安裝說明:
那麼如果是使用 grub 呢?就修改一下 /boot/grub/menu.lst 吧!修改成類似底下的模樣:
[root @test linux]# vi /boot/grub/menu.lst
timeout 10
color black/cyan yellow/cyan
i18n (hd0,0)/boot/grub/messages
keytable (hd0,0)/boot/us.klt
altconfigfile (hd0,0)/boot/grub/menu.once
default 0title linux-2.4.18
kernel (hd0,0)/boot/vmlinuz-2.4.19 root=/dev/hda1 devfs=mounttitle linux-2.4.19-16mdk
kernel (hd0,0)/boot/vmlinuz-2.4.19-16mdk root=/dev/hda1 devfs=mount
initrd (hd0,0)/boot/initrd.imgtitle failsafe
kernel (hd0,0)/boot/vmlinuz root=/dev/hda1 devfs=nomount failsafe
initrd (hd0,0)/boot/initrd.img
上面的黃色字體是經過修改之後的結果?很簡單吧!這樣就搞定了!然後就可以開機測試看看囉!但是,如果是 Lilo 轉換到 grub 的使用者,還得再安裝 grub 呢!可以這樣做做看:
[root @test boot]# grub-install /dev/hda
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.(hd0) /dev/hda
或者直接進入 grub 的指令列進行安裝:
[root @test boot]# grub GRUB version 0.92 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 17 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,0)/boot/grub/stage2
/boot/grub/menu.lst"... succeeded
Done.grub> quit
呵呵!這樣就 OK 囉!安裝完畢,請馬上重新開機測試看看您的核心是否可以正常的工作了吧! ^_^更詳細的 Grub 說明請參考開機流程的 Grub 喔!
還記得核心的功能嗎?對啦!就是用來控制系統硬體與相關程序的東西啦!那麼在上面提到的功能裡面,我們也提到了核心可以使用『模組』的方式來動態的載入與移除所需要的模組,OK!那麼該如何載入與卸載這些模組呢?!要知道的是,在模組的載入方面,最主要的開機時即載入模組的檔案在於:/etc/modules.conf這個檔案,如果你有任何的新的驅動程式需要在開機的時候載入,呵呵!寫入這個檔案就對了!而核心的驅動程式寫在哪裡?呵呵!就是在底下的目錄中:/lib/modules/核心版本/kernel/drivers (也可以寫成如下)上面這兩行是一模一樣的東西,什麼?怎麼看出來的?別多說廢話了,如果忘記的話,使用 uname –r 看一下內容,再去看一下 quote 是什麼!趕緊回想一下喔!好了,那麼 /etc/modules.conf 的內容是怎樣呢?我們舉最簡單的例子好了,假設你的網路卡是早期有『惡魔卡』稱號的 D-Link 530 好了,那麼這個卡的模組其實已經被 Linux 編譯好了,他就是 via-rhine.o 這個檔案,我們又知道說網路卡的第一個代號為 eth0 ,所以呢,要讓 eth0 與 via-rhine 劃上等號( 註:那個 .o 不要寫出來! ),因此,在 /etc/modules.conf 的最後一行加入底下的文字:
/lib/modules/`uname –r`/kernel/driversalias eth0 via-rhine如果一切順利的話,那麼開機的時候他就會自動的幫我們找到相對應的硬體與模組囉!但是如果 Linux 沒有幫我們編譯好模組呢?怎麼編譯?就使用 make 呀!請回到 RPM 與 Tarball 那一章去閱讀一下 tarball 的安裝方式!再來,如果我需要的是手動隨時加入與取消某些模組呢?呵呵,這個時候也就需要來瞭解一下模組的載入與卸載的功能囉!
- 模組編譯
還記得要手動編譯一些驅動程式或者是 tarball 的套件時,至少需要什麼嗎?對啦!要 gcc, make 及 kernel-header 等套件,現在我假設這些套件已經都在您的機器上面了,那麼我們來模擬一下編譯 viarhine.o 這個模組吧!好了,首先先到網路卡的驅動程式中心下載這個模組的原始碼吧!
http://www.scyld.com/network/index.html
不過,上面的網站提供的驅動程式有點難以編譯成功!所以,我這裡也提供一個比較容易編譯成功的原廠釋出的模組,大家來試看看:
http://linux.vbird.org/download/book_basic/linux530_321.tar
(你可以使用 wget 這個程式在文字介面下載這個檔案!)。首先,您必需將此檔案解壓縮,假設這個檔案原本放置在 /root 底下好了,那麼我們曾經說過,要編譯新的套件或其他林林總總的資料時,最好放在 /usr/local/src 底下,所以:
[root @test root]# wget http://linux.vbird.org/download/book_basic/linux530_321.tar
[root @test root]# cd /usr/local/src
[root @test src]# mkdir dlink-530
[root @test dlink-530]# tar –xvf /root/linux530_321.tar
這步之後會多出 readme.txt, Makefile, viarhine.c, viarhine.h 四個檔案,
其中,那個 readme.txt 『真的』要看一看!
[root @test dlink-530]# make
這個 make 會依據 Makefile 這個檔案的內容來將你的 viarhine.c 加以編譯!
最後就得到了 viarhine.o 這個編譯成功的目標檔案。
這樣就編譯完成了,接著下來就是將編譯好的模組放置在核心應該要放置的地方,我這裡以 2.4.xx 核心版本為例說明,聽說明年六月 ( 2003/06 ) 會推出新的 2.6.xx 版核心,無論如何,目前大部分的 Linux 還是使用 2.4.xx 的,因此,這裡還是以他為例了:
核心的模組放置目錄: /lib/modules/`uname –r`/kernel/
核心的檔案格式模組: /lib/modules/`uname –r`/kernel/fs
核心的網路卡驅動程式模組: /lib/modules/`uname –r`/kernel/drivers/net
因此,我們要把這個模組給他直接 copy 到該目錄下,所以:
cp /usr/local/src/dlink-530/via-rhine.o /lib/modules/`uname –r`/kernel/drviers/net
這樣就完成了系統的驅動程式模組的編譯了!完成編譯之後,想要在開機的時候立即啟動這個模組的對應,那麼就寫入 /etc/modules.conf 當中,所以:
[root @test root]# vi /etc/modules.conf
alias eth0 via-rhine
加入上面黃色字體那行就對啦!
- depmod
[root @test /root]# depmod [-aens]
參數說明:
-a :將 /etc/modules.conf 可以查詢到的模組的相關性都寫入 /lib/modules/`uname -r`/當中
-e :顯示出目前已載入的不可執行的模組名稱
-n :將各模組的相依性直接輸出螢幕上,而不是輸出到 /lib/modules/`uname -r` 當中
-s :將一些訊息結果輸出到 syslog 的登錄檔中!
範例:
[root @test /root]# depmod -a
[root @test /root]# depmod -n
很多時候,在使用模組時,這些模組基本上是有相關性的!什麼意思呢?例如你要在 NAT 伺服器的情況下啟動 NAT 時,那麼就需要 ip_tables 這個模組,以及 ip_nat 這個模組,而若你還想要啟用 NAT 下的 ftp 功能,那麼就需要啟用 ip_nat_ftp 模組!換個角度來想,如果你需要啟用 ip_nat_ftp 模組的話,那麼就『必需啟用 ip_nat 與 ip_tables 模組!』這就是所謂的相依性!而這些相依性的內容都是被紀錄在 /lib/modules/`uname –r`/modules.dep 這個檔案中的!至於分析這些模組的相關性,則是以 depmod 來執行的啦!此外,如果不想讓模組被寫入 /lib/modules/`uname -r` 當中的話,那麼就加入 -n 參數吧,可以先看一下各模組的相依性呢!
- lsmod
[root @test /root]# lsmod
參數說明:
範例:
[root @test /root]# lsmod
Module Size Used by Tainted: P
ipt_MASQUERADE 1216 1 (autoclean)
iptable_filter 1696 1 (autoclean)
ip_conntrack_irc 2592 0 (unused)
ip_conntrack_ftp 3328 0 (unused)
ip_nat_irc 2400 0 (unused)
ip_nat_ftp 2976 0 (unused)
iptable_nat 13588 3 [ipt_MASQUERADE ip_nat_irc ip_nat_ftp]
ip_tables 11232 5 [ipt_MASQUERADE iptable_filter iptable_nat]
ip_conntrack 13356 3 [ipt_MASQUERADE ip_conntrack_irc ip_conntrack_ftp ip_nat_irc ip_nat_ftp iptable_nat]
ppp_async 6240 1 (autoclean)
8139too 14208 2
usbcore 29632 0 (unused)
在目前系統中的模組有哪些呢?就是以 lsmod 來查看就對啦!例如以我的宿舍 Linux 主機來看,我的網路卡是螃蟹卡,亦即是 8139 這個模組啦,另外,我有進行 NAT ,所以開啟了相當多的 iptables 模組,所以你可以看到一堆 ipxxxx 的模組名稱啦!
- modinfo
[root @test /root]# modinfo [-adnp] module_name
參數說明:
-a :秀出作者
-d :秀出這個模組的基本說明
-n :秀出這個模組的檔案放置路徑與名稱
範例:
[root @test /root]# modinfo 8139too
filename: /lib/modules/2.4.19/kernel/drivers/net/8139too.o
description: "RealTek RTL-8139 Fast Ethernet driver"
author: "Jeff Garzik <jgarzik@mandrakesoft.com>"
license: "GPL"
parm: multicast_filter_limit int, description "8139too maximum number of filtered multicast addresses"
parm: max_interrupt_work int, description "8139too maximum events handled per interrupt"
parm: media int array (min = 1, max = 8), description "8139too: Bits 4+9: force full duplex, bit 5: 100Mbps"
parm: full_duplex int array (min = 1, max = 8), description "8139too: Force full duplex for board(s) (1)"
parm: debug int, description "8139too bitmapped message enable number"[root @test /root]# modinfo -a 8139too
"Jeff Garzik <jgarzik@mandrakesoft.com>"[root @test /root]# modinfo /usr/local/src/dlink-530/via-rhine.o
filename: /usr/local/src/dlink-530/via-rhine.o
description: "PCI 10/100Mb Fast Ethernet Adapter"
author: "Donald Becker <becker@scyld.com>"
license: <none>
parm: debug int
parm: min_pci_latency int
parm: max_interrupt_work int
parm: rx_copybreak int
parm: options int array (min = 1, max = 8)
parm: full_duplex int array (min = 1, max = 8)
很簡單吧!就是用來查看這個模組的作者啦!如果不加任何參數的時候,就是將這個模組的所有訊息都寫出來的意思!我們使用的網路卡(螃蟹卡)所掛載的這個模組使用的檔案就是: filename 那一行當中的 /lib/modules/2.4.19/kernel/drivers/net/8139too.o 這個檔案啦!那麼如果我是想看剛剛我們在核心編譯當中編譯出來的那個模組的資訊呢?可以直接加上模組的檔案名稱!
- modprobe
[root @test /root]# modprobe [-l|-c]
[root @test /root]# modprobe modules_name<==直接載入該模組與其相依屬性的模組
參數說明:
-l :列出目前系統所有的模組 ( 在 /lib/modules/`uname -r`/kernel 底下 )
-c :列出目前系統所有的模組!(更詳細的代號對應表)
範例:
[root @test /root]# modprobe ip_tables <==直接載入 ip_tables.o 這個模組
[root @test /root]# modprobe –l
這東西相當的好用,因為他除了可以將後面接的模組名稱載入之外,還可以依據 /lib/modules/`uname –r`/modules.dep 裡面的相依屬性,將其他相關的模組也載入!不錯吧!此外,需要特別留意的是,模組全部都擺在『 /lib/modules/`uname -r`/kernel 』這個目錄下,而且模組的名稱都是以 *.o 這個附檔名存在,但是在實際載入模組的時候,只要寫入名稱即可,千萬不可寫入 .o 或者是路徑名稱,例如要載入 ip_tables.o 這個模組時,就寫 modprobe ip_tables 即可!其實,這個程式與底下的 insmod 有點類似,只是他是依據系統已經建立好的模組相依屬性來載入模組,而 insmod 則是直接手動來載入模組檔案!
- insmod
[root @test /root]# insmod [-fkps] module_name
參數說明:
-f :強制將模組載入,要載入不相同版本的模組時候可能會用到的參數
-k :自動在核心沒有使用到該模組的時候,先清除乾淨!
-p :測試模組是否可以被載入,不會直接載入系統中!
-s :將一些執行訊息寫到 syslog 這種登錄檔,而不是寫到 terminal 當中!
範例:
[root @test /root]# insmod -p /usr/local/src/dlink-530/via-rhine.o
Warning: loading /usr/local/src/dlink-530/via-rhine.o will taint the kernel: no license
See http://www.tux.org/lkml/#export-tainted for information about tainted modules
這個跟 modprobe 有點類似啦,但是 insmod 可以讀取非 /lib/modules/`uname -r`/kernel 內的模組,而且還可以為模組進行載入測試呢!您可以加上路徑與完整的檔名來載入模組,加上 -p 這個參數可以驗證該模組的可執行性與否!!『要注意的是,這個 insmod 輸入的模組名稱必須要完整的路徑、檔名來輸入呦!』
- rmmod
[root @test /root]# rmmod modules_name
參數說明:
範例:
[root @test /root]# rmmod 8139too
顧名思義,呵呵!移除模組的程式啦!!使用 lsmod 得到以存在的模組之後,,然後再輸入『 rmmod 模組名稱』就可以移除模組囉!