萬盛學電腦網

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

為什麼要重新編譯 Linux 核心?編譯前準備與配置核心策略

重新編譯核心的四大核心動機

動機具體效益
效能優化移除無用驅動/功能 → 核心體積縮小 → 指令快取命中率提升、記憶體佔用降低、啟動加速
記憶體節省核心程式碼常駐記憶體 (不可交換),精簡核心釋放更多 RAM 給應用程式
安全強化減少攻擊面:未使用的驅動/檔案系統/協議堆疊不編入 → 無漏洞利用面
功能定製啟用特定功能 (即時核心 PREEMPT_RT、特定檔案系統、硬體支援、調試介面)

編譯模組 vs 內建核心:效能權衡

  • 內建 (Y):啟動最快、無模組載入開銷、根檔案系統驅動必須內建。
  • 模組 (M):核心體積小、支援熱插拔硬體、啟動時需 initramfs 載入、微小效能損耗 (間接呼叫)。
  • 策略:啟動關鍵路徑 (根檔案系統、儲存控制器、主控台) → Y;其餘熱插拔/選用硬體 → M。

編譯環境準備 (Debian/Ubuntu 為例)


# 1. 安裝建構工具鏈
sudo apt-get update
sudo apt-get install build-essential kernel-package libncurses5-dev libssl-dev bc flex bison git

# 2. 獲取核心源碼
cd ~
mkdir -p src && cd src
# 完整版 (F 代表 Full)
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.10.tar.xz
# 或長期支援版
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.10.tar.xz

# 3. 解壓 (Linus 建議:任意目錄均可,勿迷信 /usr/src)
tar -xJf linux-6.6.10.tar.xz
cd linux-6.6.10

# 4. 磁碟空間預估
# 源碼 ~1GB,建構後 ~3-5GB,建議預留 10GB+ 空間
df -h .

配置策略三選一

策略 A:發行版配置微調 (推薦生產/桌面)


cp /boot/config-$(uname -r) .config
make olddefconfig  # 自動處理新選項
make menuconfig    # 僅修改必要項 (移除無用驅動、啟用特定功能)

優點:相容性最佳、啟動風險最低、支援所有當前硬體。

策略 B:最小配置逐項添加 (嵌入式/教學/極致精簡)


make allnoconfig
make menuconfig  # 依「最精簡核心配置指南」逐項啟用

優點:核心最小、攻擊面最小、編譯最快;缺點:易遺漏隱性依賴、除錯困難。

策略 C:硬體自動檢測配置 (當前機器最優)


make localmodconfig
# 掃描當前載入模組 (lsmod),將其設為 Y (內建) 或 M
# 需在「目標硬體完全裝載驅動」的系統上執行
make menuconfig  # 微調

優點:精確匹配當前硬體、無多餘驅動;缺點:移植到不同硬體需重新配置。

核心配置關鍵檢查清單

  • [ ] 根檔案系統驅動 (ext4/xfs/btrfs) = Y
  • [ ] 根裝置控制器驅動 (ahci/nvme/megaraid/virtio_scsi) = Y
  • [ ] 核心支援 ELF 二進位 + 腳本 = Y
  • [ ] Unix domain sockets = Y (systemd/udev/Docker 基礎)
  • [ ] /proc, sysfs, tmpfs = Y
  • [ ] Swap 支援 = Y
  • [ ] CPU 類型正確 + SMP = Y (多核)
  • [ ] 時鐘源 (TSC/HPET) + RTC = Y
  • [ ] 模組支援 + 自動載入 = Y
  • [ ] 唯一版本後綴 (CONFIG_LOCALVERSION="-custom") 避免衝突

啟動驗證


# 編譯安裝後
reboot
uname -r           # 確認版本後綴
dmesg | head -30   # 檢查啟動訊息、驅動載入
lsmod              # 確認模組載入狀態
systemd-analyze    # 啟動時間分析 (systemd 系統)

重新編譯核心是 Linux 使用者掌控系統、深入理解作業系統機制的必修課,亦是嵌入式/伺服器/高效能運算領域的核心技能。

copyright © 萬盛學電腦網 all rights reserved