【发布时间】:2021-03-12 10:18:32
【问题描述】:
我正在学习"Linux device drivers"。我创建了一个名为char_device 的字符设备。当我从设备读取数据时,它会不断将消息打印到终端,导致机器无限崩溃。
驱动中的读操作源码:
static ssize_t my_read(struct file *my_file, char __user *buf, size_t len, loff_t *off) {
uint8_t *message = "Hello from the kernel world!\n";
size_t datalen = strlen(message);
if(len > datalen) {
len = datalen;
}
printk(KERN_INFO "Char driver: Read");
if(copy_to_user(buf, message, len)) {
return -EFAULT;
}
return len;
}
用于读取设备的用户空间命令:
cat /dev/char_device
驱动程序不断打印“Hello from the kernel world!”向终端发送消息。
【问题讨论】:
-
cat将继续读取输入,直到read()函数返回 0(表示文件结束)或-1(表示错误)。 -
旁白:
printk消息应以换行符结束,除非您打算在其后面加上KERN_CONT。 -
这能回答你的问题吗? cat function calling read() infinite times
标签: c linux linux-kernel linux-device-driver printk