學習linux驅動程式大概有半年了,最近在專案上動手寫了幾個驅動,才對驅動有了乙個全面的認識。
1. 學習驅動最好的參考資料是核心驅動原始碼。
2. 要想寫好乙個驅動必須看懂別人的驅動。
這算是我深有體會的兩點吧!
下面說下我對驅動的認識:
對於驅動程式開發者來說,最好寫的的驅動是 兩 層驅動,也就是說,只包括硬體層和使用者層,大部分網上的例程都是這樣寫的,在硬體層直接操作硬體,並向使用者層提交介面函式,我說的兩層的含義是驅動做兩種工作:1.操作硬體。2.向使用者層提供介面。
但是如果去閱讀核心的話,會發現,linux的驅動大部分都是 三 層模型,這第三層叫做驅動核心層(core),他位於硬體層和使用者層之間,之所以這樣做,主要是考慮可移植性,比如,rtc驅動,能讀取時間的晶元很多,但它們要向使用者空間提供的介面是相同的,這樣,可以抽象出一層,這一層是所有rtc的共性,所以把它叫做核心層。它負責提供使用者層介面,並遮蔽底層硬體細節(所謂的遮蔽實質上就是提供層與層的介面)。
不論是幾層驅動,驅動開發者最關心的是硬體層,但完成的工作不僅僅是如何操作硬體,更重要的是怎麼為上層提供介面,還說rtc吧,核心層肯定不用動了,要不然會破壞掉linux的和諧,呵呵,主要工作就在硬體層了,操作硬體倒好說,難得是驅動開發者需要向核心層提供什麼介面?這種問題似乎沒有人去討論,因此這也成為初學者的難處。我當時學到這裡也是煩了好長一段時間,最後還是硬著頭皮將rtc的整個原始碼讀了一遍,也就清楚了核心需要什麼介面。從封裝的角度(不知道用封裝來形容合不合適)來說,核心層只能說是半封裝,對使用者空間來說,它提供了固定的介面——系統呼叫,但是,對於底層,它可是相當靈活,這種介面不是固定的,也不是統一的。
Linux驅動程式學習(一)
root localhost uname r 3.10.0 862.el7.x86 64 首先找到www.kernel.org發現並沒有所需要的核心版本 官方解釋說看到在 後面有任何東西,表示你現在正在執行乙個發行版本 distribute kernel 要核心請找發行這個版本的人。我的系統是cen...
驅動程式學習筆記
什麼是驅動程式 驅動程式就是使硬體工作的一種特殊軟體,它執行在作業系統的核心空間 虛擬位址0xc0000000到0xffffffff 封裝硬體細節,服務於系統呼叫。驅動程式和應用程式的區別 1.應用程式執行在使用者空間,驅動程式執行在核心空間。2.應用程式可使用標準的庫函式,而驅動程式連線到核心,只...
查詢驅動檔案ko Linux驅動程式學習一
最近在看 linux裝置驅動程式 裡面提到需要準備乙個核心源 樹。在本人電腦上 usr src裡面檢視到好幾個版本的linux版本,這些其實就是編譯好的核心源 也就是核心源 樹。二 配置linux 核心 配置核心的方法很多,主要有如下幾種 1.makemenuconfig 基於ncurse庫編制的圖...