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

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

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

Linux 核心(Kernel)管理與驅動程式編譯是高級 Linux 開發與系統管理的關鍵技能。本篇將介紹如何編譯核心、開發與編譯驅動程式,並提供詳細的指令與測試方式。


目錄


準備核心編譯環境

首先,確保系統具備編譯核心與驅動程式所需的工具。

安裝必要的套件

sudo dnf install -y gcc make flex bison elfutils-libelf-devel openssl-devel ncurses-devel bc git perl

檢查系統核心版本

uname -r

下載與配置 Linux 核心

下載官方核心源碼

cd /usr/src/
sudo git clone --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git linux-kernel
cd linux-kernel

複製當前系統的核心配置

cp -v /boot/config-$(uname -r) .config
make oldconfig

自訂核心配置(可選)

make menuconfig

編譯與安裝 Linux 核心

編譯核心

make -j$(nproc)

安裝核心模組

sudo make modules_install

安裝核心

sudo make install

更新 GRUB 並重啟

sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

驅動程式基礎概念

驅動程式類型

核心模組管理指令


編寫與編譯簡單驅動程式

建立 hello_world.c 驅動程式

#include <linux/module.h>
#include <linux/kernel.h>

static int __init hello_init(void) {
    printk(KERN_INFO "Hello, Kernel!\n");
    return 0;
}

static void __exit hello_exit(void) {
    printk(KERN_INFO "Goodbye, Kernel!\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Linux Expert");
MODULE_DESCRIPTION("A Simple Hello World Kernel Module");

建立 Makefile

obj-m := hello_world.o

KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

all:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
    rm -f *.ko *.mod.* *.o *.symvers *.order

編譯驅動程式

make

載入與卸載驅動程式

載入驅動模組

sudo insmod hello_world.ko

驗證驅動是否載入

lsmod | grep hello_world

查看核心日誌輸出

dmesg | tail -20

卸載驅動模組

sudo rmmod hello_world

進階驅動開發

開發字符設備驅動

  1. 註冊 cdev 設備
  2. 設定 file_operations 結構
  3. 設定 /dev 入口

開發 PCI 驅動

  1. 掃描 PCI 設備 lspci -nn
  2. 使用 pci_register_driver() 註冊驅動

開發 USB 驅動

  1. 掃描 USB 設備 lsusb
  2. 設定 usb_driver 結構

驅動程式除錯與測試

啟用核心除錯模式

sudo dmesg -n 7

使用 gdb 偵錯核心模組

gdb vmlinux

使用 ftrace 追蹤函數調用

sudo mount -t debugfs nodev /sys/kernel/debug
echo function > /sys/kernel/debug/tracing/current_tracer
cat /sys/kernel/debug/tracing/trace

結語

本篇提供了 Linux 核心管理與驅動程式編譯的完整指南,包括核心編譯、驅動開發、載入與除錯技巧。透過這些技術,您可以深入理解 Linux 核心並開發高效能驅動模組。

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