......
static ssize_t chrdev_write(struct file * file, char __user *userbuf, size_t len, loff_t * offset)
{
int ret = 0;
ret = copy_from_user(writebuf, userbuf, len);
if(ret < 0){
printk(KERN_EMERG "copy_from_user failed\n");
}
else {
printk(KERN_EMERG "chrdev_write is ok. write data:%s\n", writebuf);
}
return 0;
}
const struct file_operations fops={
.owner = THIS_MODULE,
.read = chrdev_read,
.write = chrdev_write,
.open = chrdev_open,
.release = chrdev_release
};
......
会报错error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
.write = chrdev_write,
错误原因:没有完全按照的struct file_operations中的定义书写代码。
struct file_operations中.write的定义
ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
定义中,有个const修饰符。
修改代码,加上const修饰符后,成功编译。
......
static ssize_t chrdev_write(struct file * file, const char __user *userbuf, size_t len, loff_t * offset)
{
int ret = 0;
ret = copy_from_user(writebuf, userbuf, len);
if(ret < 0){
printk(KERN_EMERG "copy_from_user failed\n");
}
else {
printk(KERN_EMERG "chrdev_write is ok. write data:%s\n", writebuf);
}
return 0;
}
const struct file_operations fops={
.owner = THIS_MODULE,
.read = chrdev_read,
.write = chrdev_write,
.open = chrdev_open,
.release = chrdev_release
};
......