从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

回到顶部