- 论坛徽章:
- 0
|
10可用积分
我写了一个module,挂载了一个字符设备驱动,使用write系统调用向内核模块传递数据。
现在使用cat读取例如/dev/dev_spring0,把内核模块参数读出来,但是读不到任何内容,而在内核模块中注册的read函数却显示count等于4096,说明cat起作用了。
这是内核模块注册的函数,应该是被调用过的。
static ssize_t dummy_read(struct file *filp, char *bp, size_t count, loff_t *ppos)
{
const char* msg = "hello,world\n";
memcpy((void*)bp,(const void*)msg, strlen(msg));
}
我记得cat读取proc文件系统是没有问题的。
现在的问题是cat读取字符设备,为什么显示不出内容?
另外写了个C程序打开/dev/dev_spring,打开读取成功。
怎么样可以使用cat也能成功读取显示内容?
请大侠帮帮忙
[ 本帖最后由 springtty 于 2009-4-17 12:18 编辑 ] |
最佳答案
查看完整内容
cat为了保证文件被读完,不会像你的例子程序那样只read一次,而是循环read,直到EOF(read返回0)。但是你的内核模块并没有处理EOF,所以不知道这个时候cat干什么去了。你用strace看看cat都在干些什么吧……(strace cat /dev/???)或许你需要在dummy_read中把对于EOF的处理添加进去吧。read的ppos表示本次读操作的起始位置。copy_to_user之前判断一下*ppos是否超过了文件长度(strlen(msg)),超过则返回0。然后copy_to_user之后 ...
|