Linux read() 延迟

标签 linux linux-kernel linux-device-driver uart

有没有办法改善 Linux (4.8) 中串行端口数据处理的延迟?特别是,在线上的实际数据与此端口上的 select() 和 read read() 函数返回之间的时间。 Scope trace of data on line and read complete (blue)

现在,我的测量结果显示为 350 微秒。该进程以 SCHED_RR 优先级 90 运行。有没有办法缩短这个时间,或者我必须更改驱动程序?我使用的是 PERICOM (PI7C9X7954) 的 16C550 兼容芯片。

最佳答案

所以为了解决这个问题,我不得不在用户空间编写自己的驱动程序。这不是很困难,只是弄清楚了如何正确配置芯片。使用内存映射 IO 访问芯片。可以从 /sys/dev/char/<major>:<minor>/iomem_base 中读取内存偏移量文件。

enter image description here

只需要确保端口永远不会打开。否则操作系统将尝试读取相同的数据。

关于Linux read() 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42588291/

相关文章:

c - Linux 中的列表条目

linux - 什么是 hrtick_clear(rq);在 linux 调度程序中?

c - lkm函数劫持BUG

linux - spi_driver.id_table 和 spi_driver.driver.of_match_table 的区别

linux - 非管理员使用记事本打开文件时如何隐藏文件的某些内容?

c++ - futex 等待/唤醒对是否实现获取/释放语义?

c - kobject、device_create 和我的代码有什么区别?

从内核空间配置 LED 触发器的参数

linux - 什么是进程分支陷阱?

c++ - 用于调试内存使用情况的工具?