1:什么是linux驅動
????從本質上講,驅動就是屬于內核層面的程序代碼,是直接和硬件打交道的。與裸機中直接操作寄存器去操作硬件的不同之處在于,裸機中操作的是物理內存,而我們在驅動中操作的是虛擬內存,驅動中還可以調用內核中提供的很多接口函數來簡化我們操作硬件的過程。
2:linux設備驅動的分類
????根據設備本身的讀寫操作特征的差別,linux驅動主要分為三類
(1)字符設備驅動
????字符設備驅動的特點是軟件在驅動設備是以字節為單位進行的,如LED、LCD、串口、蜂鳴器等
(2)塊設備
????塊設備是相對于字符設備類定義的,塊設備的操作單位是塊,每個塊的字節大小是由硬件本身自己決定的,我們不能通過軟件去修改,不同的塊設備的塊大小也可以不同。常見的塊設備有硬盤、NandFlash、iNand、SD卡等
(3)網絡設備
????網絡設備是專門為網卡設計的驅動模型,linux中網絡設備驅動的主要目的是為了支持API中socket相關的函數的工作。
3:怎么學習linux驅動
????(1)C語言是基礎,驅動代碼本身就是由C語言來編寫的,所以C語言是學習驅動的基礎
????(2)理解linux驅動框架,內核給我們驅動開發者提供了很多設備驅動的框架,而驅動開發者則在理解驅動框架的基礎上去移植驅動,使之適合自己的產品。當然驅動框架只是一個驅動開發的一個標準,而非必須,驅動開發者也可以使用驅動框架去開發驅動
本文轉自 菜鳥養成記 51CTO博客,原文鏈接:http://blog.51cto.com/11674570/1872401