Chinaunix首页 | 论坛 | 博客
  • 博客访问: 483499
  • 博文数量: 285
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 629
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-14 17:53
个人简介

相信自己,快乐每一天

文章分类

全部博文(285)

分类: LINUX

2013-10-18 14:44:27

原文地址:i2c驱动第一步-加载 作者:dean_go

我们来讲述i2c驱动工作的第一步...加载.

i2c驱动的加载有两种情况:

对于编译到内核镜像里的驱动,驱动的加载是在内核运行,也就是开机时发生的.

对于以模块方式存在的驱动,驱动的加载是在insmod时发生的.

但无论如何,其过程都是一样的.即,运行static int __init i2c_dev_init(void)函数,此函数存在于//i2c-dev.c

请大家点击这个链接i2c_dev_init,开两个窗口一起阅读,互相印证.

有用语句一:res = register_chrdev(, "i2c", &i2cdev_fops);

这个函数向内核注册了一个主设备号是I2C_MAJOR=89的字符型设备.其操作对应的file_operations结构为:i2cdev_ops.i2cdev_ops 存在于i2c-dev.c 这个驱动块.

注册这个字符型设备,就将主设备号为89的设备文件的所有操作指向了i2cdev_ops,对这个设备文件的所有操作,均由这些函数来执行.

这上步如下图:

i2c设备驱动


这个初始化函数中还有另外两个有用函数:

i2c_dev_class = (THIS_MODULE, "i2c-dev");

此函数生成一个类,用于向sysfs中注册,这里不作详述.

另一个函数是:

res = (&i2cdev_driver);
这里向内核注册了i2cdev_driver,一个结构体.i2c_driver我还没搞懂,这里就先不说了.





注:此文转载请注明出处,否则视为侵权.



阅读(396) | 评论(0) | 转发(0) |
0

上一篇:C++库一览

下一篇:i2c驱动第二步-打开

给主人留下些什么吧!~~