在 CentOS 上“编译 drivers”通常分几种情况,我先按最常见场景给你讲,然后再说具体步骤。
下面以 CentOS 7 / 8 / Stream 编译 内核驱动模块 为例。
# 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)
my_driver/
├── my_driver.c
└── Makefile
#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");
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
systemctl set-default multi-user.target
reboot
chmod +x NVIDIA-Linux-x86_64-*.run
./NVIDIA-Linux-x86_64-*.run
git clone xxx
cd xxx
make
sudo make install
sudo modprobe xxx
uname -r
ls /lib/modules/$(uname -r)/build
你可以告诉我:
我可以直接帮你写 对应驱动的编译命令。