linux那些事儿之我是i2c -- Gsenser(二)

本文深入探讨Linux驱动模型中的I2C设备驱动,通过`lis3lv02d_i2c_init`函数分析`i2c_add_driver`的使用,讲解`i2c_driver`结构体及其在设备驱动中的作用,揭示Linux驱动模块的分层思想。
摘要由CSDN通过智能技术生成
2.跟我走吧,现在就出发

    看linux平台的驱动程序,一切都从那对欢喜冤家开始。
    且看代码:
323 module_init(lis3lv02d_i2c_init);
324 module_exit(lis3lv02d_i2c_exit);

了解与不了解linux设备驱动模型的弟兄们都知道,这两行的意思,就不多说了。
根据前面代码的指示前去阅读lis3lv02d_i2c_init函数。

306 static int __init lis3lv02d_i2c_init(void)
307 {
308   return i2c_add_driver(&lis3lv02d_i2c_driver);
309 }

这个函数看起来似乎没什么内容,只是一句简单的i2c_add_driver调用。调用的是什么东东呢?
&lis3lv02d_i2c_driver,跟谭浩强大哥学过几天c的兄弟都知道,这是一个指针变量,
指向的东西可能是康庄大道也可能是万丈深渊,不去看,永远不知道下一步到底是什么。
如诗所云,劝君更进一杯酒,西出阳关无故人!
将要开始的征程,对于初学的我们而言,全都是未知的x。
对于大神之辈,这连小儿科都不算……
方才说到i2c_add_driver()调用的参数是&lis3lv02d_i2c_driver,我们来看看它的定义和赋值
且看代码:
295 static struct i2c_driver lis3lv02d_i2c_driver = {
296   .driver = {
297     .name = "lis3lv02d",
298   },
299   .id_table   = lis3lv02d_i2c_id,
300   .probe    = lis3lv02d_i2c_probe,
301   .remove   = lis3lv02d_i2c_remove,
302   .suspend  = lis3lv02d_i2c_suspend,
303   .resume   = lis3lv02d_i2c_resume,
304 };

光看这么一堆东东,如果刚开始学习的兄弟,可能会一头雾水,这都在“闹啥捏”。
所以,必须把这个结构体变量的母体(定义)列出来给大家瞅瞅。
定义在文件kerne
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值