i2c_bus_type 用于表示 I2C 总线类型。bus_type 是Linux 内核中用于表示总线类型的结构体,用于管理该类型总线上的设备。 struct bus_type i2c_bus_type = { .name = "i2c", .match = i2c_device_match, .probe = i2c_device_probe, .remove = i2c_device_remove, .shutdown = i2c_device_shutdown, ...
a. at24cxx_driver放入i2c_bus_type的drv链表 并且从dev链表里取出能匹配的i2c_client并调用probe driver_register b. 对于每一个适配器,调用__process_new_driver(在i2c_bus_type的dev链表中不但要挂i2c_client外,还会挂i2c_adpter。当drv和dev链表比较的时候,drv不会跟i2c_adpter比较,只会跟i2c_client比较,...
static inline int i2c_add_driver(struct i2c_driver *driver)则向i2c_bus_type注册i2c_driver。 i2c_add_driver(&dummy_driver);-->i2c_register_driver(THIS_MODULE, driver);-->&dummy_driver->driver.bus = &i2c_bus_type;-->res = driver_register(&(&dummy_driver)->driver);//将驱动注册到i2c_...
structbus_type{constchar*name;constchar*dev_name;structdevice*dev_root;structdevice_attribute*dev_attrs;/* use dev_groups instead */conststructattribute_group**bus_groups;conststructattribute_group**dev_groups;conststructattribute_group**drv_groups;int(*match)(structdevice *dev,structdevice_driver ...
struct bus_type i2c_bus_type={.name="i2c",.match=i2c_device_match,.probe=i2c_device_probe,.remove=i2c_device_remove,.shutdown=i2c_device_shutdown,.pm=&i2c_device_pm_ops,}; 根据Linux设备驱动模型的原理,I2C总线下会挂载两条链表,分别为设备链和驱动链,只要其中一个链表有结点插入,即会通过i2c_...
struct bus_type i2c_bus_type={.name="i2c",.match=i2c_device_match,.probe=i2c_device_probe,.remove=i2c_device_remove,.shutdown=i2c_device_shutdown,}; I2C总线对应着/bus下的一条总线,这个i2c总线结构体管理着i2c设备与I2C驱动的匹配,删除等操作,I2C总线会调用i2c_device_match函数看I2C设备和I2C驱动...
(1)首先linux内核已经帮你定义好了一个I2C的虚拟总线(i2c_bus_type),在这个总线上维护者两个链表:dev链表和drv链表 (2)dev链表存放硬件信息,每一个节点的对应的数据类型是struct i2c_client,用这个结构体来装载硬件信息。每当向内核添加一个硬件节点时,内核帮你遍历drv链表,取出drv链表每一个软件节点,根据硬件节...
i2c对应总线结构体变量为i2c_bus_type,定义如下: drivers/i2c/I2c-core.c 1. struct bus_type i2c_bus_type = { .name = "i2c", .match = i2c_device_match, .probe = i2c_device_probe, .remove = i2c_device_remove, .shutdown = i2c_device_shutdown, ...
// 将驱动绑定在对应的总线上,主要工作把驱动(device_driver)添加到总线(bus_type)的klist_drivers链表中去 ret = bus_add_driver(drv); } 无论是调用driver_register()注册驱动, 还是用device_register注册设备, 内核都会调用总线的match函数来探测是否有合适device_driver的device或者是否有合适device的device_driv...