А потом я пытаюсь читать с этого порта с помощью функции read (2)
Вместо "порта" , вы на самом деле несколькослои, удаленные из аппаратного устройства, и чтение из системного буфера последовательного терминала.
Я хотел бы знать, какое наибольшее разумное число для счетчика параметров и как оно связано с UARTБуфер FIFO?
Прежде всего count
должен быть не больше предоставленного пользовательского буфера.
Для блокировки read () вы, вероятно, могли бы сделать это count
размером с любой буфер, который вы можете выделить.
Для неблокирующего read () значение count
больше, чем приемный буфер терминала, не имеет большого смысла.
Обратите внимание, что count
- это простозапрос, и системный вызов read () может возвращаться с меньшим, чем запрошенное количество байтов.
Размеры буферов драйвера UART FIFO и последовательного порта не имеют значения для любого чтения () запросов из пространства пользователя.
См. Драйверы последовательного порта Linux .
... он считывает данные из буфера программного обеспечения драйвера последовательного порта Linux (если есть). Это правда?
Почти.
Системный вызов read () из пространства пользователя извлекает данные из буфера терминала.
Драйвер терминала является драйвером более высокого уровня, чем последовательный портВодитель.
Буфер терминала не имеет прямого подключения к FIFO UART.
Если используется DMA, то данные передаются из FIFO UART в буфер DMA.
Если используется PIO, то данныепередается из UART FIFO в буфер драйвера.
В любом случае драйвер последовательного порта в конечном итоге передает данные в буфер tty-флип.
В режиме без прерывания данные из буфера tty-флип передаются на терминал/ line-дисциплина буфер.
Снова обратитесь к Драйверы последовательного интерфейса Linux .
Если да, то какой размер программного обеспечения fifo?
Буфер приема терминала обычно составляет 4096 байт, хотя вы можете написать собственную дисциплину строки с другимизменить размер или переопределить макрос.
Начиная с включите / linux / tty.h в исходный код ядра Linux:
#define N_TTY_BUF_SIZE 4096
Драйвер терминала является общим для всех архитектур, поддерживаемых Linux,поэтому ваш BBB должен иметь конечный буфер 4096 байт.