Linux
串口速度控制源碼
假設我們有
/dev/ttyS0
一個預設速度為 9600 bps 的串列設備。比如說,我們已經將其速度更改為,例如,使用
cfsetospeed
.現在,寫入線路的速度必須更慢。
執行此操作的原始碼在哪裡?作業系統的哪個部分控制這個速度?自定義驅動程序,tty 驅動程序還是什麼?以及如何通過設置時鐘速度或延遲?
它可能在驅動程序中,但我找不到。例如,誰能告訴我RocketPort驅動程序中的位置?
串列埠速度通常由硬體本身處理,並由硬體驅動程序配置。
所以要遵循的鍊是
TCSETS
ioctl 呼叫,它呼叫tty_set_termios()
.tty_ioctl.c
如果您在 RocketPort 驅動程序中遵循該鏈,它將呼叫rp_set_termios()
which 本身呼叫configure_r_port()
.這會計算一些配置設置以發送到 RocketPort 晶片(例如除數設置),最終呼叫
sSetBaud
(定義在 中rocket_int.h
),它只是將字節輸出到晶片。因此,核心本身不會對串列線路進行“位撞擊”來確定波特率;UART晶片為我們完成了所有艱苦的工作。我們只需要對晶片進行程式:-)