我从 lkmpg 编译并运行chardev.c示例,写入设备时收到意外错误:
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
了,司机就会按预期工作。
但是,人们说这样做是不正确的。
什么是正确的行动方针,为什么?