温馨提示×

debian drivers怎么编译

小樊
42
2026-10-01 17:54:24
栏目: 智能运维

在 Debian 上“编译驱动”通常指 内核模块(kernel module) 的编译,比如网卡、显卡、USB 设备等第三方或自行编写的驱动。下面按常见场景和系统方式说明。


一、准备编译环境

1. 安装必要工具

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 驱动名

⚠️ 一般不建议从头编译整个内核,除非必要。


三、编译第三方驱动(最常见)

示例:网卡 / WiFi 驱动

git clone 驱动仓库地址
cd 驱动目录
make
sudo make install
sudo modprobe 驱动模块名

有些驱动使用 DKMS(推荐):

sudo apt install dkms
sudo dkms add ./驱动目录
sudo dkms install 驱动名/版本

DKMS 的好处:内核升级后自动重新编译。


四、自己写一个简单的驱动并编译

1. 示例 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");

2. Makefile

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

3. 编译并加载

make
sudo insmod hello.ko
dmesg | tail
sudo rmmod hello

五、常见问题

1. 报错:找不到 linux/xxx.h

→ 没装 linux-headers

2. 内核升级后驱动失效

→ 用 DKMS 或重新 make

3. 驱动签名(Secure Boot)

若开启 Secure Boot:

sudo apt install mokutil

并给模块签名,否则无法加载。


六、总结一句话

Debian 编译驱动 = 装 headers + make + modprobe

如果你能告诉我:

  • 是什么设备(网卡 / 显卡 / 打印机等)
  • Debian 版本(11 / 12)
  • 驱动来源(官方 / GitHub / 自己写)

我可以给你精确到命令的步骤。

0 踩