我从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怎么回事?
--编辑--
显然,当我要创建设备时,它以以下权限结束:
crw-r--r-- 1 root root 252, 0 2009-10-30 09:27 /dev/chardev. 一旦我做了sudo chmod a+w /dev/chardev,司机就像预期的那样工作。
不过,有人说这样做是不对的。
正确的行动方针是什么?为什么?
发布于 2009-10-31 01:57:28
在drivers/watchdog/softdog.c中可以找到一个非常、非常、非常直接的关于如何实现字符驱动程序的简单示例。
您可以将您的代码与此示例进行比较,该示例向您展示了如何执行以下操作:
虽然软狗是一个非常有用的工具,但它和其他任何东西一样,也是一个教程。艾伦·考克斯( Alan )把它放在一起,所以这是一个更“恰当”实现的好例子。
如果您可以将整个源代码发布到您的模块中,我们可以帮助您找出为什么您的函数没有按预期的方式输入。
更新:
允许特权下的用户向字符设备写入是完全可以接受的!重复一遍,允许特权下的用户向字符设备写入是完全可以接受的!如果不是这样的话,诸如FUSE、Modem、USB小工具、CD ROMS和其他东西将需要根用户访问才能使用。
你能做的就是利用团体成员资格。也就是说,在Ubuntu上,允许使用FUSE (用户空间中的文件系统)的用户应该属于“fuse”组,它允许对谁可以或不能使用该功能进行粒度访问。类似地,在我的一些系统中,QRNG (量子随机数发生器)也在使用中。是(你猜到的)一个字符装置。我需要允许PHP访问该设备,所以我:
我希望这能澄清问题:)
发布于 2009-10-30 11:34:09
我想,实际的问题是你发出的命令写错了。试一试
#sudo sh -c "echo "hi" > /dev/chardev"
如果您想使用sudo运行多个命令,那么应该使用上面所示的命令。这样,您不需要执行chmod并更改它的权限。希望这能有所帮助。
https://stackoverflow.com/questions/1648519
复制相似问题