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

zebiak123 2011-12-25 07:37:31
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; 元素干嘛用的呢?
在什么时候设备会调用这个变量呢?
...全文
121 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zebiak123 2012-05-31
  • 打赏
  • 举报
回复
结贴..
woshi_ziyu 2011-12-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chen_q07 的回复:]

你考虑下实现。比如,你写了个字符型设备驱动,他是一个module,可以动态的被link和unlink。
当你用到cdev(代表一个字符设备)来进行一些操作时,你如何知道应该对哪个module进行操作呢?
于是就有了cdev结构中的module这个域,用以指明此结构需要操作的module。
内核虽然是用c写的,但是却是各种OO思想。
以上这种技巧在内核中很普遍。
[/Quote]
++
woshi_ziyu 2011-12-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chen_q07 的回复:]

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

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧