Ubuntu开机自动加载驱动模块

本文介绍了在Linux系统中实现驱动模块开机自动加载的两种方式。首先,可以通过将驱动复制到/lib/modules/uname-r/目录下,并在/etc/modules-load.d/创建配置文件添加驱动名称,或者直接编辑已有的modules.conf文件。另一种方法是利用makeinstall命令,通过定制Makefile文件简化安装过程。此外,还讲解了如何编写开机自启脚本来实现驱动的动态加载和系统启动时的其他操作。对于Ubuntu系统,分别阐述了initd和systemd方式的开机自启脚本设置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前我知道有两种方式来实现开机自动加载驱动模块,一种是将驱动模块放到 /lib/modules/uname -r/ 中,然后在修改 /etc 下的 modules 等文件;另一种是编写开启自启脚本,将驱动安装等操作放入其中。本文主要介绍第一种。

不使用开机自启脚本

1. 将驱动文件复制到内核驱动目录

/lib/modules/uname -r/kernel/driver 下存放了内核的所有驱动模块,要想让系统能自动找到我们的驱动,我们需要将自己的驱动模块放到该目录下(驱动放到 /lib/modules/uname -r/ 下的任意目录,都可以被系统找到)。uname -r 是当的内核版本,不同内核版本有各自的内核目录。

在这里插入图片描述

2. 使用命令 depmod -a (非必要)

depmod 命令用于分析可载入模块的相依性,-a 参数的作用是探测所有的模块。我所用的驱动文件没有其他依赖项(有些驱动存在依赖项,必须先加载其他驱动后才能进行安装),所以可以不调用 depmod 命令。
在这里插入图片描述

3. 将模块设置为自动加载

这里介绍两种方式将模块设置为自动加载(其实差不多),第一种:在 /etc/modules-hoad.d/ 目录下创建一个 xxx.conf(名字任意)文件,在里面添加我们要加载的驱动名(一个驱动占一行)。

在这里插入图片描述

第二种和第一种类似, /etc/modules-hoad.d/ 目录下已经有了一个 modules.conf 文件,在文件的最后面添加我们要加载的驱动。这是一个软链接文件,所以我们直接操作 /etc/modules 也是可以的。

在这里插入图片描述

4. 重启验证

上述操作完成后,重启系统,使用 lsmodcat /proc/modules 命令查看驱动是否已经加载。

在这里插入图片描述


make install 一步安装

虽然我经常会用到 make install 来安装一些驱动,但我一直没去了解它的执行原理,找一些现成的 Makefile 文件分析了一下,发现其实也挺简单的,下面的总结仅供参考。

之前我们要通过三步来将其设置为开机自动加载,但如果要将这个驱动安装在多台机器上且同时要进行自动加载呢?这时我们可能会想到将上述操作写入一个脚本,每台机器都执行一次。但不要忘了我们有一个现成的 “脚本”—— make 工具。

在我们的 Makefile 文件中添加 install 选项,将上文介绍的三大步骤一一写入。

install (指定下图的第 12 行)是一个命令,它的作用和 cp 很相似,都是将文件复制到另一个文件,但 cp 会先清空原文件再写入新文件,而 install 会先删除原文件再写入新文件。(Makefile 中尽量用 install 命令)

第三步新建并写入 xxx.conf 文件时,最好使用 >> (追加)的方式写入我们的驱动名,特别是我们的目标文件为 modules.conf 时(不过 modules.conf 默认也是空的)。

在这里插入图片描述

修改完 Makefile 后 ,使用 make install 进行安装(要使用 root 权限,不过 make 一般不需要用到 root 权限)。这样我们就能通过一个命令实现驱动的自动加载了。

在这里插入图片描述

开机自启脚本

开机自启脚本不仅可以实现驱动自动安装,还可以实现其他任意操作,特别是在驱动频繁更新的情况下,可以在脚本中重新编译和加载驱动模块。

ubuntu 支持很多种开机自启方式,在 ubuntu 16.04 版本下,我最常用到的是 initd 方式(18.04 后的版本已经不再支持了),简单介绍一下步骤:

  1. 编写一个脚本 xxx.sh,设置可执行权限
  2. 将脚本复制或链接到 /etc/init.d/ 目录下
  3. 使用 update-rc.d xxx.sh defaults 99 (99 可改成其他数值,表示脚本的启动优先级)

当然还有 /etc/rc.local 的方式,直接在该脚本中添加我们还要执行的操作即可。

如果是 Ubuntu 18.04 及以上的版本,就只能使用 systemd 的方式实现脚本开机自启,不再支持 initd。详情可以参考我之前写的一篇文章:Ubuntu 20.04 设置开机自启脚本

### 解决Ubuntu系统安装NVIDIA显卡驱动后出现的开机黑屏问题 #### 禁用 Nouveau 驱动程序 由于 Nouveau 是 Ubuntu 开发人员针对 NVIDIA 显卡开发的反向工程驱动,为了防止其与官方 NVIDIA 驱动冲突,建议在安装 NVIDIA 官方驱动之前禁用 Nouveau。具体操作如下: 卸载现有的 NVIDIA 驱动(如果已存在): ```bash sudo apt-get --purge remove nvidia* sudo apt autoremove ``` 编辑系统的黑名单文件来阻止加载 Nouveau 模块: ```bash sudo nano /etc/modprobe.d/blacklist-nouveau.conf ``` 在此文件中添加以下两行并保存: ``` blacklist nouveau options nouveau modeset=0 ``` 更新初始化内存盘映像以应用更改: ```bash sudo update-initramfs -u ``` #### 进入恢复模式执行修复命令 当遇到黑屏情况时,可以通过进入恢复模式来进行进一步的操作。重启计算机并在启动过程中选择 GRUB 菜单中的“Advanced options”,然后选择带有 "(recovery mode)" 的内核版本。 一旦进入了 recovery menu,选择 `root` 选项获得 root shell 提示符。此时可以尝试重新配置 Xorg 或者完全重装 NVIDIA 驱动器: ```bash # 如果只是想要重建Xorg配置而不改变现有设置 sudo dpkg-reconfigure xserver-xorg # 或者彻底移除旧版驱动再全新安装最新稳定版驱动 apt-get clean && apt-get autoclean add-apt-repository ppa:graphics-drivers/ppa apt-get update apt-get install nvidia-driver-<version_number> ``` #### 更换显示管理器 (可选) 有时 GDM3 可能会引发兼容性问题;因此考虑切换到 LightDM 可作为一个有效的替代方案: ```bash sudo apt-get install lightdm # 在提示选择默认Display Manager的时候挑选LightDM ``` 完成上述步骤之后正常重启电脑应该能够解决大部分由新安装的 NVIDIA 显卡驱动引起的黑屏现象[^1][^2]。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小辉_Super

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值