我正在尝试为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
和其他一些人。
非常感谢您的帮助
答案 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));
}