**模塊化編譯 (Out-of-tree / In-tree 模塊編譯)** 允許針對單一文件系統/驅動編譯 .ko 模塊,動態載入 — **無需重啟、無需重編內核、版本強綁定當前運行內核**。
# 1. 確認運行內核版本
uname -r
# 2.6.24.4-64.fc8
# 2. 安裝對應版本內核開發包 (必須精確匹配)
sudo dnf install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
# 驗證
rpm -qa | grep kernel
# kernel-devel-2.6.24.4-64.fc8
# kernel-headers-2.6.24.4-64.fc8
# kernel-2.6.24.4-64.fc8
從 kernel.org 下載對應版本內核源碼 (linux-2.6.24.4.tar.xz),提取 fs/minix/ 目錄 — **僅需目標文件系統代碼,不需全樹**。
# fs/minix/Makefile
# 1. 聲明為模塊編譯
obj-m += minix.o
# 2. 多文件模塊組成 (對應源碼中的文件)
minix-objs := bitmap.o itree_v1.o itree_v2.o namei.o inode.o file.o dir.o
# 3. 內核構建樹路徑 (自動獲取當前運行內核)
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
# 4. 默認目標:進入內核樹以模塊模式構建當前目錄
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
# 5. 清理
clean:
rm -rf *.o *.mod.c *.ko *.symvers *.order
obj-m:告訴 kbuild 這是**可加載模塊** (生成 .ko),而非內建 (obj-y)。minix-objs:模塊名 + -objs 後綴,列出組成模塊的目標文件 — **多源文件模塊必須**。$(MAKE) -C $(KERNELDIR) M=$(PWD) modules:-C 切換到內核構建樹 (含 scripts/、Module.symvers 等)M=$(PWD) 指定外部模塊源碼路徑modules 目標僅構建模塊Nothing to be done for 'default'。cd /path/to/minix/source
make
# 輸出:
# CC [M] /path/to/minix/bitmap.o
# ...
# LD [M] /path/to/minix/minix.ko
# 產出 minix.ko (模塊文件)
# 驗證模塊信息
modinfo minix.ko
# filename: /path/to/minix/minix.ko
# license: GPL
# depends:
# vermagic: 2.6.24.4-64.fc8 SMP mod_unload 686 (必須與 uname -r 完全一致)
# 載入
sudo insmod minix.ko
# 或 sudo modprobe minix (需放入 /lib/modules/$(uname -r)/kernel/fs/minix/ 並 depmod)
# 驗證載入
lsmod | grep minix
# minix 28676 0 - Live 0xd0e7d000
# 掛載測試
mkdir /mnt/minix
mount -t minix /dev/loop0 /mnt/minix # 需 Minix 格式的映像/設備
# 卸載模塊
sudo rmmod minix
lsmod | grep minix # 無輸出 = 已卸載
# 將模塊源碼打包為 DKMS 格式
# /usr/src/minix-1.0/dkms.conf
PACKAGE_NAME="minix"
PACKAGE_VERSION="1.0"
BUILT_MODULE_NAME[0]="minix"
DEST_MODULE_LOCATION[0]="/kernel/fs/minix"
AUTOINSTALL="yes"
sudo dkms add -m minix -v 1.0
sudo dkms build -m minix -v 1.0
sudo dkms install -m minix -v 1.0
# 之後內核升級,DKMS 自動重新編譯安裝模塊 — 徹底解決內核升級模塊失效問題
**內核模塊化編譯三要素**:版本對齊的 kernel-devel/headers、正確的 Makefile (obj-m/obj-y、KERNELDIR、Tab 縮進)、動態 insmod/rmmod 驗證。掌握此法,任何文件系統 (Btrfs/ZFS/ext4 新特性)、驅動 (顯卡/網卡/存儲控制器) 均可熱插拔式部署。生產環境請配合 DKMS 實現內核升級免維護。
Linux USB 儲存裝置掛載全流程:內核配置、裝置識別、fstab 永久掛載、中文檔名支援
Linux VPS 實戰教學:設定 SSH 登入郵件通知,守護伺服器安全
Linux 系統安全加固五大核心措施:金鑰環、強制換密、SELinux、禁用 Root 登入與自動更新
實測對比:相同硬體下 CentOS 執行 PHP+MySQL 程式比 Windows Server 2003 快 2~4 倍
Linux 禁止 root SSH 登入與修改 SSH 埠號完整操作指南
Linux 伺服器硬碟 I/O 讀寫負載監控與壓力測試完整指南
Oracle Redo Log 原理深度解析:實例恢復與介質恢復的核心機制、Checkpoint、Log Force at Commit