如何在EDK2中启用I2C配置?Minnowboard Max平台问题求助
I2cDxe驱动支持性检查失败的解决方案
问题背景
使用\MdeModulePkg\Bus\I2c\I2cDxe驱动,通过load I2cDxe.efi命令加载后,I2cHostDriverSupported和I2cBusDriverSupported均返回Unsupported。代码显示这两个函数分别尝试打开gEfiI2cBusConfigurationManagementProtocolGuid和gEfiI2cEnumerateProtocolGuid协议,平台为Minnowboard Max,基于edk2-platform\Vlv2TbltDevicePkgX64开发。
问题1解答:I2cHostDriverSupported执行前是否需要主机配置?
- 不需要提前配置从机地址、频率:
I2cHostDriverSupported仅做协议存在性检查,验证系统中是否有I2C控制器驱动发布了gEfiI2cBusConfigurationManagementProtocolGuid协议,和具体的设备配置参数无关。 - 参考示例:
- 查看EDK2源码中
MdeModulePkg\Bus\I2c下的驱动实现,了解I2C总线驱动与控制器驱动的交互逻辑; - 参考
Vlv2TbltDevicePkgX64中板级I2C控制器驱动的初始化流程,这类驱动会先完成硬件初始化,再发布gEfiI2cBusConfigurationManagementProtocolGuid协议,之后加载I2cDxe即可通过支持性检查。
- 查看EDK2源码中
问题2解答:Minnowboard Max平台的配置调整方案
要让两个函数返回EFI_SUCCESS,核心是确保所需的协议被正确发布,具体步骤如下:
- 启用板级I2C控制器驱动
确认Vlv2TbltDevicePkgX64\Bus\I2c\I2cControllerDxe驱动已添加到平台DSC文件的编译列表,且在FDF文件中设置为早于I2cDxe加载——该驱动负责初始化Minnowboard Max的I2C硬件并发布gEfiI2cBusConfigurationManagementProtocolGuid协议。 - 验证硬件描述的正确性
检查平台的ACPI表(DSDT)或设备树,确保I2C控制器的基地址、中断号、时钟频率等硬件参数与Minnowboard Max的实际硬件匹配,错误的参数会导致控制器驱动初始化失败,无法发布协议。 - 检查协议发布状态
在UEFI Shell中执行dmpstore -guid gEfiI2cBusConfigurationManagementProtocolGuid和dmpstore -guid gEfiI2cEnumerateProtocolGuid命令,确认这两个协议已存在。如果不存在,查看控制器驱动的初始化日志(可通过UEFI调试串口输出),定位硬件初始化失败的原因。 - 调整驱动加载顺序
在平台FDF文件中,将I2cDxe的加载项放在板级I2C控制器驱动之后,确保I2cDxe加载时所需的协议已经被发布。
内容的提问来源于stack exchange,提问作者gordontcp
相关产品推荐
相关产品推荐

