📖 Linux核心編譯篇之驅動程式編譯

分類:其他教學 | 作者:pake | 發布時間:2024-10-20 20:10

SUSE Linux 核心管理與驅動程式編譯指南

在 SUSE Linux (openSUSE / SLE) 中,掌握核心(Kernel)管理與驅動程式編譯能夠讓你定制系統、支持新硬體,並進行進階開發。本指南包含核心編譯、驅動編寫與測試完整流程,適用於 SUSE 環境。


目錄

  1. 準備編譯環境
  2. 取得與配置核心原始碼
  3. 編譯與安裝核心
  4. 驅動程式概念與工具
  5. 編寫與編譯簡單模組
  6. 載入與卸載模組
  7. 進階驅動開發建議
  8. 除錯與測試
  9. 結語

準備編譯環境

安裝編譯及核心開發工具:

sudo zypper install -t pattern devel_kernel
sudo zypper install -y git make gcc bc libopenssl-devel ncurses-devel

檢查目前核心版本:

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

驅動程式概念與工具


編寫與編譯簡單模組

範例: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

進階驅動開發建議


除錯與測試


結語

透過本指南,您可在 SUSE Linux 環境中完成核心編譯、安裝與自訂驅動程式開發,並運用多種除錯工具提升驅動品質。深入瞭解核心內部將有助於系統最佳化與硬體支援擴充。

⬅ 上一篇 下一篇 ➡
🔙 返回 其他教學 📚 返回教學列表 🏠 返回首頁