在 Debian 上“编译驱动”通常指 内核模块(kernel module) 的编译,比如网卡、显卡、USB 设备等第三方或自行编写的驱动。下面按常见场景和系统方式说明。
sudo apt update
sudo apt install build-essential linux-headers-$(uname -r)
说明:
build-essential:gcc、make 等linux-headers-$(uname -r):当前内核的头文件(必须版本一致)查看当前内核:
uname -r
如果驱动在内核源码中:
sudo apt install linux-source
cd /usr/src/linux-source-*
tar xf linux-source-*.tar.xz
cd linux-source-*
make menuconfig # 选择驱动为 M(模块)
make modules
sudo make modules_install
sudo modprobe 驱动名
⚠️ 一般不建议从头编译整个内核,除非必要。
git clone 驱动仓库地址
cd 驱动目录
make
sudo make install
sudo modprobe 驱动模块名
有些驱动使用 DKMS(推荐):
sudo apt install dkms
sudo dkms add ./驱动目录
sudo dkms install 驱动名/版本
DKMS 的好处:内核升级后自动重新编译。
hello.c#include <linux/module.h>
#include <linux/kernel.h>
static int __init hello_init(void) {
printk(KERN_INFO "Hello Debian\n");
return 0;
}
static void __exit hello_exit(void) {
printk(KERN_INFO "Bye Debian\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
obj-m += hello.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
make
sudo insmod hello.ko
dmesg | tail
sudo rmmod hello
linux/xxx.h→ 没装 linux-headers
→ 用 DKMS 或重新 make
若开启 Secure Boot:
sudo apt install mokutil
并给模块签名,否则无法加载。
Debian 编译驱动 = 装 headers + make + modprobe
如果你能告诉我:
我可以给你精确到命令的步骤。