版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、字符設備驅動程序字符設備驅動程序與塊設備不同。所涉及的鍵盤驅動、控制臺顯示驅動和串口 驅動以及與這些驅動有關的接口、算法程序都緊密相關。他們共同協(xié)作實現(xiàn)控制臺 終端和串口終端功能。下圖反映了控制臺鍵盤中斷處理過程。put_queuedo_rdo_ry_inT&LiupTcop5'_to_cookecopy_to_cooke放入隊列屮.read_q放入隊列屮read_qcon_write secondaryprr::1、write_q輸出到顯不加輸出到顯不加以上為總的處理流程,下面對每一個驅動分開分析。首先是鍵盤驅動。鍵盤驅動用 匯編寫的,比較難理解,牽涉內容較多,有鍵盤控制器8
2、04X的編程,還有掃描碼(共3套,這里用第二套)和控制命令及控制序列(p209210有講解)。由于鍵 盤從XT發(fā)展到AT到現(xiàn)在PS/2, USB,無線鍵盤,發(fā)展較快,驅動各有不同,此 版本驅動為兼容XT,將掃描碼映射為XT再處理,因此僅供參考。CNIX操作系 統(tǒng)的鍵盤驅動實現(xiàn)為C語言,可讀性更好。鍵盤驅動鍵盤驅動就是上圖鍵盤硬件中斷的過程。keyboard.S中的keyboardn terrupt函數為中斷主流程,文件中其他函數均被其調用。一一ds, es置為內核數據段以上打星處為鍵盤驅動的核心,即主要處理過程,針對不同掃描碼分別處理,并最 終將轉換后所得ASCII碼或控制序列放入控制臺tty
3、結構的讀緩沖隊列read_q中。鍵處理程序跳轉表為key_table,根據掃描碼調用不同處理程序,對于“普通 鍵”,即只有一個字符返回且沒有含義變化的鍵,調用do_self函數。其他均為“特殊鍵”:1. crtrl鍵的按下和釋放2. alt鍵的按下和釋放3. shift鍵的按下和釋放 4. caps lock鍵的按下和釋放(釋放直接返回,不作任何處理)5. scroll lock鍵的按下6. num lock的按下7.數字鍵盤的處理(包括alt-ctrl+delete的處理,因為老式鍵 盤delete鍵在數字小鍵盤上。還包括對光標移動鍵的分別處理)8.功能鍵(F1F12)的處理9.減號的處理(
4、老鍵盤'與''以OxeO加以區(qū)分,可能其中一鍵 要按shift)do_self是最常用的流程,即跳轉表中使用頻率最高的流程:控制臺程序控制臺程序分兩部分:1.控制臺初始化2.控制臺寫函數控制臺初始化函數根據EGA單色、MDA單色、EGA彩色、CGA各種顯卡設 置顯卡類型、顯存占用內存的起始地址、結束地址、顯示索引寄存器端口和顯示數 據寄存器端口。并將顯卡類型打印在屏幕上。初始化滾屏變量和光標位置,設置鍵 盤中斷陷阱門,復位鍵盤??刂婆_寫函數從終端對應的tty寫緩沖隊列中取字符,并顯示在屏幕上。思路 是利用狀態(tài)機原理對緩沖隊列中的字符逐一處理(若是字符寫在顯存對應位置,若
5、 是光標,設置光標位置),最后向顯示控制器發(fā)送光標顯示位置。一6.ESC(?)E9.ESCH12.ESCL15.ESC18.ESCs光標下移ESC(?)f在光標處插在光標處刪保存光標位指定列數光標移到入n行除n個字符置并回到0列移到指定13.ESCM16.ESCm19.ESCu7.ESCF行、列在光標處刪改變光標處恢復光標位光標上移10.ESCJ除n行字符顯示屬置指定行數清屏14.ESCP性并回到0列11.ESCK在光標處刪17.ESCr8.ESC(?)d對行中字符除n個字符設置滾屏的光標移到刪除始末行號end收到字符ESC0124f且數組歷元par未遍start1. 非控制字符 非擴展字符2
6、. 換行符垂直制表符換頁符3. 回車符4. DEL5. BackSpace6. 水平制表符7. 揚聲器1. ESC E光標移到下一行開始處2. ESC M光標上移一行3. ESC D光標下移一行4. ESC Z發(fā)送終端應答 字符序列5. ESC 7保存光標位置6. ESC 8恢復光標位置ESC2ESC28ESC2871. ESCG ESC'光標移到指定列2. ESCA光標上移 指定行數3. ESCBESC(?)e光標下移指定行數4. ESCC光標右移指定列數5. ESCD光標左移指定列數上圖中黑虛線表示不退出case循環(huán)讀取下一字符,而是直接轉到下一狀態(tài)。狀態(tài)1的5、6與狀態(tài)4的18、
7、19相同。(?)表示可能包含?串口程序、串行通信原理UCCP串行接口串行接口通信方式:方向、連接、異步/同步;速度控制:波特率控制、收/發(fā)時鐘、基準時鐘; 差錯控制:單/雙端、信號重復、檢錯和糾錯編碼; 長距離傳輸:信號調制(調頻、調幅、調相); 通道共享:時分多路、頻分多路; 通信協(xié)議:異步串行/同步串行通信協(xié)議;接口標準:類型(信號定義、邏輯特性、電氣特性、機械特性 )、起止式異步串行通信協(xié)議LSBy/ /0 /0/10/1空 閑 位起始位奇偶校驗位可有可無停止位(1, 1.5或2位)通信刖約定一波特率、子符(數據/校驗/結束)格式;字符識別一空閑狀態(tài)、字符開始、數據格式、字符結束、起點漂
8、移解決; 抗干擾(信號重復)實現(xiàn)-起始位采樣、數據采樣;字符正確性一校驗碼編碼技術、檢錯與糾錯 三、串行通信接口標準標準類型:RS-232C、RS-422A、RS-423、RS-485RS-232C接口標準:信號定義:RxD、TxD、SG、DTR/DSR、RTS/CTS、DCD、RI 邏輯特性:連接、信號使用/不使用MODEM時握手規(guī)則電氣特性:信號電平、電平轉換機械特性:連接器、有效傳輸距離 四、INS8250內部結構 內部總體結構CS0- CS I -CS2A2 AI -A0ADSC5OUTDDIS DISTR DISTRy DOSTR- nosTRMR_ XIALI*XTAL2-*數據總
9、線緩沖器彳二接收緩沖寄存器RBRX.AR選擇和控制邏輯接收移位寄存器即狀態(tài)寄存器.SR線躋控制野布器LCR除數鎖存器(高位)兒H除數鎖存器(低位)DLLMODEM控制寄存器MCRMODE1狀態(tài)寄存MSR 4-中斷允許寄存器】ER發(fā)送保持寄存器IIR中斷識別寄存器IIR接收同步控制發(fā)送同步控制發(fā)送移伐寄存器*波特率發(fā)生器MODEM控制邏輯嚼制-SIN-RCLK SOUTHOUDOUIo尸 DTRco 01H1oOUT2 CTSDSRRi_RLSD” TNTPR7中斷控制邏輯INTPR端口定義和寄存器定義A2A1A0DLABRD#有效WR#有效0000接收緩沖寄存器RBR發(fā)送保持寄存器THR1波特
10、率除數寄存器DLL(低字節(jié))0010中斷允許寄存器IER1波特率除數寄存器DLH(高字節(jié))010X中斷識別寄存器IIRI£lFO控制器FCR011X線路控制寄存器LCR100XMODEM 控制寄存器 MCR101X線路狀態(tài)寄存器LSR110XMODEM 狀態(tài)寄存器 MSR111XScratch寄存器說明:DLAB為LCR的D7位LCR 使用時,最后一次使 D7=0并設置其它位;DLH/DLL 值為基準時鐘頻率十(16 X波特率);IIR 中斷請求一 IIR過程,對IIR讀操作時其值的變化原理;與程序關系緊密的硬件是除數寄存器、接受緩沖、發(fā)送緩沖、中斷允許寄存器、以 及通信線路和Mod
11、em的控制和狀態(tài)寄存器。所謂的 DLH/DLL值在除數寄存器中 設定,即波特率因子。同步控制時會以當前設定波特率的16倍頻控制每一位信號的脈沖保持時間(即如果要求高信號必須是保持10ms,貝U同步控制會以10/16ms的時間精度保證16次的10/16ms都為高脈沖),接收到信號以同樣的原理檢測信 號。(通常檢測16倍頻中的第7, 8,9三個倍頻處的脈沖,以少數服從多數原則 判斷脈沖的高低)。中斷的屏蔽與否取決于中斷允許寄存器。中斷產生后都在中斷標識寄存器中置 位。因此只要有中斷標識在中斷標識寄存器中置位且不屏蔽就會發(fā)出中斷。在實際 處理中,在串口中斷處理中循環(huán)判斷是否在處理完上一中斷后已產生下
12、一中斷,若 有則直接處理,提高了效率。串口程序分為初始化部分serial.c和中斷處理部分rs_io.s。串口初始化相當簡 單:串口中斷處理程序也很簡單:保存現(xiàn)場,即eax等針對4個中斷源的處理函數中兩個函數:Modem狀態(tài)改變的處理和接收狀態(tài)有錯處理都未作實際處理,只是復位相應寄存器。另兩個函數為已接收到數據處理和發(fā) 送保持寄存器空的處理。接收到數據中斷的處理(read_char函數)(與讀隊列read_q交互)讀取字符發(fā)送保持寄存器空中斷的處理(write_char函數)(與寫隊列write_q交互)計算寫緩沖隊列中的字符數頭尾指針相等?置等待進程狀態(tài)為可運行(喚醒)屏蔽發(fā)送保持寄存器隊列
13、中字符數超過256 個?退出置等待進程狀態(tài)為可運行(喚醒)頭尾指針相等?讀隊列尾的字符到保持寄存器退出尾指針前移、取模、保存字符設備(終端)的上層接口tty_io.c和tty_ioctl是終端(控制臺和串口終端)的上層接口實現(xiàn)其實除了 copy_to_cooked(函數提供完全供內核使用外。字符設備接口函數(即與用戶程序 的接口)就三個:tty_read(),tty_write()和tty_ioctl()與用戶程序的接口函數的特征 是以設備號作為參數,而不會以某個內核數據結構作為參數。tty_read函數實現(xiàn)用戶接口從tty隊列的secondary隊列中讀取字符。讀取的 規(guī)則由p378的MIN
14、和TIME機制決定。tty_write函數將用戶緩沖區(qū)的字符寫入 tty的write_q隊列,未寫完或 write_q滿了則睡眠,直到寫完為止。tty_iotcl是用 戶程序用來設置或取得tty設備(控制臺終端或串口終端)參數的。如設置或取 得termios結構的屬性、設置波特率。獲取或設置終端設備進程的組id等。還有很多功能Linux0.11未實現(xiàn),估計是為了兼容 POSIX標準,已預留了接口。tty_read(),tty_write()在系統(tǒng)中的位置如下圖:丈n毎如屮字役設備馳動程庁注:函數 tty_write(). tty_read (i 和 copy _t o_c ook$d() 均t
15、E tty_io. c '|1押制臺終端設備值得一提的是tty_queue緩沖隊列結構中緩沖區(qū)的算法,采用的是循環(huán)緩沖區(qū)的 算法:tail指針處取字符,head指針處插字符。tail取完一字符和head插完一字 符,都將指針增1。到了邊界再轉到緩沖區(qū)開頭,詳見 p410 2334行緩沖區(qū)操作宏 函數。緩沖區(qū)的數據結構如下圖:termios : i'i 晦tty_table 數組”瓦它字段寫函數指針tty垢隊列 (irrit e_q)tty輔助隊列(secondary)tty讀隊列(read_q)真它字段 -(-ail)緩沖區(qū)(buf)tty_io.c和tty_ioctl.c兩文
16、件中與用戶接口無關,只在內核中使用的函數是 copy_to_cooked(函數。它的功能是1.將read_q中的字符復制成規(guī)范模式字符放在 secondary隊列中。2.對鍵盤中斷符進行處理:向當前進程發(fā)送鍵盤中斷信號,鍵 盤退出信號。3.如果設置了回顯標志,將相應字符放入 write_q隊列并調用tty- write直接輸出到屏幕(con_write)或從串口輸出(rs_write) 4.最后喚醒等待 sec on dary的 進程。LinuxO .11字符設備部分總結該部分盡管有鍵盤、顯卡、串口的硬件驅動程序,但它們通過中斷串聯(lián)在了一 起,即相互間緊密相關。相關的方式是以功能為導向:1.控
17、制臺終端2.串口終端1.控制臺終端,見下面兩圖。是以鍵盤中斷觸發(fā)的中斷處理過程:鍵盤中斷處 理(掃描碼轉ASCII碼或CSI)-行規(guī)則程序(copy_to_cooked)-屏幕顯 示(顯卡驅動con_write,顯示字符及光標位置和完成滾屏功能)融盤屮斷處理過程鍵盤砌件中斷放入隊列屮輸出到顯示屏con_writeput.queuedo_t Ly_int&nupTcopy_ta_cookeVrread_qsecond£r5Trrire_Q系統(tǒng)調用read, Write了符設備接口char dev.ct ty_Trri te (?tty_read()字符設備馳動程川seconda
18、ry11 !iechowrite qcopy_tQ_coaked() |j 1注;歯數 tty_write().rty_read 0 和co-tocooked ()均在 tty_io. c '(Jcon_write()console, cput_aueue ()keyboard. S終喘就裂擰制臺終端設備*終端顯示器2.串口驅動,與鍵盤只有一個中斷源(按鍵)不同,串口有4個中斷源,Linu x0.11只對接收到數據中斷和發(fā)送數據中斷處理(其余2個只是復位寄存器,暫未處理)。對于接收到數據中斷:串口中斷處理過程按版到數據中斷read_qwrite_q上圖為串口中斷接收到數據后的處理過程。rs_write的作用是開啟寫保持空寄存器 空中斷,此中斷會調用 write_char中斷處理程序。因此此時是中斷嵌套中斷。概括 起來也是3步:串行口接收到字符中斷-行規(guī)則程序(cop
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版現(xiàn)代農業(yè)技術研發(fā)與應用合同2篇
- 2025年度皮草品牌代理銷售合同范本3篇
- 2025年度木工工程安全責任合同范本
- 2024版礦山股權礦權轉讓居間合同
- 二零二五奶茶店員工入職員工關懷與福利合同
- 二零二五年度木工班組木材拼接與雕刻服務合同4篇
- 2025年度老舊小區(qū)綜合改造項目施工合同3篇
- 二零二五年度企業(yè)內部審計與合規(guī)檢查服務合同范本
- 二零二五年度一致行動人委托授權合同范本專業(yè)解讀3篇
- 二零二四年度印刷宣傳冊制作、印刷及廣告策劃合同3篇
- 2024年可行性研究報告投資估算及財務分析全套計算表格(含附表-帶只更改標紅部分-操作簡單)
- 湖北省石首楚源“源網荷儲”一體化項目可研報告
- 醫(yī)療健康大數據平臺使用手冊
- 碳排放管理員 (碳排放核查員) 理論知識考核要素細目表四級
- 撂荒地整改協(xié)議書范本
- 診所負責人免責合同范本
- 2024患者十大安全目標
- 會陰切開傷口裂開的護理查房
- 實驗報告·測定雞蛋殼中碳酸鈣的質量分數
- 部編版小學語文五年級下冊集體備課教材分析主講
- 電氣設備建筑安裝施工圖集
評論
0/150
提交評論