You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mango Pi MQ-Pro(Allwinner D1)Ubuntu系统下mv64xxx I2C驱动定位、重编译替换及总线锁定故障解决问询

Mango Pi MQ-Pro(Allwinner D1)Ubuntu系统下mv64xxx I2C驱动定位、重编译替换及总线锁定故障解决问询

先梳理下你的环境信息,方便后续排查:

  • 设备:Mango Pi MQ-Pro
  • 处理器:Allwinner D1
  • 系统:Ubuntu 5.17.0-1003-allwinner riscv64
  • 已通过设备树启用I2C3对应引脚,设备树状态显示okay,引脚复用配置正确,但执行i2cdetect -y 0时出现总线锁定错误。

问题1:为什么找不到mv64xxx.ko驱动文件?

这是因为你的mv64xxx I2C驱动是直接编译进内核(built-in),而非作为可加载模块存在的。

验证这个结论很简单:执行以下命令

grep CONFIG_I2C_MV64XXX /boot/config-$(uname -r)

如果输出是CONFIG_I2C_MV64XXX=y,就说明它是内核内置的——这种情况下不会生成单独的.ko文件,也不会出现在lsmod的输出里,内核启动时就会自动加载它,所以你能看到它的报错信息,但找不到对应的模块文件。


问题2:如何替换为Linux 6.4版本的mv64xxx驱动?

你已经尝试编译了新模块但加载无反应,核心原因是内置驱动的优先级高于可加载模块——内核已经加载了内置的旧驱动,不会再加载同名的新模块。解决这个问题有两种可行路径:

路径1:重新编译内核,将新驱动设为内置

  1. 获取当前系统对应的内核源码:
    apt-get source linux-image-$(uname -r)
    
  2. 进入内核源码目录,找到drivers/i2c/busses/i2c-mv64xxx.c,替换为Linux 6.4版本的对应文件(你已经做了适配修改,比如返回值和结构体字段的调整,确保这些修改正确)。
  3. 配置内核:
    先执行你已经完成的make oldconfig,然后用make menuconfig进入图形配置界面,找到:
    Device Drivers -> I2C support -> I2C bus drivers -> Marvell MV64XXX I2C driver,确保它被设为Y(内置)。
  4. 编译并安装内核:
    make -j$(nproc)  # 多线程编译,加快速度
    sudo make modules_install install
    
  5. 重启系统,新内核就会带着修复后的mv64xxx驱动启动。

路径2:重新编译内核,将驱动改为可加载模块

如果不想替换整个内核,可以把旧驱动禁用,新驱动设为模块:

  1. 同样先获取内核源码并替换驱动文件。
  2. 进入make menuconfig,把Marvell MV64XXX I2C driver设为M(模块),同时将原有内置驱动的配置设为N(禁用)。
  3. 编译模块:
    make modules SUBDIRS=drivers/i2c/busses
    
  4. 安装模块:
    sudo cp drivers/i2c/busses/i2c-mv64xxx.ko /lib/modules/$(uname -r)/kernel/drivers/i2c/busses/
    sudo depmod -a
    
  5. 重启后,就可以通过modprobe i2c-mv64xxx加载新模块了。

问题3:I2C总线锁定故障的其他解决思路

除了替换驱动,你还可以尝试这些排查方向:

  • 硬件检查:确认SDA和SCL引脚上的上拉电阻是否正常(一般是4.7kΩ左右),外部I2C设备是否接线正确、有没有短路,设备本身是否故障。很多总线锁定问题其实是硬件导致的。
  • 总线重置:部分内核支持通过sysfs重置I2C总线,尝试执行:
    echo 1 > /sys/bus/i2c/devices/i2c-0/reset
    
    如果这个文件不存在,说明你的驱动不支持该功能。
  • 详细日志排查:用dmesg -w实时查看内核日志,或者cat /var/log/kern.log查看历史日志,看看有没有更多关于mv64xxx驱动的报错细节,比如时钟配置错误、中断异常等,这些可能帮你定位其他潜在问题。

关于你的UPD补充

你编译了新模块但加载无反应,就是因为旧驱动是内置的,内核不会加载同名模块。必须按照上面的内核编译方法,调整驱动的配置类型,才能让修复后的驱动生效。

备注:内容来源于stack exchange,提问作者nx4n

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 15:15:28