我如何使用 cat 命令从我自己的字符设备驱动程序读取字符设备?
How can I use the cat command to read from a character device with my own character device driver?
我正在尝试为 beaglebone 编写一个简单的 read/write 字符驱动程序。其中一项任务是能够使用 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
和其他一些人。
非常感谢任何帮助
答:它们被称为字符设备驱动程序,而不是布尔设备驱动程序。
固定代码,现在 cat 工作:
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));
}
我正在尝试为 beaglebone 编写一个简单的 read/write 字符驱动程序。其中一项任务是能够使用 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
和其他一些人。
非常感谢任何帮助
答:它们被称为字符设备驱动程序,而不是布尔设备驱动程序。
固定代码,现在 cat 工作:
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));
}