ubuntu:自动加载第三方设备驱动
背景
有时,我们需要让Ubuntu系统加载第三方的内核模块,但是重新编译内核显然太繁琐,因此可以使用某些手段来手动加载或者自动加载这些模块。
本文介绍几种方法,用来设置开机加载这些模块。
方法一
该方法适合部署阶段,此时驱动已经定型,几乎不会有大改动。
详细请参考以下:
启动自动加载内核模块设置方法
方法二
利用大家熟悉的ra.local,在/etc/rc.local中添加启动脚本
vim /etc/rc.local
#!/bin/sh
insmod /ccc/bbb/aaa.ko &
exit 0
但是从Ubuntu16以后,开始取消这一项的设置,并把这个设置的权限交给了systemd来处理。
然而值得庆幸的是,可以重现这种方式。
详细设置请参考以下:
ubuntu20.04 设置rc.local开机自启
方法三
添加一个Ubuntu的开机启动服务。
1、创建需要开机自启动的脚本,例如test.sh,其内容如下:
#!/bin/bash
touch test.txt
2、在/etc/systemd/user目录下创建一个systemd服务文件, 命名为user-defined.service, 内容如下:
[Unit]
After=network.service[Service]
ExecStart=/home/hqc/test.sh[Install]
WantedBy=default.target
其中,After表示服务何时启动,After=network.service 表示网络连接完成后,启动用户自定义的服务;ExecStart表示我们的脚本(步骤1中的test.sh)的路径;WantedBy默认填default.target。
注意,ExecStart=/home/hqc/test.sh 这里一定不能用 ~/ 来代替/home/$USER
3. 将systemd服务文件和用户自定义的脚本更改权限,使其可执行。
sudo chmod 744 ~/test.sh
sudo chmod 664 /etc/systemd/user/user-defined.service
4. 重新加载系统的systemd服务文件,并启用用户自定义的user-defined.service文件。
sudo systemctl daemon-reload
systemctl --user enable user-defined.service
方法四
使用一个比较普通的思路,在 /etc/init.d/ 目录下建立一个启动脚本,然后在 /etc/rc3.d/ 目录下建立一个软链接到上面的脚本。
注意:软链接的名字必须以‘S’开头。
你可能有多个rc目录,它们之间的关系是这样的
init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d
- 0 - 停机
- 1 - 单用户模式
- 2 - 多用户,但是没有NFS ,不能使用网络
- 3 - 完全多用户模式,推荐模式
- 4 - “打酱油” 模式,没有用到
- 5 - X11 桌面模式
- 6 - 重新启动 (如果将默认启动模式设置为6,Linux将会不断重启)
例如 示例启动脚本名为111testaaa,内容为modprobe 111testaaa,软链接为S111testaaa。
扩展
1、脚本添加到初始化执行的队列
也可以使用以下命令,将脚本添加到初始化执行的队列中去。
update-rc.d xxx defaults NN ### (NN为启动顺序)
注意若是脚本须要用到网络,则NN需设置一个比较大的数字,如99。
例如
$ cd /etc/init.d
$ sudo update-rc.d test defaults 95
其中数字95是脚本启动的顺序号,按照本身的需要修改相应即可。
在你有多个启动脚本,而它们之间又有前后启动的依赖关系时你就知道这个数字的具体做用了。该命令的输出信息参考以下:
update-rc.d: warning: /etc/init.d/test missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
Adding system startup for /etc/init.d/test ...
/etc/rc0.d/K95test -> ../init.d/test
/etc/rc1.d/K95test -> ../init.d/test
/etc/rc6.d/K95test -> ../init.d/test
/etc/rc2.d/S95test -> ../init.d/test
/etc/rc3.d/S95test -> ../init.d/test
/etc/rc4.d/S95test -> ../init.d/test
/etc/rc5.d/S95test -> ../init.d/test
2、卸载启动脚本的方法
$ cd /etc/init.d
$ sudo update-rc.d -f test remove
命令输出的信息参考以下:
Removing any system startup links for /etc/init.d/test .../etc/rc0.d/K95test/etc/rc1.d/K95test/etc/rc2.d/S95test/etc/rc3.d/S95test/etc/rc4.d/S95test/etc/rc5.d/S95test/etc/rc6.d/K95test