linux字符設(shè)備有:1、鼠標(biāo),是計(jì)算機(jī)的一種外接輸入設(shè)備,也是計(jì)算機(jī)顯示系統(tǒng)縱橫坐標(biāo)定位的指示器;2、鍵盤,是用于操作計(jì)算機(jī)設(shè)備運(yùn)行的一種指令和數(shù)據(jù)輸入裝置;3、串行端口終端,使用計(jì)算機(jī)串行端口連接的終端設(shè)備;4、控制終端;5、控制臺(tái)等。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。
Linux系統(tǒng)為了管理方便,將設(shè)備分成三種基本類型:
-
字符設(shè)備
-
塊設(shè)備
-
網(wǎng)絡(luò)設(shè)備
它們均以一個(gè)文件節(jié)點(diǎn)形式顯示在文件系統(tǒng)的/dev目錄下(crw–w—- 1 root tty 4, 0 7月 11 09:11 tty0?其中c代表字符設(shè)備類型)。
linux字符設(shè)備
字符設(shè)備是指設(shè)備無(wú)需緩沖即可直接進(jìn)行讀寫的設(shè)備, 如鼠標(biāo),鍵盤,串口設(shè)備、調(diào)制解調(diào)器等, 它與塊設(shè)備的區(qū)別在于是字符操作的基本單位是字節(jié)。
字符設(shè)備的分類
字符設(shè)備主要包括控制終端設(shè)備和串行終端設(shè)備, 例如控制臺(tái)和鍵盤。依據(jù)功能和硬件上的差別, 字符終端設(shè)備有如下分類:
-
串行端口終端(/dev/ttSn):使用計(jì)算機(jī)串行端口連接的終端設(shè)備, 串行設(shè)備數(shù)據(jù)傳輸方式為同一字符8個(gè)bit單線傳輸, 在命令行輸入 echo ‘hello world’ > /dev/ttyS0可將輸入寫入到對(duì)應(yīng)設(shè)備。
-
偽終端(/dev/ttyp,/dev/ptyp): 對(duì)應(yīng)底層不存在真實(shí)的硬件設(shè)備, 用于為其他程序提供終端式樣的接口,如網(wǎng)絡(luò)登陸主機(jī)時(shí)網(wǎng)絡(luò)服務(wù)器和shell程序之間的終端接口。
-
控制終端(/dev/tty):主設(shè)備號(hào)為5, 進(jìn)程控制終端,與進(jìn)程相關(guān)聯(lián),如登陸shell進(jìn)程使用的就是終端/dev/tty。
-
控制臺(tái)(/dev/ttyn,/dev/consol): 計(jì)算機(jī)輸入輸出的顯示器,當(dāng)控制臺(tái)登陸時(shí), 使用的就是tty1, 而ubuntu 圖形界面使用的tty7。
-
其他類型:現(xiàn)行的linux針對(duì)許多不同的設(shè)備建有許多其他種類的設(shè)備特殊文件,如ISIDIN設(shè)備的/dev/ttyIn設(shè)備。
下面為字符設(shè)備結(jié)構(gòu)示意圖
字符設(shè)備的性質(zhì)及特點(diǎn)
-
字符設(shè)備屬于設(shè)備文件系統(tǒng)的一種, 相當(dāng)于底層硬件向上層提供的邏輯設(shè)備文件, 宛如將一個(gè)數(shù)據(jù)端口(數(shù)據(jù)寄存器)與一個(gè)文件對(duì)接起來(lái),設(shè)備驅(qū)動(dòng)程序直接對(duì)文件操作, 于是便直接對(duì)端口進(jìn)行了讀寫操作。 同樣作為文件, 字符設(shè)備驅(qū)動(dòng)也必須實(shí)現(xiàn)文件的基本的操作open(),close(),write(),read()等,當(dāng)然終端重定向操作也是支持的。
-
字符設(shè)備文件文件的讀寫是以單個(gè)字節(jié)為單位的, 不需要設(shè)立硬件緩沖區(qū)。 設(shè)備像訪問字節(jié)流一樣被操作系統(tǒng)訪問。 字節(jié)流就像在硬件端口和文件系統(tǒng)搭建起了一個(gè)傳送管道, 字節(jié)逐個(gè)通過(guò)管道傳輸并呈現(xiàn)給讀寫雙方。 這個(gè)流特性在驅(qū)動(dòng)程序中是以緩沖隊(duì)列來(lái)實(shí)現(xiàn)的。例如: 控制臺(tái)的結(jié)構(gòu)體中的讀寫緩沖隊(duì)列
struct?tty_struct?{ struct?termios?termios; int?pgrp; int?stopped; void?(*write)(struct?tty_struct?*?tty); struct?tty_queue?read_q;???????????????//讀隊(duì)列 struct?tty_queue?write_q;??????????????//寫隊(duì)列 struct?tty_queue?secondary;????????????//tty輔助隊(duì)列(存放規(guī)格化后的字符) };
-
字符設(shè)備由字符設(shè)備號(hào)標(biāo)識(shí)。字符設(shè)備號(hào)由主設(shè)備號(hào)和次設(shè)備號(hào)構(gòu)成, 例如/dev/ttyS0的設(shè)備號(hào)為(4,64); 主設(shè)備號(hào)標(biāo)識(shí)設(shè)備對(duì)應(yīng)驅(qū)動(dòng)程序, 內(nèi)核通過(guò)主設(shè)備號(hào)將設(shè)備和驅(qū)動(dòng)程序一一對(duì)應(yīng)起來(lái), 次設(shè)備號(hào)由驅(qū)動(dòng)程序使用, 用于驅(qū)動(dòng)程序內(nèi)部區(qū)分設(shè)備細(xì)節(jié)差別使用的代碼,內(nèi)核其他部分不使用它。
相關(guān)推薦:《Linux視頻教程》