背景
最近遇到一个麻烦的问题,几台服务器在升级内核之后,新的内核启动直接panic,无法正常驱动raid卡. 通过进入ramos,发现新的内核里面没有对应的raid卡驱动ko文件. 后面才发现老的内核中rraid卡驱动是从源代码单独编译出来的. 换了新的kernel之后,忘了给新的内核重新编译这个驱动就重启了,导致kernel panic.
在linux中,每个驱动ko文件是与一个特定内核绑定的,也就是在老内核下面编译的驱动在新内核下面无法使用,同样的,在新内核下面编译的驱动在老内核也无法使用.
在linux kernel源代码树中,已经包含了我们常见的很多驱动,那么在安装一个新的内核rpm包的时候,这些驱动也就被一起安装了. 但是有些驱动不在源代码树里面,这些驱动需要手动编译安装;还有一些驱动虽然在源代码树中,但是源代码树中的可能太老了,新的驱动也需要单独编译安装.
使用dkms来管理源代码树外的驱动
dkms就是用来处理在kernel源代码树中不存在的驱动,或者我们自己维护的驱动的. 它可以保证新的kernel安装之后,这些驱动被自动重新编译,自动运行depmod命令,自动生成新的initram文件.
dkms这个工具存在于epel源中,需要先保证epel打开,然后yum -y install dkms就可以安装这个工具了.使用rpm -ql dkms看下这个包安装了什么东西.
![561fb511c23096af7babbfb5858e2ca4.png](https://i-blog.csdnimg.cn/blog_migrate/768cbf031f37f82cdb6dc51ecc77f4d5.jpeg)
/usr/sbin/dkms是dkms命令行本身,是一个bash脚本.我们用的最多的是dkms status,用来查看当前dkms管理的驱动的状态
/var/lib/dkm