首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux内核模块程序员指南中chardev.c示例的问题

Linux内核模块程序员指南中chardev.c示例的问题
EN

Stack Overflow用户
提问于 2009-10-30 07:54:47
回答 2查看 4.7K关注 0票数 3

我从chardev.c编译并运行了香港人示例,当写入设备时收到了一个意外的错误:

代码语言:javascript
复制
anon@anon:~/lkmpg$ sudo echo "hi" > /dev/chardev
bash: /dev/chardev: Permission denied

模块写函数如下所示:

代码语言:javascript
复制
/*  
 * 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中的错误。

我可以毫无问题地从设备上读出,收到预期的结果:

代码语言:javascript
复制
anon@anon:~/lkmpg$ cat /dev/chardev 
I already told you 6 times Hello world!

设备/dev/chardev是手动创建的,使用:

代码语言:javascript
复制
sudo mknod /dev/chardev c 252 0

怎么回事?

--编辑--

显然,当我要创建设备时,它以以下权限结束:

代码语言:javascript
复制
crw-r--r-- 1 root root 252, 0 2009-10-30 09:27 /dev/chardev. 

一旦我做了sudo chmod a+w /dev/chardev,司机就像预期的那样工作。

不过,有人说这样做是不对的。

正确的行动方针是什么?为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-31 01:57:28

drivers/watchdog/softdog.c中可以找到一个非常、非常、非常直接的关于如何实现字符驱动程序的简单示例。

您可以将您的代码与此示例进行比较,该示例向您展示了如何执行以下操作:

  • 从设备读取
  • 写入设备
  • 通过设备呈现ioctl接口。

虽然软狗是一个非常有用的工具,但它和其他任何东西一样,也是一个教程。艾伦·考克斯( Alan )把它放在一起,所以这是一个更“恰当”实现的好例子。

如果您可以将整个源代码发布到您的模块中,我们可以帮助您找出为什么您的函数没有按预期的方式输入。

更新:

允许特权下的用户向字符设备写入是完全可以接受的!重复一遍,允许特权下的用户向字符设备写入是完全可以接受的!如果不是这样的话,诸如FUSE、Modem、USB小工具、CD ROMS和其他东西将需要根用户访问才能使用。

你能做的就是利用团体成员资格。也就是说,在Ubuntu上,允许使用FUSE (用户空间中的文件系统)的用户应该属于“fuse”组,它允许对谁可以或不能使用该功能进行粒度访问。类似地,在我的一些系统中,QRNG (量子随机数发生器)也在使用中。是(你猜到的)一个字符装置。我需要允许PHP访问该设备,所以我:

  • 创建QRNG组
  • 确保PHP以用户身份运行(而不是匿名系统用户)
  • 将拥有需要访问该设备的应用程序的用户添加到QRNG组

我希望这能澄清问题:)

票数 5
EN

Stack Overflow用户

发布于 2009-10-30 11:34:09

我想,实际的问题是你发出的命令写错了。试一试

#sudo sh -c "echo "hi" > /dev/chardev"

如果您想使用sudo运行多个命令,那么应该使用上面所示的命令。这样,您不需要执行chmod并更改它的权限。希望这能有所帮助。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1648519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档