我编译并运行了chardev.c示例,来自于lkmpg。当向设备写入时,出现了意外错误:
anon@anon:~/lkmpg$ sudo echo "hi" > /dev/chardev
bash: /dev/chardev: Permission denied
模块的写入函数如下所示:
/*
* Called when a process writes to dev file: echo "hi" > /dev/chardev
*/
static ssize_t
device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
{
printk(KERN_ALERT "Sorry, this operation isn't supported.\n");
return -EINVAL;
}
我没有收到无效操作的预期错误和打印到 /var/log/messages 的错误信息。
我可以顺利从设备中读取,得到了预期的结果:
anon@anon:~/lkmpg$ cat /dev/chardev
I already told you 6 times Hello world!
设备/dev/chardev是通过手动创建的:
sudo mknod /dev/chardev c 252 0
有什么问题吗?
--编辑--
显然,当我使用mknod创建设备时,它最终具有以下权限:
crw-r--r-- 1 root root 252, 0 2009-10-30 09:27 /dev/chardev.
当我执行了sudo chmod a+w /dev/chardev
命令后,驱动程序按预期工作。
然而,有人说这样做是不正确的。
正确的操作方式是什么,为什么?