我正在为我的串行键盘编写一个非常简单的 Linux 内核驱动程序,使用 serdev。驱动程序工作和功能
static size_t serdev_keyboard_recv(struct serdev_device *serdev,
const unsigned char *buffer, size_t count) {
printk("serdev_keyboard: Received byte %d, count %ld \n", buffer[count-1], count);
return 0;
}
显示计数和最后发送的字节(每条消息仅是来自键盘的一个字节)。 该函数作为 receive_buf 被调用:
static const struct serdev_device_ops serdev_keyboard_ops = {
.receive_buf = serdev_keyboard_recv,
};
但缓冲区似乎在 512 字节处饱和。我如何告诉驱动程序在缓冲区已满时清空缓冲区,或者只是在每次执行 receive_buf 回调时清空缓冲区?
好的,现在它按预期工作了。根据@Oandriy 的提示,回调 .receive_buf 现在设置为返回接收到的数据的大小。所以下一个中断将从零开始缓冲区。 我可能需要实现更详细的返回,检查回调数据大小是否大于缓冲区大小......但考虑到我的键盘只是发送 1 个字节并不那么重要。 谢谢!