i2c-dev.c文件完全可以被看作是一个I2C设备驱动, 不过, 它实现的i2c_client是虚拟、 临时的, 主要是为了便于从用户空间操作I2C外设。 i2c-dev.c针对每个I2C适配器生成一个主设备号为89的设备文件, 实现了i2c_driver的成员函数以及文件操作接口, 因此i2c-dev.c的主体是“i2c_driver成员函数+字符设备驱动”。
#define I2C_MAJOR 89 /* Device major number */
/*
* module load/unload record keeping
*/
static int __init i2c_dev_init(void)
{
int res;
printk(KERN_INFO "i2c /dev entries driver\n");
/* 注册一个设备号为89的主设备 */
res = register_chrdev(I2C_MAJOR, "i2c", &i2cdev_fops);
if (res)
goto out;
/* 创建一个类,自动创建设备节点 */
i2c_dev_class = class_create(THIS_MODULE, "i2c-dev");
if (IS_ERR(i2c_dev_class)) {
res = PTR_ERR(i2c_dev_class);
goto out_unreg_chrdev;
}
/* 注册一个i2c设备驱动,当然这个设备驱动,肯定是可以支持所有的设备的 */
res = i2c_add_driver(&i2c