打印
[嵌入式linux]

问个关于的设备驱动的弱问题。。。。

[复制链接]
1431|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rockingliu|  楼主 | 2008-9-22 13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在 struct file_opertion 中 open 和 ioctl 的参数都有 (struct inode *, struct file *) 一个是inode 结构的指针, 一个是file结构的指针。

如下所示:
int (*open) (struct inode *, struct file *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);

我的问题是:

可我看到在应用层的设备测试函数 在调用open() 时只写成了               open("/dev/test_io",O_RDWR); 这个好像并不是与 在struct file_operation {....} 中的open的 指定参数类型一致呀,这是咋回事呢??

好像是 file_operation 的read是 应用层read()的系统调用?
inode 和 file 是在哪里被附值的呢?

相关帖子

沙发
rockingliu|  楼主 | 2008-9-22 13:53 | 只看该作者

补充

谁知道read()系统调用的原形在哪个目录下呢?

使用特权

评论回复
板凳
chl00100| | 2008-9-23 20:20 | 只看该作者

re

应用层的open和驱动层(内核)的open不是一回事,所以函数参数也不一致,ioctl相同,记得都经过了转换,但驱动层的open返回值的确是返回给了应用层的open
想弄明白就看一下驱动代码吧

使用特权

评论回复
地板
foxfox| | 2008-10-1 11:19 | 只看该作者

re

应用程的 open和read都是库函数,封装了系统调用open,read

使用特权

评论回复
5
sinanjj| | 2008-10-1 17:00 | 只看该作者

没看出哪不一样来.

int (*open) (struct inode *, struct file *);
open("/dev/test_io",O_RDWR);

大写的是宏定义, 查头文件(或直接看注释). inode读入的就是字符串, 可grep查找源定义.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

101

帖子

0

粉丝