platform匯流排、裝置、驅動

來源:互聯網
上載者:User

      一個現實的linux裝置和驅動通常需要掛接在一種匯流排上,對於本身依附於PCI/USB/IIC/SPI等的裝置而言,這自然不是問題。但是在嵌入式系統裡面,SOC系統中整合的獨立的外設控制器、掛接在SOC記憶體空間的外設等確不依附於此類匯流排。基於這一背景,linux發明了一種虛擬匯流排,稱為platform匯流排,相應的裝置稱為platform_device,而驅動成為 platform_driver.這樣就本所有的驅動都統一採用了匯流排、裝置、驅動的架構思想,無論是有匯流排(IIC/USB/PCI...)掛載的裝置驅動,還是沒有的,都可以使用一個裝置驅動模型

    注意:所謂的platform_device並不是與字元裝置、塊裝置、網路裝置並列的概念,而是Linux系統提供的一種附加手段,例如,在s3c6410處理器中,把內部整合的IIC/RTC/SPI/LCD、看門狗等控制器都歸納為platform_device,而它們本身就是字元裝置。

 

裝置驅動中引人platform的概念至少有如下兩大好處:

1、使得裝置被掛接在一個匯流排上,因此,符合linux2.6的裝置模型。其結果是,配套的sysfs結點、裝置電影管理都成為了可能。

2、隔離的BSP和驅動。在BSP中定義Platform裝置和裝置使用的資源、裝置的具體配置資訊,而在驅動中,只需要通過通用API去擷取資源和資料,做到了板相關的代碼和驅動代碼的分離,使得驅動具有更好的可擴充性和跨平台性。

 

platform_driver結構體的定義如下:

struct platform_driver {<br />int (*probe)(struct platform_device *);<br />int (*remove)(struct platform_device *);<br />void (*shutdown)(struct platform_device *);<br />int (*suspend)(struct platform_device *, pm_message_t state);//主要用於電源的管理<br />int (*suspend_late)(struct platform_device *, pm_message_t state);<br />int (*resume_early)(struct platform_device *);<br />int (*resume)(struct platform_device *);//主要用於電源的管理<br />struct pm_ext_ops *pm;<br />struct device_driver driver;<br />};

 

platform_device結構體的定義如下:

struct platform_device {<br />const char* name;<br />intid;<br />struct devicedev;<br />u32num_resources;<br />struct resource* resource;//資源的管理<br />};

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.