QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 900|回复: 8

写驱动遇到麻烦了。

[复制链接]
发表于 2005-10-21 10:24:32 | 显示全部楼层 |阅读模式
驱动中的read()和write()无法调用,open()和ioctl()调用正常。
四个函数传递的参数数量、类型完全参照fs.h中file_operations写。
调用方式为read(fd,&buf,count),write(fd,&buf,count),ioctl(fd,cmd,arg)…………
请教read()、write()为何调用不了?
发表于 2005-10-21 21:05:15 | 显示全部楼层
sys_read,sys_write,但好像不能用在模块中
回复

使用道具 举报

 楼主| 发表于 2005-10-22 09:46:24 | 显示全部楼层
我是编译为内核,没编译为模块。

那该如何做呢?
回复

使用道具 举报

发表于 2005-10-23 11:34:39 | 显示全部楼层
#include <linux/fs.h>
extern ssize_t sys_read(unsigned int fd, char * buf, size_t count);
extern ssize_t sys_write(unsigned int fd, const char * buf, size_t count);
现在就可以用sys_open,sys_close,sys_read,sys_write了。
2.6内核在linux/syscalls.h里都有这些函数的声明。
回复

使用道具 举报

 楼主| 发表于 2005-10-24 15:10:37 | 显示全部楼层
我把上面这段加到应用程序中,用read()调用仍然失败,用sys_read()编译不通过。
现在我打算把read()和write()的内容写到ioctl()中去试试……
回复

使用道具 举报

发表于 2005-10-24 16:23:59 | 显示全部楼层
应用程序?
回复

使用道具 举报

 楼主| 发表于 2005-10-24 16:54:37 | 显示全部楼层
??
那这段写到哪儿?
驱动中?
fs.h中?
回复

使用道具 举报

发表于 2005-10-25 09:18:02 | 显示全部楼层
我以为你要在内核中用read、write呢。
如果是用户程序,就不能用内核的fs.h,也不可能直接调用内核里的函数。
回复

使用道具 举报

 楼主| 发表于 2005-10-25 11:12:22 | 显示全部楼层
应用程序调的顺序应该是:

应用程序中read()--》系统调用sys_resd--》file_operation中对应函数。

可是现在调用不了…………
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 02:11 , Processed in 0.039878 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表