如何从命令行使用创建的Linux内核字符驱动程序

时间:2019-03-26 19:59:33

标签: c linux-kernel

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

1 个答案:

答案 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'