u-boot
的任務是啟動核心,核心的任務是啟動應用程式,應用程式會涉及很多檔案和硬體操作(當然不會直接操作硬體),比如讀寫檔案,點燈、獲取按鍵值。
比如對於控制led燈的使用者程式與驅動程式,最簡單的實現方法是:
那麼應用程式中的open
、read
函式最終怎樣呼叫到驅動程式中的led_open
、led_read
呢,中間有哪些東西?
在linux中共有4層軟體,如下圖:
應用程式:就是被呼叫的那些庫函式,例如open
、read
、write
… …
c庫(系統呼叫):其中的其實就是實現open
、read
這些函式來呼叫swi val
指令進入核心(函式不同val值都會不同)
核心: 核心根據swi
後面不同的值去呼叫vfs
中的system_open/system_read/ system_write等異常處理函式 找到相應的驅動程式(vfs:virtual file system 虛擬檔案系統)
例如:
int main()
上面的應用程式主要實現點燈與開啟文字檔案,都是用的同樣的函式。但是點燈與開啟文字檔案的行為顯然不一樣。那麼誰來實現這些不一樣的行為呢?
對於led燈,有led_open
驅動程式。對於文字檔案存在於flash裝置上,也有對於的驅動程式。system_open
、system_read
最終會根據開啟的不同檔案,找到底層的不同驅動程式,然後呼叫驅動程式中的硬體操作函式,比如led_open
來實現對具體硬體裝置的操作。
這就是整個的字元裝置驅動程式框架
例如led如下:
在應用層應用程式中有open
、read
、write
同樣,在驅動程式中也對應有led_open
、led_read
、led_write
剩下的就是驅動框架了。
下一節開始講解驅動框架,然後寫出led驅動程式
驅動程式概念介紹
學習目標 了解linux系統中驅動程式的概念 作用,為後續學習驅動程式編寫打下基礎!u boot的目的是啟動核心,核心的目的是啟動應用程式。應用程式中可能會涉及到讀寫檔案 點亮led 獲取按鍵值等操作,而對於寫應用程式的人來說不必去關心具體硬體如何操作,僅僅只呼叫open rend write等標準...
1 字元裝置驅動程式概念介紹
u boot的任務是啟動核心,核心的任務是啟動應用程式。應用程式會涉及很多檔案和硬體操作 當然不會直接操作硬體 比如讀寫檔案,點燈 獲取按鍵值。對於應用程式的開發人員不要求去閱讀晶元手冊,了解硬體的構造。應用程式的開發人員在使用者空間直接使用open read write等等這些被稱為系統呼叫的函式...
1 裝置驅動程式的概念
系統呼叫是作業系統核心和應用程式之間的介面,裝置驅動程式是作業系統核心和機器硬體之間的介面。裝置驅動程式為應用程式遮蔽了硬體的細節,這樣在應用程式看來,硬體裝置只是乙個裝置檔案,應用程式可以象操作普通檔案一樣對硬體裝置進行操作。裝置驅動程式是核心的一部分。linux將裝置主要分成兩大類 一類是塊裝置...