c - 用户空间中缺少 I2c eeprom 文件 - SFP 模块

标签 c linux-kernel linux-device-driver embedded-linux i2c

我有一些 Linux 内核和 SFP/I2C 驱动程序问题。

我正在为嵌入式板使用 buildroot Linux 内核。

我需要能够读取 SFP i2c 设备的 eeprom 文件。

<强>1。工作案例:

当 SFP 模块从一开始(在内核加载之前)插入我的开发单元板时,当启动完成时,我可以看到并读取路径中的 eeprom 文件:/sys/class/i2c-adapter/i2c- 1/1-0050/eeprom

eeprom file exists

  • 内核在启动时打印 i2c 设备扫描结果:

enter image description here

<强>2。不工作的情况:

如果启动时没有插入 SFP 模块,并且内核完成启动过程,那么当我插入 SFP 模块时,我会观察到路径:

/sys/class/i2c-adapter/i2c-1/1-0050/不包含 eeprom 文件。

eeprom file missing

  • sfp-eeprom 代码的设备树部分:

enter image description here

我的猜测是,SFP 驱动程序负责在插入 SFP 模块后触发该事件,并触发 eeprom 文件的创建。

想问你我错过了什么? sfp 驱动程序中的一些绑定(bind)代码来触发 i2c 扫描之类的?

有什么建议吗?

提前致谢。

最佳答案

已找到此问题的可能解决方法。

使用ethtool -m接口(interface)。

来自 ethtool 手册页:

-m --dump-module-eeprom 从插件模块(例如 SFP+、QSFP)检索并解码 EEPROM(如果可能)

关于c - 用户空间中缺少 I2c eeprom 文件 - SFP 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53515362/

相关文章:

c - ASturct arr[] 和 ASturct * arr[] 之间的区别

计算 C 源代码中忽略注释和空行的行数

c - 退出函数后,使用 realloc 不会将值存储在数组中

linux - SPI Linux 驱动程序

Linux 核心转储位置和 abrtd 配置

linux - sbull ldd3 示例驱动程序卡住

C如何将unsigned long long字符串转换为uint32_t[]?

linux - 在发生内核 panic 时,我可以打印出系统崩溃时持有哪些锁吗?

linux-kernel - DEFINE_IDA 是什么意思?

android - 内核模块在 Android 设备上找不到固件文件;它应该在哪里?