linux i2c的设备和驱动是怎样匹配的

linux i2c的设备和驱动是怎样匹配的,第1张

linux下驱动代码分为两个层次,一个是设备抽象,一个是真实设备

像i2c-dev.c属于设备抽象,你没有它,所有char设备的i2c机制都失效

像ad7417.c属于真实设备,没有它只是影响ad7417对应的具体设备。

所以你想使用ad7417的对应设备,这两个文件必...

Linux关于总线、设备、驱动的注册顺序

设备挂接到总线上时,与总线上的所有驱动进行匹配(用bus_type.match进行匹配),

如果匹配成功,则调用bus_type.probe或者driver.probe初始化该设备,挂接到总线上

如果匹配失败,则只是将该设备挂接到总线上。

驱动挂接到总线上时,与总线上的所有设备进行匹配(用bus_type.match进行匹配),

如果匹配成功,则调用bus_type.probe或者driver.probe初始化该设备;挂接到总线上

如果匹配失败,则只是将该驱动挂接到总线上。

需要重点关注的是总线的匹配函数match(),驱动的初始化函数probe()

1. platform_bus_type--总线先被kenrel注册。

2. 系统初始化过程中调用platform_add_devices或者platform_device_register,将平台设备(platform devices)注册到平台总线中(platform_bus_type)

3. 平台驱动(platform driver)与平台设备(platform device)的关联是在platform_driver_register或者driver_register中实现,一般这个函数在驱动的初始化过程调用。

通过这三步,就将平台总线,设备,驱动关联起来。

1. platform bus先被kenrel注册。

------------------------------------------------------

do_basic_setup() -->-driver_init() -->-platform_bus_init()-->bus_register()

2. 系统初始化过程中调用platform_add_devices或者platform_device_register,将平台设备(platform devices)注册到平台总线中(platform_bus_type)

------------------------------------------------------

系统启动阶段,总线的驱动链表还是空的,所以启动阶段的platform_add_devices()只负责将设备添加到总线的设备链表上。

在 Linux 系统中,设备树(Device Tree)是一种数据结构,它用于描述硬件结构,帮助内核在启动时确定硬件设备的位置和如何使用它们。在设备树中,节点表示硬件设备,而边表示设备之间的关系。

总线(Bus)是用于在计算机系统中传输数据的通道。它通常是一组连接设备的线路,并允许设备之间交换数据。在 Linux 中,总线也在设备树中表示为节点,并且设备节点与总线节点之间存在边。

因此,在 Linux 系统中,设备树用于描述硬件结构,其中包含设备和总线,以及它们之间的关系。在驱动程序开发中,开发人员通常使用设备树来确定特定设备的位置和如何与其通信。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8690665.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存