int i2c_register_driver(struct module *owner, struct i2c_driver *driver); int i2c_del_driver(struct i2c_driver *driver); inline int i2c_add_driver(struct i2c_driver *driver); 创建并注册一个新的I2C设备 struct i2c_client *i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info con...
根据前面的总线设备驱动的框架,有driver那么肯定会有device。这两者的匹配靠的是.id_table 对于gc0308,具体可以通过kernel/arch/mips/xburst/soc-x1000/chip-x1000/halley2/common/i2c_bus.c 可以看到向I2C总线注册的device的是gc0308 如果匹配上了,则调用driver的.probe函数。下面我们来看一下该函数具体做了什么...
int i2c_del_driver(struct i2c_driver *driver); inline int i2c_add_driver(struct i2c_driver *driver); 创建并注册一个新的I2C设备 struct i2c_client *i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info); I2C 传输、发送和接收 int i2c_transfer(struct i2c_adapter * ad...
struct device_driver driver; /*如果使用设备树的话,需要设置 device_driver 的of_match_table成员变量,也就是驱动的兼容(compatible)属性*/ const struct i2c_device_id *id_table; /*id_table 是传统的、未使用设备树的设备匹配ID 表*/ /* Device detection callback for automatic device creation */ int ...
i2c_device_match会管理I2C设备和I2C总线匹配规则,这将和如何编写I2C驱动程序息息相关。 2. I2C驱动 i2c_driver 类似 platform_driver,是我们编写 I2C 设备驱动重点要处理的内容, i2c_driver 结构体定义在 include/linux/i2c.h 文件中,内容如下: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 struct i2c_...
I2C Device Drivers: 用于与连接到I2C总线的各种设备进行通信。 设备驱动程序通常注册到I2C子系统,并提供与特定设备相关的功能。 I2C device driver 结构体 i2c_driver这个结构体是Linux内核中表示I2C设备驱动的一个结构体。它包含了各种函数指针和数据结构,用于管理驱动程序与I2C设备交互时的行为。下面是对关键元素的解...
第一层和第二层又叫i2c总线驱动(bus),第三第四属于i2c设备驱动(device driver)。 在linux驱动架构中,几乎不需要驱动开发人员再添加bus,因为linux内核几乎集成所有总线bus,如usb、pci、i2c等等。并且总线bus中的(与特定硬件相关的代码)已由芯片提供商编写完成,例如三星的s3c-2440平台i2c总线bus为/drivers/i2c/buses...
其中id_table主要用于描述设备ID信息,即可匹配的设备ID;of_match_table用于匹配设备相关的设备树信息;而probe_new_device函数则可以在新的i2c设备被发现时,调用相应的函数将其初始化,并将数据传入其相应的结构体中。 四、i2c设备的创建 如果想在Linux系统中创建一个i2c设备,需要在系统内核中添加相应的i2c_driver和...
Linux内核中描述I2C的四个核心结构体 1)i2c_client—挂在I2C总线上的I2C从设备 每一个i2c从设备都需要用一个i2c_client结构体来描述,i2c_client对应真实的i2c物理设备device。 但是i2c_client不是我们自己写程序去创建的,而是通过以下常用的方式自动创建的: 方法一: 分配、设置、注册i2c_board_info 方法二: 获取...