Ubuntu 16.04中Adaptec RAID 8805的aacraid驱动加载问题求助
解决Adaptec RAID 8805 aacraid模块在Ubuntu 16.04.3内核v4.4.0-116下加载失败的问题
你遇到的问题确实和内核v4.4.0-116引入的retpoline补丁直接相关——这个补丁是Linux内核针对Spectre漏洞的缓解措施,而Microsemi提供的旧版aacraid驱动源码没有适配这个编译要求,导致模块与新内核不兼容。下面是几个可行的解决方案,按推荐优先级排序:
方案一:重新编译适配retpoline的aacraid驱动
这是最安全且长期的解决办法,让驱动适配新内核的安全特性:
- 首先确认你手头有Microsemi提供的aacraid驱动源码包,如果没有,建议获取针对4.4.x内核的最新版本(优先选择已经适配retpoline的版本)。
- 解压源码包后进入驱动目录,编辑
Makefile,在编译参数中添加retpoline相关的编译选项:CCFLAGS += -mindirect-branch=thunk-extern - 执行编译命令(确保你已经安装了
linux-headers-$(uname -r)和build-essential工具包):make -C /lib/modules/$(uname -r)/build M=$(pwd) modules - 安装编译好的模块:
make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install - 更新模块依赖并加载驱动:
depmod -a modprobe aacraid - 验证驱动是否正常加载:
lsmod | grep aacraid,同时查看内核日志确认没有报错。
方案二:临时禁用内核retpoline(不推荐)
如果暂时无法编译驱动,可以临时关闭内核的retpoline特性,但这会降低系统的安全性,仅作为临时应急方案:
- 编辑GRUB配置文件:
sudo nano /etc/default/grub - 找到
GRUB_CMDLINE_LINUX_DEFAULT行,添加noretpoline参数,修改后类似:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash noretpoline" - 更新GRUB配置并重启系统:
sudo update-grub sudo reboot - 重启后尝试加载aacraid模块:
sudo modprobe aacraid
方案三:降级回v4.4.0-112内核
如果以上两种方法都无法快速实施,可以暂时降级到之前能正常工作的内核版本:
- 重启系统,在GRUB菜单中选择「Advanced options for Ubuntu」,然后选择
Linux kernel 4.4.0-112启动。 - 如果希望默认使用旧内核,编辑GRUB配置:
sudo nano /etc/default/grub - 设置
GRUB_DEFAULT为旧内核对应的菜单条目编号(可以通过grub-mkconfig -o /boot/grub/grub.cfg查看所有内核条目,通常旧内核在Advanced options下的第2个位置,所以设置为GRUB_DEFAULT="1>2")。 - 更新GRUB并重启:
sudo update-grub sudo reboot
注意事项
- 优先推荐方案一,因为方案二存在安全隐患,方案三只是临时规避问题,长期来看还是需要让驱动适配新内核的安全特性。
- 编译驱动前务必安装对应内核的头文件包:
sudo apt install linux-headers-$(uname -r)
内容的提问来源于stack exchange,提问作者PicoutputCls
相关产品推荐
相关产品推荐

