內核模塊常用命令
| 命令 | 功能 | 示例 |
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 (未選中):不編譯,功能完全不可用。
手動編譯內核標準流程
- 準備環境:
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)
- 獲取源碼:
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
- 配置內核選項 (三選一):
make menuconfig (文本界面,推薦,無需圖形庫)
make gconfig (GTK+ 圖形界面,需 libgtk2.0-dev)
make kconfig (Qt 圖形界面,需 qt5-base-dev)
關鍵操作:/ 搜索功能 → Y/M/N 切換 → Esc 退出保存生成 .config。
- 編譯內核與模塊:
make -j$(nproc) (並行編譯,加速) → 生成 arch/x86/boot/bzImage、vmlinux、大量 .ko。
- 安裝模塊:
sudo make modules_install → 安裝至 /lib/modules/$(uname -r)/。
- 安裝內核:
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 (需內核源碼樹完整)。