温馨提示×

centos怎么编译drivers

小樊
42
2026-09-30 08:58:26
栏目: 智能运维

在 CentOS 上“编译 drivers”通常分几种情况,我先按最常见场景给你讲,然后再说具体步骤。


一、先明确你要编译什么 driver

  1. 内核模块(.ko),例如网卡、显卡、USB 驱动
  2. 第三方驱动源码包(如 NVIDIA、RTL 网卡、WiFi 驱动)
  3. 自己写的内核驱动

下面以 CentOS 7 / 8 / Stream 编译 内核驱动模块 为例。


二、准备工作(必须)

1. 安装内核开发包

# CentOS 7
yum install -y kernel-devel kernel-headers gcc make

# CentOS 8 / Stream
dnf install -y kernel-devel kernel-headers gcc make

⚠️ 注意:
kernel-devel 版本必须和当前运行内核一致

uname -r
rpm -qa | grep kernel-devel

如果不一致:

dnf install kernel-devel-$(uname -r)

三、编译一个内核驱动(示例)

1. 驱动源码结构

my_driver/
├── my_driver.c
└── Makefile

2. 示例驱动代码(my_driver.c)

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

static int __init my_init(void)
{
    printk(KERN_INFO "my_driver loaded\n");
    return 0;
}

static void __exit my_exit(void)
{
    printk(KERN_INFO "my_driver unloaded\n");
}

module_init(my_init);
module_exit(my_exit);
MODULE_LICENSE("GPL");

3. Makefile

obj-m += my_driver.o

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

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

clean:
	make -C $(KDIR) M=$(PWD) clean

四、编译 & 加载

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

五、编译“第三方驱动”常见情况

1. NVIDIA 驱动

systemctl set-default multi-user.target
reboot

chmod +x NVIDIA-Linux-x86_64-*.run
./NVIDIA-Linux-x86_64-*.run

2. WiFi / 网卡驱动(如 RTL88x)

git clone xxx
cd xxx
make
sudo make install
sudo modprobe xxx

六、常见问题

❌ 报错:missing kernel headers

uname -r
ls /lib/modules/$(uname -r)/build

❌ Secure Boot 阻止加载

  • 关闭 Secure Boot
  • 或对模块签名

七、如果你愿意,我可以更具体

你可以告诉我:

  • CentOS 版本(7 / 8 / Stream)
  • 驱动类型(网卡 / 显卡 / 自己写的)
  • 报错信息(贴出来)

我可以直接帮你写 对应驱动的编译命令。

0 踩