我目前正在使用 16550 兼容的 UART,并且我希望能够更改 FIFO 中断触发级别(我在高 UART 负载下丢失字节,并且我想降低阈值 - 这是一个动力不足的嵌入式系统)。当然,如果我愿意,我可以在 8250_port.c 驱动程序中更改它:
[PORT_NS16550A] = {
.name = "NS16550A",
.fifo_size = 16,
.tx_loadsz = 16,
.fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_10,
.flags = UART_CAP_FIFO | UART_NATSEMI,
},
但从用户空间更改它会方便得多,而无需重新编译内核。
我希望以下文档 http://www.tldp.org/HOWTO/Serial-HOWTO-18.html已过期:
截至 2000 年末,Linux 用户无法设置这些
直接(setserial 不能这样做)。虽然许多 PC 只有 16550
具有 16 字节缓冲区,更好的 UART 具有更大的缓冲区。
如果有办法这样做(例如一些新的 ioctl),那么设定 (8) http://linux.die.net/man/8/setserial and stty (1) http://linux.die.net/man/1/stty还没有公开接口。
我认为解决这个问题的一般方法是使用setserial来使uart改变模式。例如,使用 pericom PI7C9X7958,您有多种操作模式,例如“550”和 950 模式。这些对应于 16550 或 16950 标准 uart 类型。每种模式都有与其相关的特定 fifo 大小以及一些其他功能。
所以,如果你的设备支持,你可以尝试
setserial -v /dev/ttyS1 uart 16950
然后验证
setserial -g /dev/ttyS1
/dev/ttyS1,UART:16950/954,端口:0xc800,IRQ:16
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)