int i2c_register_driver(struct module *owner, struct i2c_driver *driver) /* @ 将前面注册的 i2c_driver 从 Linux 内核中注销掉 @ driver:要注册的 i2c_drive @ 返回值:无 */ void i2c_del_driver(struct i2c_driver *driver) 具体注册i2c_driver的注册流程: /* i2c 驱动的 probe 函数 */ static ...
在阅读其他人编写的Linux驱动源码发现,最后驱动注册和注销时并未使用传统的“module_init”和“module_exit”,而是使用一个宏“module_xxx_driver”代替,如module_i2c_driver、module_spi_driver、module_platform_driver等等。 Linux驱动程序模型是“总线驱动”+“设备驱动”,比如i2c总线和i2c设备,spi总...
static struct i2c_driver i2c_driver = { .driver = { .name = DRIVER_NAME, .owner = THIS_MODULE, }, .probe = i2c_probe, .remove = i2c_remove, .id_table = i2c_id, }; module_i2c_driver(i2c_driver); I2C 读写函数 __s32 i2c_smbus_write_quick(int file, __u8 value); __s32 i2...
第一章 时序分析1.总线空闲状态I2C总线的SDA和SCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。 2.启动…
module_i2c_driver — 注册I2C设备驱动的宏定义 i2c_register_board_info — 静态声明(注册)I2C设备,可多个 i2c_verify_client — 如果设备是i2c_client的dev成员则返回其父指针,否则返回NULL。用来校验设备是否为I2C设备 i2c_lock_adapter — I2C总线持锁操作,会找到最根源的那个i2c_adapter。说明你的模块必须符合...
int (*probe)(struct i2c_client *, const struct i2c_device_id *) 当I2C设备和驱动匹配成功以后 probe函数就会执行。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 struct device_driver driver device_driver 驱动结构体,如果使用设备树的话,需要设置device_driver的of_match_table成员变量,也就是驱...
I2C adapter 即I2C适配器 I2C driver 某个I2C设备的设备驱动,可以以driver理解。 I2C client 某个I2C设备的设备声明,可以以device理解。 1. 2. 3. I2C adapter 是CPU集成或外接的I2C适配器,用来控制各种I2C从设备,其驱动需要完成对适配器的完整描述,最主要的工作是需要完成i2c_algorithm结构体。这个结构体包含了...
在这个示例中,我们定义了一个简单的I2C设备驱动,包括probe和remove函数。probe函数在设备被探测到时调用,用于初始化设备相关的资源;remove函数在设备被移除时调用,用于释放设备相关的资源。我们还定义了设备的ID表,以便I2C核心层能够根据ID来匹配设备驱动。最后,通过module_i2c_driver宏将设备驱动注册到I2C核心层中。
struct module *owner; const char *name; }; 3. i2c_driver结构体 i2c_driver结构体描述了一个i2c设备的特性,包括设备类型、ID等信息。该结构体的定义在i2c.h头文件中,如下所示: struct i2c_driver { unsigned int class; const struct i2c_device_id *id_table; ...