Как драйвер последовательного порта подключается к tty-порту - PullRequest
0 голосов
/ 09 мая 2020

Я смотрю Linux пример кода драйвера UART здесь

https://github.com/martinezjavier/ldd3/blob/master/tty/tiny_serial.c

Ниже приведен фрагмент кода, в котором драйвер UART отправляет данные в порт tty

static void tiny_timer(unsigned long data)
{
    struct uart_port *port;
    struct tty_struct *tty;
    struct tty_port *tty_port;

    port = (struct uart_port *)data;
    if (!port)
        return;
    if (!port->state)
        return;
    tty = port->state->port.tty;
    if (!tty)
        return;

    tty_port = tty->port;

    /* add one character to the tty port */
    /* this doesn't actually push the data through unless tty->low_latency is set */
    tty_insert_flip_char(tty_port, TINY_DATA_CHARACTER, 0);

    tty_flip_buffer_push(tty_port);

    /* resubmit the timer again */
    timer->expires = jiffies + DELAY_TIME;
    add_timer(timer);

    /* see if we have any data to transmit */
    tiny_tx_chars(port);
}

Однако, глядя на код, я не совсем понимаю, как когда-либо устанавливается связь между портом UART и портом tty. Это что-то, что нужно настроить вручную в Linux?

1 Ответ

0 голосов
/ 15 мая 2020

В пользовательском пространстве tty рассматривается как файл. Итак, в этом примере дескриптор открытого файла - это порт uart https://github.com/guu1/serial-communitation-rs232

, поскольку из термина ios функции, используемые в пользовательском пространстве, они говорят на странице руководства

Термин ios функции описывает общий терминальный интерфейс, который предоставляется для управления асинхронными коммуникационными портами.

Я не знаком с драйверами устройств, но из того, что я посмотрел, кажется, что вместо этого использования таких функций, как open () и write () для отправки и получения данных, вы используете функции из uart_core.h, указателя uart_ops

Цитата из: https://www.linuxjournal.com/article/6331

Одной из наиболее интересных переменных в этой структуре является указатель на struct uart_ops, который определяет список функций, которые последовательное ядро ​​использует для обратного вызова в указанный порт c драйвер последовательного порта.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...