【发布时间】:2012-01-26 10:43:12
【问题描述】:
我是 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 中所示。
【问题讨论】:
标签: c linux kernel-module