Código fonte do controle de velocidade da porta serial

0

Suponha que temos um dispositivo serial /dev/ttyS0 com uma velocidade de surdina 9600 bps.

Digamos que mudamos sua velocidade para, por exemplo, 4800 bps usando cfsetospeed .

Agora, a velocidade de gravação no fio deve ser mais lenta.

Onde está o código-fonte que faz essa operação? Qual parte do sistema operacional controla essa velocidade? Driver personalizado, driver tty ou o que? E como, definindo a velocidade do relógio ou atrasando?

Pode estar no driver, mas não consegui encontrá-lo. Por exemplo, alguém poderia me mostrar o lugar no driver RocketPort ?

Eu também não encontrei em tty driver .

    
por Ricardo Cristian Ramirez 30.07.2017 / 17:28

1 resposta

2

A velocidade da porta serial normalmente é tratada pelo próprio hardware e é configurada pelo driver de hardware.

Assim, a cadeia a seguir seria a chamada TCSETS ioctl, que chama tty_set_termios() em tty_ioctl.c . Se você seguiu essa cadeia até o driver RocketPort, ele chamaria rp_set_termios() , que chama configure_r_port() .

Isso faz um cálculo das configurações para enviar ao chip RocketPort (por exemplo, a configuração do divisor), que eventualmente chama o sSetBaud (definido em rocket_int.h ), que simplesmente envia os bytes para o chip.

O kernel, por si só, não faz "bit banging" das linhas seriais para determinar a taxa de transmissão; o chip UART faz todo esse trabalho duro para nós. Nós só precisamos programar o chip: -)

    
por 30.07.2017 / 18:01