rmmod命令卸载驱动后重启后为什么驱动还在? 安排!

1原因

  • insmod是临时加入系统的,重启后会被消除。
  • rmmod是临时卸载的,重启后驱动还在

2 linux开机时驱动的加载流程

Linux系统开机后,首先加载initramfs文件中包含的驱动程序,如果相应的设备对应的驱动不在initramfs文件包含范围内,那么会去硬盘中存储的驱动库中去寻找匹配的驱动进行加载;硬盘中驱动库的位置即为:/lib/modules/“uname -r”/;所以相应的驱动只要在硬盘的驱动库或者initramfs中至少存在一个就可以正常加载,一旦在initramfs中加载成功,无论硬盘中的驱动库中存在的驱动版本是否相同都不会重新去加载。Initramfs中包含的驱动ko文件在目录lib/modules/下,具体包含的ko可依次查看。

3 升级驱动

3.1 modprobe vs insmod

modprobe不仅仅加载驱动,而且还会加载其依赖,当确定驱动模块不需要依赖的时候就用insmod xxx .不过这两种方法都只是临时的加载驱动,重启系统后就没有了,只作为临时调试用。

3.1.1 modprobe

注:在使用这个命令加载模块前先使用depmod -a命令生成modules.dep文件,该文件位于/lib/modules/$(uname -r)目录下;
modprobe命令智能地向内核中加载模块或者从内核中移除模块,可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的依赖关系,决定要载入哪些模块。若在载入过程中出错,modprobe会卸载整组的模块。

载入模块的命令:
(1) 载入指定的模块:modprobe drv.ko
(2) 载入全部模块:modprobe -a

卸载模块的命令:modprobe -r drv.ko

modprobe命令用于智能地向内核中加载模块或者从内核中移除模块。

3.2 dracut --force升级.ko 驱动模块

以i40e驱动为例,假如我们采用make&make install的方式在当前的环境上编译升级驱动时,i40e驱动的makefile文件自动会为我们执行dracut --force命令去同时更新initramfs文件使i40e驱动更新。
而当我们为其他的现场环境编译驱动时,这时无法直接在线程环境上make&make install命令去安装,而一般我们采用编好的i40e.ko驱动文件去替换掉原有的i40e.ko文件。
这时更新驱动的流程如下:

(1)将i40e驱动拷贝到/lib/modules/$(uname -r)/kernel/drivers/net/ethernet/intel/i40e文件夹下,替换系统原有的i40e.ko.xz文件;(升级系统原有的驱动)
(2)执行depmod –a重新生成模块依赖关系;
(3)执行modinfo i40e查看相关信息是否与当前替换的版本信息一致;
(4)如果当前环境下可以成功执行rmmod i40e卸载当前环境下的驱动,则执行modprobe i40e加载驱动即可生效,无需重启;
(5)执行dracut --force命令重新生成initramfs文件(该文件中包含有老版本的i40e驱动,如果不进行更新则重启后依然后加载老版本的驱动);

(6)如果无法卸载当前环境下的i40e驱动,则重启后生效;

note:depmod –a 和dracut --forece命令的执行路径在/lib/modules/$(uname -r)/目录下执行才行

#升级驱动脚本例子
#!/bin/bash
#./driver.sh a   (make all)
#./driver.sh    (make module)
echo $1

if [ "$1" = "a" ];then
	echo "make all"
	make -j12
else
	echo "make module"
	make modules SUBDIRS=drivers/scsi/mpt3sas
fi
if [ $? -eq 0 ];then
	rm /lib/modules/$(uname -r)/kernel/drivers/scsi/mpt3sas/mpt3sas.ko
	cp ./drivers/scsi/mpt3sas/mpt3sas.ko /lib/modules/$(uname -r)/kernel/drivers/scsi/mpt3sas/
	cd /lib/modules/4.15.10/
	depmod -a
	dracut --force
	update-initramfs -u
	#rmmod mpt3sas
	dmesg -C
	cd /lib/modules/4.15.10/kernel/drivers/scsi/mpt3sas
	#modprobe  mpt3sas.ko
	#insmod mpt3sas.ko
else
	echo "fail!"
fi

# Note: For certain distributions like (but not limited to) Red Hat Enterprise
# Linux 7 and Ubuntu, once the driver is installed, you may need to update the
# initrd/initramfs file to prevent the OS loading old versions of the
# driver. Use the dracut utility on Red Hat distributions:
# 	# dracut --force

#    For Ubuntu:
# 	# update-initramfs -u


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值