温馨提示×

centos drivers怎样手动编译

小樊
42
2026-10-09 03:28:04
栏目: 智能运维

在 CentOS 上**手动编译驱动(kernel module / driver)**通常分为几种场景:

  • 编译 内核模块(.ko),如网卡、显卡、USB 驱动
  • 编译 第三方驱动源码包(如 NVIDIA、RTL8192、igb 等)
  • 编译 内核本身(较少见)

下面以**最常见的“手动编译内核模块驱动”**为例说明完整流程。


一、准备工作

1. 安装编译依赖

sudo yum groupinstall "Development Tools" -y
sudo yum install kernel-devel kernel-headers -y

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

查看当前内核:

uname -r

查看已安装 kernel-devel:

rpm -qa | grep kernel-devel

如不一致:

sudo yum install kernel-devel-$(uname -r)

二、获取驱动源码

常见来源:

  • 官方厂商(Intel / Broadcom / NVIDIA)
  • GitHub
  • tar.gz 源码包

示例:

cd /usr/src
sudo tar -xzf driver.tar.gz
cd driver

三、编译驱动(标准方式)

1. 配置编译环境

大多数驱动支持:

make

如果驱动依赖特定内核路径:

make KDIR=/usr/src/kernels/$(uname -r)

2. 安装驱动模块

sudo make install

或手动:

sudo cp *.ko /lib/modules/$(uname -r)/extra/
sudo depmod -a

3. 加载驱动

sudo modprobe driver_name

查看是否加载:

lsmod | grep driver_name

四、DKMS 方式(推荐)

如果是长期维护驱动(如 NVIDIA、无线网卡),推荐 DKMS:

sudo yum install dkms -y

结构示例:

driver/
 ├── driver.c
 ├── Makefile
 └── dkms.conf

dkms.conf 示例:

PACKAGE_NAME="driver"
PACKAGE_VERSION="1.0"
BUILT_MODULE_NAME[0]="driver"
DEST_MODULE_LOCATION[0]="/extra"
AUTOINSTALL="yes"

添加并编译:

sudo dkms add ./driver
sudo dkms build driver/1.0
sudo dkms install driver/1.0

五、常见问题

1. 编译报错:kernel version mismatch

✅ 确保:

uname -r == kernel-devel 版本

2. 升级内核后驱动失效

sudo yum install kernel-devel-$(uname -r)
sudo dkms rebuild driver/1.0

3. 驱动签名(Secure Boot)

CentOS + Secure Boot 需签名:

sudo /usr/src/kernels/$(uname -r)/scripts/sign-file

六、示例:编译 Intel 网卡驱动(igb)

tar -xzf igb-5.10.0.tar.gz
cd igb-5.10.0/src
make
sudo make install
sudo modprobe igb

如果你能提供:

  • 具体驱动名称
  • CentOS 版本(7 / 8 / Stream)
  • 报错信息

我可以给你针对性的编译步骤。

0 踩