关于在linux设备驱动程序中写入函数

时间:2010-12-07 17:33:14

标签: c linux driver

我写了一个linux设备驱动程序并实现了如下函数device_write:

static int device_write(struct file* file,const char* buff,int count, loff * offp)
{
//some implementation
printk("write value %x to card\n",value);
//some implementation
}

我还实现了device_read函数并使用printk在其中打印一些信息。 问题是当我在应用程序中使用read(fd,buff,1)时会显示printk结果,但是当我使用write(fd,buff,1)时,没有printk的结果。可能不会调用device_write函数。什么可能导致这个问题?以前有人遇到过这种问题吗?有人可以给我一些帮助和建议吗?

1 个答案:

答案 0 :(得分:3)

这只是答案的一半,但对于评论来说太大了。

device_write功能中的其他操作是否正在发生?

printk函数的顶部做一个非常简单的device_write,看看是否打印出来。像

这样的东西
static int device_write(struct file* file,const char* buff,int count, loff * offp)
{
    printk("%s: %s\n", __FILE__, __func__);

无论函数中发生什么,都会执行。如果打印出来,那么你可以缩小从哪里开始。

如果不起作用,请确保实际上在设备结构中设置了功能指针。或者您的错误可能在测试应用程序中。您确定已使用写入权限打开了设备吗?如果你从最初编写的程序复制代码来测试读取功能,那将是一个容易犯的错误。