我一直在这里关注有关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”的行。
答案 0 :(得分:0)
echo“ 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'
。