Ubuntu Server 14.04升级内核后消除i2c NAK bailout错误方法
解决Ubuntu Server 14.04内核升级后i2c NAK错误的方法
我之前处理过类似的生产环境问题,这个i2c i2c-1: sendbytes: NAK bailout错误,本质是内核加载了不需要的I2C总线模块,但你的服务器硬件上并没有对应I2C设备在运行,导致模块反复尝试通信失败。下面是具体的解决步骤:
第一步:确认加载的I2C模块
先找出当前系统中正在运行的I2C相关模块,执行以下命令:
lsmod | grep i2c
你会得到类似这样的输出(以常见Intel主板为例):
i2c_i801 20480 0 i2c_core 53248 1 i2c_i801
这里的i2c_i801就是需要处理的目标模块(不同硬件可能模块名不同,比如i2c_piix4等)。
第二步:临时禁用模块(测试验证)
先临时禁用该模块,观察是否能消除错误:
sudo rmmod i2c_i801
执行后等待几分钟,如果不再出现NAK错误提示,说明找对了问题模块。注意这个操作是临时的,服务器重启后模块会重新加载。
第三步:永久禁用模块
如果临时禁用有效,就可以永久屏蔽这个模块:
- 打开黑名单配置文件:
sudo nano /etc/modprobe.d/blacklist.conf
- 在文件末尾添加一行,替换成你找到的模块名:
blacklist i2c_i801
- 保存退出后,更新initramfs使配置生效:
sudo update-initramfs -u -k all
- 重启服务器,之后该模块就不会自动加载,错误也会彻底消失。
补充说明
因为你的服务器是生产环境且未安装Xserver,基本不会用到I2C总线设备(比如桌面环境的传感器、特定外设),所以禁用相关模块完全不会影响系统正常运行。如果后续有需要使用I2C设备的场景,只需从黑名单中移除对应条目,再重新更新initramfs即可恢复。
内容的提问来源于stack exchange,提问作者int_ua
相关产品推荐
相关产品推荐

