I2C driver
i2c.h
将参数(ch452_driver)传入函数 module_driver.
module_driver(ch452_driver, i2c_add_driver, i2c_del_driver)
下面来看module_driver的定义:
(device.h)
理解上述宏定义后,将module_i2c_driver(ch452_driver) 按其宏定义展开就可以得到:
static int __init ch452_driver_init(void) \
{ \
return i2c_register_driver(&ch452_driver); \
} \
module_init(ch452_driver_init); \
static void __exit ch452_driver_exit(void) \
{ \
i2c_del_driver (&ch452_driver); \
} \
module_exit(ch452_driver_exit);
这一句宏就解决了模块module安装卸载的复杂代码。这样驱动开发者在实现I2C驱动时只要将i2c_driver结构体填充进来就可以了,无需关心设备的注册与反注册过程。
I2C client
即I2C设备。I2C设备的注册一般在板级代码中,在解析实例前还是先熟悉几个定义:
Linux 2.6版本还是使用板级代码,linux3.0之后开始使用设备树来描述板级信息。
of_match_table是OpenFirmware相关,在3.0kernel后对arm平台引入了Device Tree,可通过dts配置文件代替大量板级代码。