Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux 內核模塊管理與手動編譯內核實戰筆記

編輯:Linux 系統常見問題解答

內核模塊常用命令

命令功能示例
lsmod查看已加載模塊lsmod | grep nvidia
modprobe MODULE智能加載模塊 (自動解決依賴)modprobe nvidia
modprobe -r MODULE卸載模塊 (含依賴)modprobe -r nvidia
modinfo MODULE查看模塊詳細信息 (版本、作者、參數、依賴)modinfo nvidia
insmod /path/module.ko手動加載指定路徑模塊 (不解決依賴)insmod /lib/modules/$(uname -r)/extra/mymod.ko
rmmod MODULE手動卸載模塊rmmod mymod

內核功能編譯選項三態

  • Y (內建 *):編譯進內核映像 (vmlinuz),啟動即可用,無法動態卸載。適用於啟動必需功能 (根文件系統驅動、核心調度器)。
  • M (模塊 m):編譯為 .ko 模塊文件,按需加載 (modprobe),節省內存,支持參數調整。適用於大多數驅動、文件系統、網絡協議。
  • N (未選中):不編譯,功能完全不可用。

手動編譯內核標準流程

  1. 準備環境:
    sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev bc (Debian/Ubuntu)
    sudo yum groupinstall "Development Tools" && sudo yum install ncurses-devel openssl-devel elfutils-libelf-devel (CentOS/RHEL)
  2. 獲取源碼:
    wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.15.tar.xz
    tar -xf linux-6.6.15.tar.xz && cd linux-6.6.15
  3. 配置內核選項 (三選一):
    make menuconfig (文本界面,推薦,無需圖形庫)
    make gconfig (GTK+ 圖形界面,需 libgtk2.0-dev)
    make kconfig (Qt 圖形界面,需 qt5-base-dev)
    關鍵操作:/ 搜索功能 → Y/M/N 切換 → Esc 退出保存生成 .config。
  4. 編譯內核與模塊:
    make -j$(nproc) (並行編譯,加速) → 生成 arch/x86/boot/bzImage、vmlinux、大量 .ko。
  5. 安裝模塊:
    sudo make modules_install → 安裝至 /lib/modules/$(uname -r)/。
  6. 安裝內核:
    sudo make install → 自動複製 bzImage 至 /boot/vmlinuz-version、生成 initramfs、更新 GRUB。

二次編譯清理 (修改 .config 後)

# 保留 .config,僅清理編譯產物
make clean

# 徹底清理,恢復原始源碼狀態 (需備份 .config)
make mrproper
# 還原配置
cp ../.config.backup .config

啟動流程關鍵組件

GRUB (引導加載器)
    ↓ 讀取內核映像 + 參數
Kernel (vmlinuz) 解壓、初始化核心子系統
    ↓ 掛載 initramfs (臨時根文件系統)
initramfs (/init) 載入必要驅動 (存儲控制器、文件系統、鍵盤、網卡)
    ↓ 切換根文件系統 (switch_root)
Real Root FS (/) 啟動 systemd (PID 1) 進入用戶空間

實用技巧

  • 備份 .config:cp .config /boot/config-$(uname -r).bak,方便後續內核升級/對比。
  • 本地版本號:make menuconfig → General setup → Local version - append to kernel release 填入 -custom,避免與發行版內核衝突。
  • 簽名模塊 (Secure Boot):make modules_sign 需 MOK 密鑰,否則 UEFI Secure Boot 環境無法加載第三方模塊 (如 NVIDIA、VirtualBox、WireGuard)。
  • 僅編譯單個模塊:make M=drivers/gpu/drm/nvidia (需內核源碼樹完整)。
Copyright © Windows教程網 All Rights Reserved