驱动程序编程:cat 命令不显示输出

Driver programming : cat command not showing output

我是驱动编程新手,写了一个简单的字符设备驱动代码。当我在不使用指针的情况下编写它时,它崩溃了。

当使用 echo 写入驱动程序时,它可以工作。但是从中读取时,没有输出。有人请帮忙。文件操作部分代码如下所示。 'p' 和 'q' 是普通字符指针。 'max' value was set as 10. 'ptr' 是 static int 类型,初始化为'0'。

int my_open(struct inode *inode,struct file *filp)
{
printk("In open.\n");
if((filp->f_flags & O_ACCMODE) == O_WRONLY){
    p = (char *)buffer;
    ptr = 0;
    }
else if((filp->f_flags & O_ACCMODE) == O_RDONLY)
    q = (char *)buffer;

return 0;
}

int my_close(struct inode *inode,struct file *filp)
{
printk("In close.\n");
return 0;
}

ssize_t my_read(struct file *filp,char *buff,size_t count,loff_t *pos)
{
long ret;
printk("In read.\n");
ret = copy_to_user(buff,q,max);
q += max;
*pos += max;

if(ptr -= max)
    return max;
else
    return 0;
}

ssize_t my_write(struct file *filp,const char *buff,size_t count,loff_t *pos)
{
long ret;
printk("In write.\n");
ret = copy_from_user(p,buff,max);
p += max;
*pos += max;
ptr += max;
return max;
}

module_init(my_init);
module_exit(my_exit);

在读取和写入中,您都没有考虑 "count" 参数,因为您的代码似乎假定 "count>=max",这是无法保证的。这本身可能会在执行读取的过程中导致任何类型的麻烦。此外,您 copy_to/from_user 在检查当前读取或写入位置是否超过缓冲区限制之前。此外,assignment/test if (ptr -= max) 仅在 ptr 恰好等于 max 时才有效,也不能保证您多次执行读取。

注意:由于缺少 p、q、buffer、ptr 和 max 的定义,我假设它们看起来像:

static char *p;
static char *q;
statint int ptr = 0;
static char buffer[10];
static int max=10;