我需要帮助找到一个内核补丁,以从 tty termios API 获取低于 100 毫秒的 VTIME,以减少字符间的间隙。它会阻止读取系统调用,直到 VTIME 超时。
函数 n_tty_read() 是补丁入口点: https://elixir.bootlin.com/linux/latest/source/drivers/tty/n_tty.c#L2131
有人给我建议吗?我必须使用非规范模式(没有帧协议,没有ascii,没有中断)。VMIN 参数为空,因为所有消息长度都是变量。对于多个 uart 系统来说,轮询每个字符的解决方案成本太高,并且隐含多个进程上下文切换。
提取 termios 手册:VTIME 非规范读取的超时(以十分秒为单位)(TIME)。https://man7.org/linux/man-pages/man3/termios.3.html
Linux内核补丁是必要的... HZ除以更大的值是否更好?或者将全局 HZ 设置为较小的值?
Microsoft Windows Serial API 能够配置到 1ms,但 Linux 则不行。所以Windows更适合原始串口处理。 ReadIntervalTimeout:https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddser/ns-ntddser-_serial_timeouts
评论摘录“在非规范模式下......只接受4095个字符”,我认为问题就在这里,也许这就是为什么read_wait队列没有被唤醒。
https://elixir.bootlin.com/linux/latest/source/drivers/tty/n_tty.c#L1667