Ich verwende derzeit eine 16550-kompatible UART, und ich möchte in der Lage sein, die FIFO-Interrupt-Trigger-Ebene zu ändern (ich fallen Bytes unter hohen UART-Lasten und ich möchte reduzieren die Schwelle - es ist ein unterentwickeltes eingebettetes System). Natürlich kann ich es im 8250_port.c Fahrer ändern, wenn ich will: von AnwenderseiteSet 16550A UART Hardware FIFO-Interrupt-Ebene von Linux Userspace
[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,
},
Aber es wäre viel bequemer sein, um es zu ändern, ohne einen Kernel neu kompilieren zu müssen.
Ich hoffe, dass die following documentation veraltet ist:
Ab Ende des Jahres 2000 gibt es keine Möglichkeit der Benutzer Linux war diese direkt einstellen konnte (kann setserial es nicht tun). Während viele PCs nur eine 16550 mit 16-Byte-Puffer haben, haben bessere UARTS sogar größere Puffer.
Wenn es ein Mittel ist, dies zu tun (zum Beispiel einige neue-ish ioctl), dann seterial (8) und stty (1) Bestrahlung noch die Schnittstelle.
Oh, und isaset -y -f 0x3fA 0x07 (welches direkt das FCR-Register von/dev/ttyS0 anstößt) zählt nicht! – Damien
Wenn 'isaset' nicht zählt, warum sollten andere Lösungen zählen? –
Da die Änderungen verloren gehen, wenn der Port erneut geöffnet wird. Darüber hinaus muss es von einem privilegierten Benutzer ausgeführt werden - und zufällige IO-Ports vom Userspace zu stossen ist im Allgemeinen keine sichere Option! – Damien