如何禁用非模块编译的I2C Designware支持?解决Arch Linux关机内核panic
解决Alienware Aurora R7上Arch Linux关机时I2C Designware相关内核崩溃问题
针对你遇到的这个关机触发Kernel Panic的问题——既然i2c-designware-core在4.10+版本内核里是直接编译进内核而非模块,没法用黑名单禁用,那可以试试下面两种可行的方案:
1. 用内核启动参数快速禁用控制器
这是不用重新编译内核的简便方法,通过内核启动参数直接关闭对应硬件的支持:
- 如果你用GRUB作为启动管理器,先编辑配置文件:
sudo nano /etc/default/grub - 找到
GRUB_CMDLINE_LINUX这一行,在引号内添加i2c_designware_platform.enable=0或者i2c_designware_pci.enable=0——具体选哪个,取决于你的硬件用的是平台版还是PCI版的控制器。举个示例:GRUB_CMDLINE_LINUX="quiet splash i2c_designware_platform.enable=0" - 保存文件后,更新GRUB的启动配置:
sudo grub-mkconfig -o /boot/grub/grub.cfg - 重启系统后,这个I2C控制器就会被禁用,应该能解决关机崩溃的问题。要是不确定选哪个参数,可以查看
dmesg日志,搜索i2c_designware,日志里会明确标注是platform还是pci设备。
2. 编译自定义内核彻底移除该支持
如果你想彻底把这个组件从内核中剔除,那就需要编译自定义内核:
- 先安装编译所需的依赖和内核相关包:
sudo pacman -S linux linux-headers base-devel - 也可以克隆主线内核源码来编译:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git cd linux - 复制当前正在使用的内核配置,这样能保留现有配置,只修改需要调整的部分:
cp /boot/config-$(uname -r) .config - 打开图形化配置菜单:
make menuconfig - 在菜单路径
Device Drivers > I2C support > I2C Hardware Bus support下,找到Synopsys DesignWare I2C的相关选项(分为Platform和PCI两个版本),将原本的*(编译进内核)改为N(完全移除)。 - 用多线程加速编译(
nproc会自动识别你的CPU核心数):make -j$(nproc) - 安装编译好的模块和内核:
sudo make modules_install sudo make install - 最后更新启动管理器配置,确保新编译的内核能被加载。
内容的提问来源于stack exchange,提问作者muru
相关产品推荐
相关产品推荐

