首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >i2c子系统如何将设备与驱动程序匹配?

i2c子系统如何将设备与驱动程序匹配?
EN

Unix & Linux用户
提问于 2020-08-05 06:35:16
回答 1查看 1.3K关注 0票数 3

我对这件事的理解很少,所以请原谅我。根据我到目前为止收集的信息,Linux上的i2c子系统识别了附加的设备,然后以某种方式将它们与加载的驱动程序模块相匹配。在识别匹配的地方,它调用驱动程序的探测函数,该函数实际上启动了驱动程序设置。

我很难调试一个非功能摄像头;我可以看到i2c子系统看到了它的存在,并在/sys/bus/i2c/i2c-7中为它构建了目录,而且我可以判断这个驱动程序的.probe_new()函数没有被调用,因为我向它添加了一堆调试消息。因此,我猜想设备连接到驱动程序的步骤已经丢失,但是我不知道它是如何工作的。

有人能解释i2C子系统是如何执行设备->驱动程序匹配的吗?

编辑:

为了清楚起见,我知道驱动程序声明它名为"ov2680":

代码语言:javascript
运行
复制
static const struct i2c_device_id ov2680[] = {
    {"ov2680", 0},
    {},
};
MODULE_DEVICE_TABLE(i2c, ov2680_id);

我不知道的是,i2c子系统如何从设备中获取一个值,以便将其与驱动程序中声明的设备id匹配?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-08-05 08:01:27

I S.C不支持设备枚举,因此内核提供了初始化I S/C设备的四种不同方法

  • 将它们列在设备树中(经纱i.MX7板ov2680实现这一点)、ACPI表或板文件(忽略后者,只提供向后兼容性);
  • 当硬件“知道”它们的存在时,显式地实例化它们(例如,在电视适配器中,这种情况很常见,它们使用内部I 2 C总线连接它们的各种组件);
  • 在公交初始化过程中对其进行探索;
  • 从用户空间设置它们。

后者应该允许您强制探测设备,如果您知道它在总线上的地址:

代码语言:javascript
运行
复制
echo ov2680 0x50 > /sys/bus/i2c/devices/i2c-7/new_device

一旦您验证了这一点,您就可以确定需要在哪里添加信息,以便设备自动初始化,或者使用基于设备的探测或基于总线的探测。内核文档(见上面的第一个链接)应该会让您朝着正确的方向前进。

基于您对OVTI2680的评论,我怀疑这里的问题是有两个OmniVision OV2680驱动程序,drivers/media/i2c/ov2680.cdrivers/staging/media/atomisp/i2c/atomisp-ov2680.c。前者使用devicetree,后者使用ACPI,而OVTI2680文件在您的i2c目录中的存在表明后者正在加载。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/602925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档