我的代码在设备文件中读写时有什么问题

时间:2012-01-26 10:43:12

标签: c linux kernel-module

我是linux新手,正在创建一个模块,用户可以在其中读取和写入设备文件。以下是我的代码,其中读取工作正常但不是写入功能。

MODULE_LICENSE("DUAL BSD/GPL");

char message[80];
char *msg_ptr;

int dev_major = 0;
int dev_minor = 0;

struct cdev *cdev;

ssize_t dev_read(struct file *filp,char __user *buf,size_t count,loff_t *offset)
{
int i;
i=copy_to_user(buf,msg_ptr,count);
 printk(KERN_ALERT"buff:%s",buf);


return 0;
 }
  ssize_t dev_write(struct file *filp,const char __user *buf,size_t count,loff_t *offset)
{
  int j;
    msg_ptr = kmalloc(sizeof(*buf),GFP_KERNEL);
    copy_from_user(msg_ptr,buf,sizeof(*buf));
 //printk(KERN_ALERT"msg_ptr:%s",msg_ptr);
  return 0;
      }

当我创建一个char节点,然后使用echo hi> / dev / my_dev然后它打印hi,但写入/ var / log / messages中的infintely。

2 个答案:

答案 0 :(得分:1)

这一行看起来不对:

copy_from_user(msg_ptr, buf, sizeof(*buf));

您只复制sizeof(*buf)个字节,这可能是4个或8个字节,具体取决于架构。

您应该使用count参数。

答案 1 :(得分:0)

dev_write应该返回写入的字节数 当你返回0时,Linux知道你写了0个字节,并再次打电话给你写剩下的。再次......

dev_read相同。