學習韋東山視頻心得(二)

                    學習韋東山視頻心得(二)

1.字符設備驅動

viewfile?f=66A91C2D59B9219710E547F38E426圖2.6 LCD驅動框架

viewfile?f=66A91C2D59B9219710E547F38E426

圖2.7 LCD硬件框架

字符設備是Linux設備中最基本的設備驅動是其他大型驅動的基石。字符設

備驅動模型,如下圖2.8所示。

Linux內核驅動模塊一般由模塊加載函數,模塊卸載函數,模塊許可申明等等組成。在字符設備驅動中在模塊加載函數中註冊主設備,註冊操作方法,創建設備結點等操作。字符設備驅動移植步驟:

(1)在模塊加載函數中創建設備文件,註冊主設備號,註冊操作方法

(2)分別實現各自操作方法

Linux內核驅動模塊一般由模塊加載函數,模塊卸載函數,模塊許可申明等等組成。在字符設備驅動中在模塊加載函數中註冊主設備,註冊操作方法,創建

 

viewfile?f=66A91C2D59B9219710E547F38E426    

圖2.8 字符設備框架圖

  設備結點等操作。字符設備驅動移植步驟:

(1)在模塊加載函數中創建設備文件,註冊主設備號,註冊操作方法

(2)分別實現各自操作方法

2.平臺設備驅動機制

對於一些常見的接口比如:I2C,SPI接口。Linux操作系統在內核中抽象出一條虛擬的總線,在這條軟件虛擬的總線上掛接這I2C,SPI硬件。通過平臺設備驅動機制,使得驅動程序的通用部分和一些特定硬件資源(比如:寄存器地址,中斷源等等)分離,從而使驅動更加通用,在驅動的移植過程中往往只要添加資源便可,大大的縮短了驅動的移植難度,提高了驅動的通用性〔8〕

viewfile?f=66A91C2D59B9219710E547F38E426 

圖2.9 字符設備框架圖

struct platform_device 平臺設備結構體,一個平臺設備對應一個實際的物理設備,在實際的設備之中最至關重要的是物理設備的硬件信息,比如說:寄存器地址,中斷號,等等。在Linux內核中,把上述一些也有的物理硬件資源抽象出來一個void *型指針,用來接收任意數據類型,稱爲平臺數據。平臺數據一般存放特定設備資源。在函數接口platform_register_device()註冊平臺設備結構到平臺設備鏈表中。如上圖2.9所示。

   struct platform_driver 平臺驅動結構體,一個平臺驅動對應一個驅動,函數接口platform_regisister_driver()把設備驅動註冊到設備驅動鏈表中。當驅動或者是平臺設備註冊相應的鏈表是不斷的查詢對方的鏈表,通過struct platform_mach_id中的結構體的名字跟驅動中的名字是否匹配,當匹配成功時調用設備驅動結構體重probe函數,在probe函數中獲取註冊的設備結構體,然後獲取特定設備的資源,在獲取資源之後,初始化特定的硬件,註冊中斷,註冊主設備號,創建設備文件,註冊操作方法等等一系列操作。

平臺設備驅動機制相比於普通的字符設備而言,使得設備資源與驅動分離,使得驅動移植更加方便與便捷。但是同時,由於爲了使得驅動通用性和便於移植的特性,在Linux內核中往往是分爲多層結構,多個文件,在驅動內部關係錯綜複雜,函數調用關係十分繁雜,Linux驅動與內核渾然一體。

在Linux設備驅動中往往採用分層的思想,使得代碼有很高的互用性,在大型驅動中,多層結構,關係複雜,同時Linux設備驅動採用面向對象的思想,採用大量的結構體,包含關係也是十分繁雜。如下圖2.10所示。

viewfile?f=66A91C2D59B9219710E547F38E426圖2.10 Linux驅動思想

    通過上述的分層思想,達到了代碼互用的功能,借鑑了面向對象的思想。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章