裝置驅動簡介 -- ldd3讀書筆記

來源:互聯網
上載者:User

標籤:linux   ldd3   drivers   驅動   linux裝置驅動   

    1. 概述

    讀《Linux Device Drivers 3》(影印版)(簡稱 ldd3)已經到第九章了,感覺前面的也忘的差不多了。所以準備把以前讀過的內容做一下筆記,並且主要側重代碼的注釋與理解。因為我也是一個Linux核心新手,所以將一步一步的介紹在學習驅動過程中的每一個細節。希望這些部落格在鞏固知識的同時,能夠協助到其他像我一樣摸索在Linux驅動和核心學習領域的入門新手。

    這一篇部落格算是後續系列部落格的開篇,主要介紹一下與Linux的裝置驅動相關的概念以及驅動環境的搭建。


    2. Linux驅動簡介

    以前還沒有接觸過驅動之前,就聽我的同學說,他以後要做驅動開發,因為驅動處於底層,技術更新比較慢,這樣他就不用整天跟著流行技術跑了。當時就感覺驅動是高大上的技術,下定決心也要學習底層的東西。後來我的同學去了華為,不知道他有沒有在做驅動,反正我是下定決心學習要學習Linux核心。

    簡單的說,驅動就是用來管理硬體的核心代碼。驅動程式的本質就是核心代碼,用來為上層的應用程式提供支援。學習了驅動程式之後,才明白了上層的應用到底是如何工作的。驅動程式既可以以模組的形式獨立存在,在需要的時候再被載入到核心中;又可以被編譯到核心中,直接使用。兩種方式各有優缺點,模組化的驅動使得核心的體積更小,而內建的驅動可以不用每次啟動系統後都載入需要的模組。一般來說,如果某個模組是你所經常需要用到的,建議將這個模組編譯到核心中。不過現在模組化已經深入人心,所以ldd3這本書介紹的驅動主要是模組化(module)的。

    驅動可以劃分為三類:字元裝置驅動,塊裝置驅動和網路驅動。

    字元裝置驅動是最常見的一類驅動,例如寫一個控制LED的驅動程式就屬於字元裝置驅動。這類驅動就像一個檔案一樣,通過檔案系統中的一個節點(存在於/dev目錄之下)進行訪問。字元裝置驅動實現的操作應該包括open,close,read和write,對它的操作是基於位元組流的,就像是在一個操作一個檔案(可能沒有lseek操作)。

    塊裝置驅動通常與存放裝置有關,在塊裝置上可以安裝一個檔案系統,例如硬碟等。在大多數unix系統上,塊裝置驅動的操作不是基於位元組流,而是基於塊,一個塊一般為512位元組。不過在Linux系統中,已經掩蓋這個特點,使得塊驅動一次可以傳輸任意的資料,這也就和字元裝置完全一樣了。另外,應用程式對於塊裝置驅動的訪問也是通過/dev下的檔案系統節點來進行的。

    網路裝置在這裡就先不介紹了。

 

    3. 驅動開發環境搭建

    關於 ldd3 的代碼可以使用下面的命令從 git 倉庫進行拷貝:

git clone https://github.com/duxing2007/ldd3-examples-3.x

將倉庫複製到本地之後,進入到倉庫的目錄,運行 make 命令進行編譯,就可以使用了。這個倉庫包含了 ldd3 每一章介紹的程式碼範例,很有參考價值。關於倉庫中具體模組的使用,以及在編譯過程中出現的錯誤,將會在以後的部落格中介紹。

裝置驅動簡介 -- ldd3讀書筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.