天天看點

linux 終端裝置 - 線路規程

line discipline(LDISC) 線路規程,是linux和類unix系統終端子系統的一個軟體驅動層。終端子系統從上到下可劃分為三層:

頂層tty core驅動層提供字元裝置接口(因為所有的終端裝置都是字元裝置);

最底層是tty driver層用來和硬體進行通訊,實作tty_operations供tty core和 LDISC層調用;

中間層line discipline實作終端輸入輸出資料處理的政策。

line discipline把tty core和tty driver粘合在一起,政策的分離使得tty core和tty driver不需要關注資料文法處理,tty driver可以被相同的硬體複用,而隻需更改line discipline。

linux終端裝置預設的線路規程是N_TTY,它從tty driver和應用程式接收資料,按照終端設定處理資料。對于輸入資料,它處理特殊的中斷字元(比如Control-C),删除字元(backspace, delete)等等;對于輸出資料,它用CR/LF序列替換LF字元。當uart port用做普通序列槽時,使用N_TTY線路規程。

當uart port裝置用做serial modem 的internet撥接上網時,使用PPP線路規程處理資料;ppp LDISC把從uart core來的序列槽資料組裝為PPP輸入packet,然後分發給網絡協定棧;ppp LDISC把從網絡協定棧發送來的資料拆包發送給uart port。

最初在閱讀linux tty終端系統代碼時,對LDISC非常困惑,除非想了解line discipline文法處理細節,完全可以越過大部分ldisc代碼。

ldisc工作于tty core和tty driver之間,ldisc需要為二者提供如下接口函數:

TTY core端接口:

open()

close()

hangup()

write()

flush_buffer()

chars_in_buffer()

set_termios() 

read() 

poll() 

ioctl() 

compat_ioctl()

TTY driver端接口:

繼續閱讀