SUSE Linux 核心管理與驅動程式編譯指南
在 SUSE Linux (openSUSE / SLE) 中,掌握核心(Kernel)管理與驅動程式編譯能夠讓你定制系統、支持新硬體,並進行進階開發。本指南包含核心編譯、驅動編寫與測試完整流程,適用於 SUSE 環境。
目錄
準備編譯環境
安裝編譯及核心開發工具:
sudo zypper install -t pattern devel_kernel
sudo zypper install -y git make gcc bc libopenssl-devel ncurses-devel
devel_kernel
pattern 包含內核所需的 build headers 與工具。
檢查目前核心版本:
uname -r
取得與配置核心原始碼
1. 透過 SUSE Source RPM
sudo zypper source-install kernel-default
cd ~/rpmbuild/SOURCES/linux-*/ # 進入解壓後的 source 目錄
2. 或直接從官方 Git 倉庫
git clone --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
cd linux-stable
3. 複製預設配置
cp /boot/config-$(uname -r) .config
4. 更新配置
make oldconfig # 依序回覆新選項
# 或
make menuconfig # 互動式設定
編譯與安裝核心
編譯核心與模組
make -j$(nproc) bzImage modules
安裝模組
sudo make modules_install
安裝核心
sudo make install
更新引導
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
重啟並驗證
sudo reboot
# 重新登入後
uname -r
驅動程式概念與工具
- 模組 (module):載入至核心的二進位驅動。
- 常用命令:
lsmod
:列出已載入模組modinfo <module>
:查看模組資訊insmod <module.ko>
:載入模組rmmod <module>
:卸載模組
- 開發時需安裝
kernel-default-devel
套件,提供/lib/modules/$(uname -r)/build
連結。
編寫與編譯簡單模組
範例:hello_world.c
#include <linux/module.h>
#include <linux/kernel.h>
static int __init hello_init(void) {
printk(KERN_INFO "Hello SUSE Kernel Module!\n");
return 0;
}
static void __exit hello_exit(void) {
printk(KERN_INFO "Goodbye SUSE Kernel Module!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("SUSE Admin");
MODULE_DESCRIPTION("Simple Hello World Module");
Makefile
obj-m := hello_world.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.* *.symvers
編譯
make
載入與卸載模組
載入
sudo insmod hello_world.ko
驗證
lsmod | grep hello_world
dmesg | tail -n 10
卸載
sudo rmmod hello_world
進階驅動開發建議
- 字符設備驅動:使用
cdev
與file_operations
。 - PCI/USB 驅動:利用
pci_register_driver
/usb_register
等 API。 - LKM:保持與核心 API 同步,參考
/usr/src/linux-headers-*/Documentation
.
除錯與測試
- 增加 printk 等級:
pr_debug
,pr_err
等。 dmesg -w
:實時監控日誌。- ftrace/perf:追蹤函數調用與性能分析。
- 使用 kgdb 進行核心級偵錯。
結語
透過本指南,您可在 SUSE Linux 環境中完成核心編譯、安裝與自訂驅動程式開發,並運用多種除錯工具提升驅動品質。深入瞭解核心內部將有助於系統最佳化與硬體支援擴充。