我一直在这里关注有关Linux Kernel编程的教程:http://www.tldp.org/LDP/lkmpg/2.6/html/index.html

我已经到了专门针对“字符设备驱动程序”的部分,虽然我已经对其进行了编译,但是在描述的情况下它不起作用:

“在进程写入开发文件时调用:echo“ hi”> / dev / chardev“

我已经尝试了几个Linux控制台命令,例如:

echo“ hi”> sudo / dev / chardev /



sudo sh -c'printf“ hi”> sudo / dev / chardev /'

我在Raspberry Pi 3 B +上运行代码

当我运行第一个命令时,我不会得到任何回报,也没有添加任何内容到/ var / logs / messages中

当我运行第二个命令时,我得到:
sh:printf:I / O错误

完整代码位于:http://www.tldp.org/LDP/lkmpg/2.6/html/x569.html

我用下面的代码段修改了代码。

/*
 * 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_INFO "%s\n", buff);
    return -EINVAL;
}


我期望发生的事情是,当我使用echo“ hi”> sudo / dev / chardev时,在我的/ var / logs / messages中将出现一条仅显示“ hi”的行。

最佳答案

回声“喜”> / dev / chardev


还行吧。


  echo“ hi”> sudo / dev / chardev /


这是无效的。这将echo hi /dev/chardev/并将其写入名为sudo的文件。而且不要/dev/chardev/,它不是目录,它是文件,它是/dev/chardev(末尾没有/)。


  sudo sh -c'printf“ hi”> sudo / dev / chardev /'


与上述相同的错误。

如果要使用sudo附加到文件,请使用tee,如echo hi | sudo tee /dev/chardev所示。或者,如果您必须sudo sh -c 'echo "hi" > /dev/chardev'

10-07 21:45