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
看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