首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

字符型设备struct cdev结构体有关问题

2012-06-01 
字符型设备struct cdev结构体问题struct cdev {struct kobject kobj// 每个 cdev 都是一个 kobjectstruct

字符型设备struct cdev结构体问题
struct cdev {
  struct kobject kobj; // 每个 cdev 都是一个 kobject
  struct module *owner; // 指向实现驱动的模块
  const struct file_operations *ops; // 操纵这个字符设备文件的方法
  struct list_head list; // 与 cdev 对应的字符设备文件的 inode->i_devices 的链表头
  dev_t dev; // 起始设备编号
  unsigned int count; // 设备范围号大小
};
这个结构体里的 struct module *owner; 元素干嘛用的呢?
在什么时候设备会调用这个变量呢?

[解决办法]
在驱动的file_operations中,有.owner = THIS_MODULE。宏THIS_MODULE,它的定义如下是#define THIS_MODULE (&__this_module),__this_module是一个struct module变量,代表当前模块,跟current有几分相似。可以通过THIS_MODULE宏来引用模块的struct module结构。
[解决办法]
你考虑下实现。比如,你写了个字符型设备驱动,他是一个module,可以动态的被link和unlink。
当你用到cdev(代表一个字符设备)来进行一些操作时,你如何知道应该对哪个module进行操作呢?
于是就有了cdev结构中的module这个域,用以指明此结构需要操作的module。
内核虽然是用c写的,但是却是各种OO思想。
以上这种技巧在内核中很普遍。

热点排行