centos如何自定义驱动设置
小樊
35
2025-12-25 13:10:29
CentOS自定义驱动设置全流程
一、准备与编译内核模块
- 确认硬件与内核版本:使用命令查看设备与内核,例如查看网卡/显卡型号用lspci,查看内核版本用uname -r。安装编译依赖(以 EL7/EL8 常见环境为例):yum install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r) gcc make。若需 DKMS 长期维护,可安装 dkms。
- 获取驱动源码并编译为模块(.ko):以 Broadcom BCM43xx 的 wl 驱动为例,解压后执行:
make -C /lib/modules/$(uname -r)/build M=$(pwd)
成功后生成 wl.ko。其他驱动按厂商 README 执行对应 Makefile 或 DKMS 注册流程。
二、安装与开机自动加载
- 安装模块到内核模块目录并更新依赖:将 wl.ko 复制到合适路径(推荐放入已安装内核的模块树,例如 /lib/modules/$(uname -r)/extra/),执行 depmod -a 生成模块依赖索引。
- 配置开机自动加载:在 /etc/modules-load.d/ 下新建配置文件(如 my-driver.conf),写入模块名(不含 .ko),例如:
echo “wl” | tee /etc/modules-load.d/my-driver.conf
重启后用 lsmod | grep wl 验证。
- 需要更早阶段加载(如存储/根文件系统驱动):使用 dracut 将驱动打入 initramfs。示例:
dracut --add-drivers wl -f /boot/initramfs-$(uname -r).img $(uname -r)
然后重启验证。
三、黑名单冲突驱动与参数配置
- 屏蔽冲突模块:创建 /etc/modprobe.d/blacklist-nouveau.conf(以禁用 nouveau 为例):
echo -e “blacklist nouveau\noptions nouveau modeset=0” | tee /etc/modprobe.d/blacklist-nouveau.conf
重建 initramfs 并重启:
dracut --force
reboot
重启后用 lsmod | grep nouveau 确认无输出。
- 模块参数与别名:在 /etc/modprobe.d/*.conf 中设置参数(例如 options 模块名 参数=值)或创建别名(alias),用于定制驱动行为。
四、安装厂商驱动与容器场景
- 厂商驱动安装要点(以 NVIDIA 为例):先完成上述 nouveau 禁用与 initramfs 重建;进入文本模式(如 systemctl set-default multi-user.target 或临时 init 3);执行官方安装包(示例):
chmod +x NVIDIA-Linux-x86_64-<版本>.run
./NVIDIA-Linux-x86_64-<版本>.run -no-x-check -no-nouveau-check -no-opengl-files
验证:nvidia-smi。如需 CUDA,按官方指引安装并设置环境变量(如 PATH/LD_LIBRARY_PATH)。
- Docker 使用 GPU:安装 nvidia-container-toolkit 并重启 Docker,容器运行时添加 –gpus 即可使用宿主机 GPU(适用于 Docker 19.03+)。
五、安装后验证与常见问题
- 验证要点:
- 模块加载:lsmod | grep <模块名>
- 设备绑定:lspci -k | grep -A3 <厂商/设备>(应看到使用的驱动)
- 日志排查:dmesg | tail -n 50
- 功能验证:如 nvidia-smi、网络接口 ip link、存储设备 lsblk/fdisk -l 等。
- 常见问题与处理:
- 内核升级后模块不可用:重新 make 编译并 depmod -a,必要时用 dracut 更新 initramfs。
- Secure Boot 拦截:需在 BIOS 关闭 Secure Boot,或按驱动文档进行签名后注册。
- 多版本并存:使用 modinfo <模块名> 检查 vermagic 与当前 uname -r 是否一致。
- 32/64 位与用户态库:安装对应架构库,避免 Exec format error 或库缺失。