如何使用cat命令通过自己的字符设备驱动程序读取字符设备?

时间:2018-07-23 06:29:52

标签: linux linux-kernel linux-device-driver gpio cat

我正在尝试为beaglebone编写一个简单的读/写字符驱动程序。任务之一是能够使用cat命令从设备读取信息,但我无法做到这一点。

这是位于char_drvr.c内的字符设备驱动程序的读取功能代码:

ssize_t lkm_read (struct file *pfile,
                  char __user *buffer,
                  size_t length,
                  loff_t *offset)
{
    int device_buffer = (int)gpio_get_value(gpioIn); //gets value from gpio pin (HI or LO)
    return simple_read_from_buffer(buffer,length, offset, &device_buffer, sizeof(int));     
}

运行测试应用程序时,读取成功执行(返回正确的值),因此我知道设备能够与设备驱动程序进行通信,但是运行时什么也不会返回(立即)

$cat /dev/simple_char_driver

我的完整代码:https://github.com/gteeger/character_driver1

尝试的解决方案:

cat function calling read() infinite times

C - infinite read from cat in Device file

和其他一些人。

非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

答案:它们被称为字符设备驱动程序,而不是布尔设备驱动程序。

固定代码,现在猫可以使用了:

ssize_t lkm_read (struct file *pfile,
                  char __user *buffer,
                  size_t length,
                  loff_t *offset) 
{
char out = '0';
bool gpioPin = gpio_get_value(gpioIn);
if (gpioPin == 0) out = '0';
if (gpioPin == 1) out = '1';
printk(KERN_ALERT "Inside the %s function\n", __FUNCTION__);
return simple_read_from_buffer(buffer, length, offset, &out, sizeof(char));
}