从Linux用户空间设置16550A UART硬件FIFO中断级别
我目前使用16550兼容的UART,我希望能够更改FIFO中断触发级别(我在高UART负载下丢弃字节,我想减少门槛 - 这是一个动力不足的嵌入式系统)。当然,我可以在8250_port.c驾驶员改变它,如果我想:从Linux用户空间设置16550A UART硬件FIFO中断级别
[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,
},
但它会更方便将其从用户空间的改变而无需重新编译内核。
我希望的following documentation已过时:
截至2000年年末,有没有办法在Linux用户可以设置这些 直接(setserial的不能做到这一点)。虽然许多PC只有1650字节的缓冲区,但更好的UARTS具有更大的缓冲区。
如果这样做(例如一些新十岁上下的ioctl)的手段,那么seterial (8)和stty (1)还没有暴露的接口。
回答:
我认为这个问题的一般解决方案是使用setserial来使uart更改模式。例如,使用Pericom PI7C9X7958,您可以使用多种操作模式,例如“550”和950模式。这些对应于16550或16950标准uart类型。每种模式都有一个与其相关的特定fifo大小和一些其他功能。
所以,如果您的设备支持的话,你可以尝试
的setserial -v的/ dev/UART就是ttyS1 16950
,然后验证
的setserial -g的/ dev /就是ttyS1 的/ dev/ttyS1,UART:16950/954,端口:0xc800,IRQ:16
以上是 从Linux用户空间设置16550A UART硬件FIFO中断级别 的全部内容, 来源链接: utcz.com/qa/260963.html