我一直在这里关注有关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'
。