




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Linux設備驅動程序設計第一章 簡介,參考書籍,Linux設備驅動程序(第三版) Jonatban Corbet等著 魏永明等譯 中國電力出版社 Linux設備驅動開發(fā)詳解(第二版) 宋寶華著 人民郵電出版社 Linux設備驅動開發(fā)技術及應用 (韓)俞永昌著 人民郵電出版社 Linux內核設計與實現(第二版) Robert Love著 陳莉君等譯,Linux設備驅動的現狀,高需求 Linux內核的絕大多數代碼為設備驅動 新設備、新芯片、新驅動的需求 高門檻 涉及到大量硬件操作 涉及到內核基礎知識 涉及到并發(fā)控制與同步 復雜的軟件結構框架 高回報,內核空間和用戶空間,系統(tǒng)態(tài):在Linux系統(tǒng)中
2、,內核在最高級執(zhí)行,也稱為“系統(tǒng)態(tài)”,在這一級任何操作都可以執(zhí)行。 用戶態(tài):而應用程序則用戶態(tài)執(zhí)行在最低級,所謂的“用戶態(tài)”,在這一級處理器禁止對硬件的直接訪問和對內存的未授權訪問。 內核空間:模塊運行的空間是在所謂的“內核空間”; 用戶空間:應用程序運行的空間是在“用戶空間” 。 它們分別引用不同的內存映射,也就是程序代碼使用不同的“地址空間”。,Linux內核功能劃分,進程管理 內存管理 文件系統(tǒng) 設備管理 網絡連接(strcut net_device),Linux內核功能,進程管理 進程管理負責創(chuàng)建和銷毀進程,并處理它們與外界之間的通信 控制進程如何共享CPU的調度器 總之,在單個或者多
3、個CPU上實現了多個進程的抽象 內存管理 內核在有限的可用資源之上為每一個進程創(chuàng)建了獨立的虛擬內存空間(MMU) 內核的各個部分在和內存管理系統(tǒng)交互的時候都使用相同的一組函數調用,包括簡單的malloc/free和其他一些復雜的函數,Linux內核功能,文件系統(tǒng) 文件系統(tǒng)是Linux基礎 內核在沒有結構的硬件系統(tǒng)上面構造了結構化的文件系統(tǒng) Linux支持多種文件系統(tǒng)類型 YAFFS (Yet Another Flash File System) ROMFS RAMFS JFFS2(Journaling Flash File System) 設備控制 幾乎每一個系統(tǒng)操作都會映射到物理設備上 除去
4、CPU,內存以及其他幾個很有限的對象之外,幾乎所有的設備控制操作都由與被控制設備相關的代碼(設備驅動程序)來完成,內核模塊的構造和運行,設備驅動程序的存在形式 可卸載模塊 內核提供的特性可以在運行時進行擴展 可在運行時添加到內核中的代碼被稱為“模塊” 常用模塊 設備驅動和文件系統(tǒng) 靈活 編譯進內核 與內核其他的功能模塊靜態(tài)編譯在一起,不可卸載,內核態(tài)和用戶態(tài),多數操作系統(tǒng)都把內核和應用程序分為2個層次管理 內核態(tài) 有較高的權限,可以控制處理器內存的映射和內存的分配方式 訪問外設空間和處理器的特殊狀態(tài)寄存器, 控制中斷和DMA 用戶態(tài) 權限低,優(yōu)先級低 處理器控制著對硬件的直接訪問以及對內存的非
5、授權訪問 具有不同的內存映射(指針的傳遞處理) get_user, put_user, copy_from_user, copy_to_user 應用程序執(zhí)行系統(tǒng)調用或者被硬件中斷的時候由用戶態(tài)轉換為內核態(tài),內核代碼代表應用程序執(zhí)行操作,能夠訪問進程地址空間的所有數據,可裝載模塊,Linux: 內核提供的特性可在運行時進行擴展 模塊 可在運行時添加到內核中的代碼,包括但 不限于設備驅動程序 insmod 將模塊連接到正在運行的內核 rmmod 移除連接,嵌入式Linux的設備管理,Linux將設備分成兩大類:一類是塊設備,類似磁盤以記錄塊或扇區(qū)為單位,成塊進行輸入/輸出的設備;另一類是字符設備
6、,類似鍵盤以字符為單位,逐個進行輸入/輸出的設備。網路設備是介于塊設備和字符設備之間的一種特殊設備。 塊設備接口僅支持面向塊的I/O操作,所有I/O操作都通過在內核地址空間中的I/O緩沖區(qū)進行,它可以支持隨機存取的功能。文件系統(tǒng)通常都建立在塊設備上。 字符設備接口支持面向字符的I/O操作,由于它們不經過系統(tǒng)的快速緩存,所以它們負責管理自己的緩沖區(qū)結構。字符設備接口只支持順序存取的功能,一般不能進行任意長度的I/O請求,而是限制I/O請求的長度必須是設備要求的基本塊長的倍數。 處理器與設備間數據交換方式 處理器與外設之間傳輸數據的控制方式通常有3種:查詢方式、中斷方式和直接內存存?。―MA)方式
7、。 1查詢方式 設備驅動程序通過設備的I/O端口空間,以及存儲器空間完成數據的交換。例如,網卡一般將自己的內部寄存器映射為設備的I/O端口,而顯示卡則利用大量的存儲器空間作為視頻信息的存儲空間。利用這些地址空間,驅動程序可以向外設發(fā)送指定的操作指令。通常來講,由于外設的操作耗時較長,因此,當處理器實際執(zhí)行了操作指令之后,驅動程序可采用查詢方式等待外設完成操作。 驅動程序在提交命令之后,開始查詢設備的狀態(tài)寄存器,當狀態(tài)寄存器表明操作完成時,驅動程序可繼續(xù)后續(xù)處理。查詢方式的優(yōu)點是硬件開銷小,使用起來比較簡單。但在此方式下,CPU要不斷地查詢外設的狀態(tài),當外設未準備好時,就只能循環(huán)等待,不能執(zhí)行其
8、他程序,這樣就浪費了CPU的大量時間,降低了處理器的利用率。,2中斷方式 查詢方式白白浪費了大量的處理器時間,而中斷方式才是多任務操作系統(tǒng)中最有效利用處理器的方式。當CPU進行主程序操作時,外設的數據已存入端口的數據輸入寄存器,或端口的數據輸出寄存器已空,此時由外設通過接口電路向CPU發(fā)出中斷請求信號。CPU在滿足一定條件下,暫停執(zhí)行當前正在執(zhí)行的主程序,轉入執(zhí)行相應能夠進行輸入/輸出操作的子程序,待輸入/輸出操作執(zhí)行完畢之后,CPU再返回并繼續(xù)執(zhí)行原來被中斷的主程序。這樣,CPU就避免了把大量時間耗費在等待、查詢外設狀態(tài)的操作上,使其工作效率得以大大提高。中斷方式的原理示意圖如圖6.1所示。
9、 能夠向CPU發(fā)出中斷請求的設備或事件稱為中斷源。中斷源向CPU發(fā)出中斷請求,若優(yōu)先級別最高,則CPU在滿足一定的條件時,可中斷當前程序的運行,保護好被中斷的主程序的斷點及現場信息,然后根據中斷源提供的信息,找到中斷服務子程序的入口地址,轉去執(zhí)行新的程序段,這就是中斷響應。CPU響應中斷是有條件的,如內部允許中斷、中斷未被屏蔽、當前指令執(zhí)行完等。CPU響應中斷以后,就會中止當前的程序,轉去執(zhí)行一個中斷服務子程序,以完成為相應設備的服務。 系統(tǒng)引入中斷機制后,CPU與外設處于“并行”工作狀態(tài),便于實現信息的實時處理和系統(tǒng)的故障處理。,3直接訪問內存(DMA)方式 利用中斷,系統(tǒng)和設備之間可以通過
10、設備驅動程序傳送數據,但是,當傳送的數據量很大時,因為中斷處理上的延遲,利用中斷方式的效率會大大降低。而直接內存訪問(DMA)可以解決這一問題。DMA可允許設備和系統(tǒng)內存間在沒有處理器參與的情況下傳輸大量數據。設備驅動程序在利用DMA之前,需要選擇DMA通道并定義相關寄存器,以及數據的傳輸方向,即讀取或寫入,然后將設備設定為利用該DMA通道傳輸數據。設備完成設置之后,可以立即利用該DMA通道在設備和系統(tǒng)的內存之間傳輸數據,傳輸完畢后產生中斷以便通知驅動程序進行后續(xù)處理。在利用DMA進行數據傳輸的同時,處理器仍然可以繼續(xù)執(zhí)行指令。,什么是設備驅動程序(DD)?,在Linux內核中扮演特殊角色,使
11、某個特定硬件響應一個定義良好的內部編程接口,該接口完全隱藏設備的工作細節(jié) DD的任務是將用戶的標準化調用作用于實際硬件的設備特有操作上 為什么要編寫設備驅動程序?,Linux的設備驅動程序,硬件設備與應用程序之間的一個中間軟件層 它使得某個特定硬件能夠響應一個定義良好的內部編程接口,同時完全隱蔽了設備的工作細節(jié) 用戶通過一組與具體設備無關的標準化的調用來完成相應的操作 驅動程序的任務就是把這些標準化的系統(tǒng)調用映射到具體設備對于實際硬件的特定操作上 驅動程序是內核的一部分,可以使用中斷、DMA等操作 驅動程序在用戶態(tài)和內核態(tài)之間傳遞數據,設備驅動程序的作用,機制:需要提供什么功能 策略:如何使用
12、這些功能 分層的思想 由于不同的環(huán)境需要不同的方式來使用硬件,因此應盡可能做到讓驅動程序不帶策略 驅動程序應當處理如何使硬件可用的問題,而將如何使用硬件留給上層應用程序,設備驅動程序主要功能,設備驅動程序主要完成如下功能: 檢測設備和初始化設備 使設備投入運行和退出服務 從設備接收數據并提交給內核 從內核接收數據送到設備 檢測和處理設備錯誤,另一角度: 驅動程序可看作應用程序與實際設備之間的軟件層 即使對于相同的設備不同驅動程序可能提供不同功能,需要在許多因素間作出平衡 三方面因素: 提供給用戶盡可能多的選項 編寫驅動程序占用的時間 盡量保持程序簡單,嵌入式Linux驅動程序介紹,嵌入式Lin
13、ux驅動已經支持的設備門類齊全,已成為linux相對其他嵌入式操作系統(tǒng)的一大優(yōu)勢 工業(yè)控制常用的串口,并口 人機輸入設備鼠標、鍵盤,觸摸屏 彩色、黑白液晶顯示輸出 網絡的完善支持,包括tcp/ip,udp,firewall, WLAN,ip forwarding,ipsec,vpn Usb的全面支持,包括usb硬盤、u盤,usb攝像頭 支持豐富的文件系統(tǒng),包括fat32,ntfs,嵌入式驅動程序的作用,驅動程序直接操控硬件 收發(fā)通訊數據 讀寫存儲介質,比如flash或硬盤 操作輸出設備和執(zhí)行機,例如打印,開關門襟等等 PDF 文件使用 pdfFactory Pro 試用版本創(chuàng)建 ,嵌入式驅動程
14、序的作用,驅動程序提供軟件訪問硬件的機制 應用軟件通過驅動程序安全高效的訪問硬件 驅動程序文件節(jié)點可以方便的提供訪問權限 控制 驅動程序作為一個隔離的中間層軟件,將底 層細節(jié)隱藏起來,提高了軟件的可移植性,訪問Linux設備驅動的方法,設備提供dev文件系統(tǒng)節(jié)點和proc文件系統(tǒng)節(jié)點 應用程序通過dev文件節(jié)點訪問驅動程序 應用程序通過proc文件節(jié)點可以查詢設備驅動的信息,驅動程序在哪兒,驅動程序在哪兒,驅動程序位于drivers目錄下 驅動程序占kernel代碼50%或以上,Linux驅動程序編譯方式,Linux中驅動程序的使用可以按照兩種方式進行編譯: 一種是靜態(tài)編譯進內核; 另一種是編
15、譯成模塊以供動態(tài)加載。,注意:對于uCLinux而言,由于其不支持模塊動態(tài)加載,而且嵌入式Linux不能夠象桌面Linux那樣靈活的使用insmod/rmmod加載、卸載設備驅動程序,因而通常在uCLinux中采用的是將設備驅動程序靜態(tài)的編譯進內核。,Linux驅動程序開發(fā),建立嵌入式Linux平臺,移植和編寫驅動程序往往是最具挑戰(zhàn)的工作 驅動程序的開發(fā)周期一般較長,對產品的面世時間有著重要影響 驅動程序質量的好壞,直接關系到系統(tǒng)工作效能和穩(wěn)定性,對項目的成敗起著關鍵作用,設備驅動程序的分類,字符設備 所有能夠象字節(jié)流一樣訪問的設備都通過字符設備來實現 它們被映射為文件系統(tǒng)中的節(jié)點,通常在/d
16、ev/目錄下面 一般要包含open read write ioctl close等系統(tǒng)調用的實現 塊設備 通常是指諸如磁盤、內存、Flash等可以容納文件系統(tǒng)的存儲設備。 塊設備也是通過文件系統(tǒng)來訪問,與字符設備的區(qū)別是:內核管理數據的方式不同 它允許象字符設備一樣以字節(jié)流的方式來訪問,也可一次傳遞任意多的字節(jié)。 網絡接口設備 通常它指的是硬件設備,但有時也可能是一個軟件設備(如回環(huán)接口loopback),它們由內核中網絡子系統(tǒng)驅動,負責發(fā)送(hard_start_xmit()和接收數據包。 它們的數據傳送往往不是面向流的,因此很難將它們映射到一個文件系統(tǒng)的節(jié)點上。,Linux下設備驅動程序組
17、成,自動配置和初始化子程序: 負責檢測所要驅動的硬件設備是否工作正常,如果該設備正常,則對這個設備及其相關驅動程序所需要的軟件狀態(tài)進行初始化。這部分驅動程序僅在初始化的時候被調用一次。,服務于I/O請求的子程序: 該子程序稱為驅動程序的上半部。這部分程序在執(zhí)行時,系統(tǒng)仍認為與進行調用的進程屬于同一個進程,只是由用戶態(tài)變成了核心態(tài),可以在其中調用sleep()等與進程運行環(huán)境有關的函數。,中斷服務子程序: 稱為驅動程序的下半部,由Linux系統(tǒng)來接收硬件中斷,再由系統(tǒng)調用中斷服務子程序。,基本概念,主設備號和次設備號 主設備號和次設備號能夠唯一地標識一個設備 128(V2.0以前), 256(V
18、2.0以后) 主設備號相同的設備使用相同的驅動程序,次設備號用于區(qū)分具體設備的實例 動態(tài)獲取主設備號 Linux下對設備號的分配請參考Documentation/devices.txt 設備文件 Linux使用設備文件來統(tǒng)一對設備的訪問接口,將設備文件放在/dev/目錄下 設備的命名一般為設備文件名+數字或者字母表示的子類,例如/dev/hda1, /dev/hda2等 Linux 2.4以后引入了設備文件系統(tǒng)(devfs)的概念,所有的設備文件作為一個可以掛裝的文件系統(tǒng),這樣就可以被文件系統(tǒng)統(tǒng)一管理,從而設備文件就可以掛裝到任何需要的地方。一般將主設備建立一個目錄,再將具體的子設備文件建立在
19、此目錄下。例如,/dev/mtdblock/0,基礎知識回顧,硬件部分: 處理器、存儲器、接口與總線 基本工具使用 時序圖 硬件電路圖,Linux內核的編譯加載,make menuconfig make zImage make modules 內核配置系統(tǒng)由以下3部分組成: makefile: 定義編譯規(guī)則 Kconfig: 給用戶提供配置選擇功能 配置工具: 配置命令解釋器和配置用戶界面,.config配置文件 運行make menuconfig時,配置工具首先分析與體系結構對應的/arch/xxx/Kconfig文件,該文件除包含一些與體系結構相關的配置項外,通過source語句引入一系列Kconfig文件,而這些Kconfig可再次通過source引入下一層Kconfig 一般地,驅動工程師在drivers目錄的相應子目錄增加新設備驅動代碼,并增加或修改Kconfig配置文件和Makefile腳本,小結:Linux驅動程序,在Linux操作系統(tǒng)中驅動程序是操作系統(tǒng)內核與硬件設備之間的橋梁,它屏蔽了硬件的細節(jié) (如總線協(xié)議、DMA操作等),在應用程序看來硬件設備只是一個特殊的文件。 驅動程序的基本功能主要有以下幾點: 對設備的初始化和釋放。如對音頻設備而言包括向內核注
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位口腔健康講座課件
- 海安八校聯(lián)考數學試卷
- 河南省往年單招數學試卷
- 健康管理師基礎知識課件
- 2025年云南省硯山縣二中物理高二第二學期期末達標測試試題含解析
- 健康管理中醫(yī)養(yǎng)生學課件
- 河北省臨西縣實驗中學2025屆高一物理第二學期期末考試模擬試題含解析
- 綠色建筑設計標識自評估報告范文2025版
- 2025年中國防盜器行業(yè)市場深度分析及發(fā)展前景預測報告
- 2025年中國汽車手動工具行業(yè)發(fā)展監(jiān)測及發(fā)展戰(zhàn)略規(guī)劃報告
- 2024年百色市靖西市特崗教師招聘筆試真題
- 采購培訓課件
- 2025年河南省中考語文試卷真題(含標準答案及解析)
- 2025年中國智能收款機市場調查研究報告
- 新能源汽車充電站建設項目匯報
- 2025年河南省中考數學試題卷(含官方答案)
- 診后疾病管理行業(yè)體系構建
- 機床類設備管理制度
- 2025年中國鹽酸環(huán)丙沙星行業(yè)市場調查、投資前景及策略咨詢報告
- 物業(yè)管家群管理制度
- 危化行業(yè)專家管理制度
評論
0/150
提交評論