[摘至嵌入式linux裝置驅動開發詳解]
1.4 嵌入式linux驅動程式
1.4.1 嵌入式linux的核心空間和使用者空間
目前,各種處理器都能防止資源的未經授權訪問,包括嵌入式處理器。一般都是給cpu劃分不同的操作模式。不同的模式有不同的作用,某些操作不允許在低級別模式使用。
核心態和使用者態是在硬體上的習慣說法,兩個狀態分別對應處理器的兩個不同操作模式。例如,arm中的使用者態對應usr模式,而核心態對應svc模式。核心態可以控制記憶體對映方式、特殊暫存器、中斷和dma等,而使用者態則不可以。核心空間和使用者空間是軟體上的習慣說法,兩個空間分別引用不同的位址對映。程式**使用不同的位址空間。如果想直接通過指標把位址空間的資料位址傳到核心是不可能的,需要先通過位址轉換將使用者態位址轉換為核心態位址。
嵌入式linux利用系統呼叫和硬體中斷來完成從使用者空間到核心空間的控制轉移。同時,嵌入式linux提供了一系列函式完成不同空間位址的轉換,如get_user、put_user、copy_from_user、copy_to_user。
1.4.2 嵌入式linux的檔案系統
作業系統最重要的兩部分:程序管理和檔案系統。linux從一開始就把外部裝置全部當成檔案處理。凡是可以產生或接受訊息的都是檔案。嵌入式中常用的檔案系統都是普通linux檔案系統的簡化版,為了適應嵌入式的特點,包括有cramfs、romfs、jffs、jffs2等。
linux支援很多不同種類的檔案系統,甚至裝置也被當做檔案處理。而要支援這樣種類繁多的檔案系統,必須將不同檔案系統的操作和控制納入乙個統一的框架之中、使得使用者可以通過統一的標準來呼叫不同的檔案系統,而感覺不到其中的差異,甚至裝置的呼叫也是通過檔案呼叫的標準來實現的。而這樣的功能的實現是通過虛擬檔案系統來實現的(virtual filesystem switch)。
vfs是物理檔案系統和服務之間的介面層,對使用者程式遮蔽掉不同檔案系統的實現細節,僅給使用者乙個統一的、抽象、虛擬的檔案系統介面,使得不同檔案系統在linux的其他程序看來都是相同的。vfs不是乙個實際的檔案系統,它隨系統啟動產生,關閉結束。僅存於記憶體中,不佔外存空間,主要功能有:記錄可用的檔案系統型別;將裝置與檔案系統對應聯絡起來;處理面向檔案的通用操作。
有了vfs,僅通過一系列的標準的系統呼叫便可以實現所需要的操作,如read()、write()、lseek()等。這些操作主要通過乙個f_op結構指標指向具體的file_operations結構體來實現系統呼叫的轉換。每個檔案系統都有自己的file_operations結構體,內部幾乎全都是函式指標,相當於乙個函式跳轉表。f_op指向了特定的file_operations就等於指向了特定的檔案系統。
1.4.3 嵌入式linux的裝置管理
裝置管理,即輸入/輸出系統是作業系統的重要組成部分。相比於程序管理、記憶體管理和檔案系統管理,裝置管理稍顯複雜。主要是因為多種多樣的裝置同時存在,給制定乙個通用的解決方法帶來了極大的難度。儘管裝置種類繁多,為了便於使用,下層必須使用乙個統一的裝置介面,在linux下,硬體裝置也是被當做檔案系統來處理的,只是這種檔案比較特殊,叫做裝置檔案。通常這些裝置檔案存放在檔案系統的/dev目錄下。
linux通過主次裝置號來聯絡驅動程式和裝置檔案節點。系統依靠主裝置號標識驅動程式,所以同類的裝置的主裝置號是唯一的。在2.4版本以前的核心一直都是利用裝置型別和裝置的主次裝置號管理裝置的方法。在引入了devfs裝置檔案系統之後,傳統方式和devfs管理方式同時發揮作用。傳統的方式會受到裝置數量的限制(最多254個),而採用devfs之後就沒有這個問題了。實現效果上,兩者並沒有很大的區別。
linux 嵌入式驅動程式測試例項
include include include include include include include int main fd open dev fs o rdwr if fd 0 else printf open ok nwrite write fd,buf,strlen buf if n...
嵌入式linux之按鍵驅動程式
1.寫出框架 2.硬體操作 操作虛擬位址ioremap 1.重要函式 trap init init irq asm do irq中斷總入口 分辨中斷,處理中斷,清中斷。讀一下wait event interruptible 的原始碼,不難發現這個函式先將 當前程序的狀態設定成task interru...
嵌入式linux系統中裝置驅動程式
嵌入式linux系統中裝置驅動程式是核心的一部分,完成對裝置初始 讀寫操作和控制等功能。驅動程式隱藏了 硬體裝置的具體細節,對不同的裝置提供一致的介面,這些介面通過file operation結構來定義,設計驅動程式的大部分工作就是 根據硬體結構來 填寫 結構體中定義的函式。主要的函式包括open ...