萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

VMware 環境下 Linux 核心 2.6.14.4 完整編譯指南:配置、模組與開機設定

作者很早就開始嘗試編譯 Linux 核心,但反覆遇到各種問題,經過數十次的嘗試才最終成功。為了避免他人重蹈覆轍,將整個過程詳細記錄下來。本文以 Red Hat Linux 9 為環境,核心版本為 2.6.14.4。

1. 下載與解壓核心原始碼

前往 kernel.org 下載最新的核心原始碼,解壓到 /usr/src/linux 目錄。

注意:務必在 Linux 環境下解壓,如果在 Windows 下解開會遇到問題(Windows 不區分檔案大小寫,會導致部分檔案被覆蓋)。

cd /usr/src/linux

2. 清理與配置核心

# 清除上次編譯產生的中間檔案
make mrproper
# 進入核心配置介面
make menuconfig

3. VMware 環境下必須啟用的選項

在 VMware 中編譯核心時,以下選項必須正確選擇,否則將無法正常運行:

  • SCSI disk support:Device Drivers → SCSI device support → <*> SCSI disk support
  • BusLogic SCSI support:Device Drivers → SCSI device support → SCSI low-level drivers → <*> BusLogic SCSI support
  • Fusion MPT device support:Device Drivers → Fusion MPT device support → Fusion MPT (base + ScsiHost) drivers 和 Fusion MPT misc device (ioctl) driver(後者視需求選擇)
  • USB Mass Storage support:Device Drivers → USB support → <*> USB Mass Storage support
  • AMD PCnet32 PCI support:Device Drivers → Networking support → Ethernet (10 or 100Mbit) → <*> AMD PCnet32 PCI support

4. 編譯核心與模組

在 2.6 版本中,make dep 已不再需要。

# 產生壓縮核心
make bzImage
# 將編譯好的核心複製到啟動目錄
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmkernel
# 編譯可載入模組
make modules
# 安裝模組
make modules_install

整個編譯過程通常需要超過一個小時的時間。

5. 生成 initrd 映像檔

如果 BusLogic SCSI support 選擇的是 M(模組),則需要手動製作 initrd 映像檔:

mkinitrd /boot/newkernel.img 2.6.14.4

如果 BusLogic SCSI support 選擇的是 *(靜態編入核心),則不需要執行此步驟。

6. 修改引導程式配置

使用 GRUB

在 /etc/grub.conf 中新增以下內容:

title New Kernel (2.6.14.4)
root (hd0,0)
kernel /vmkernel ro root=/dev/sda2
initrd /newkernel.img

若 BusLogic SCSI support 選擇的是 M,請保留 initrd /newkernel.img 這一行;若選擇的是 *,則應註釋掉此行(在前面加上 #)。

使用 LILO

在 /etc/lilo.conf 中新增以下內容:

image=/boot/vmkernel
label=New
initrd=/boot/newkernel.img
read-only
append="root=/dev/sda2"

同樣地,根據 BusLogic SCSI support 的選擇決定是否註釋 initrd 行。修改後執行 lilo 指令更新引導程式。

7. 重新啟動

完成上述配置後,重新啟動系統即可使用新編譯的核心。

常見問題排查

問題一:No rule to make target `net/ipv4/netfilter/ipt_TOS.c'

這是因為在 Windows 下解壓核心原始碼所致。Windows 不區分檔案大小寫,ipt_TOS.c 和 ipt_tos.c 會被視為同一個檔案而互相覆蓋。解決方法是將原始碼在 Linux 環境下重新解壓。

問題二:無法掛載根檔案系統

檢查引導程式配置檔案,將根檔案系統指定為具體的裝置檔案(如 /dev/sda2),避免使用 LABEL 標籤來指定根分區。

copyright © 萬盛學電腦網 all rights reserved