platform_device記憶體資源使用步驟
1.res = platform_get_resource(pdev,ioresource_mem,0);
platform_get_resource 返回資源物件
2.request_mem_region(res->,res->end - res->start + 1,driver_name);
request_mem_region()巨集,請求分配指定的i/o記憶體資源
#define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))
注: 呼叫request_mem_region()不是必須的,但是建議使用。該函式的任務是檢查申請的資源是否可用,
如果可用則申請成功,並標誌為已經使用,其他驅動想再申請該資源時就會失敗。
3.host->baseaddr = ioremap(res->,res->end - res->start + 1);//位址對映
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
將乙個io位址空間對映到核心的虛擬位址空間上去,便於訪問。
release_mem_region()巨集,釋放指定的i/o記憶體資源。
#define release_mem_region(start,n) __release_region(&iomem_resource, (start), (n))
platform_device中斷資源使用步驟
1.host->irq = platform_get_irq(pdev,0);
2.ret = request_irq(host->irq,at91_mci_irq,irof_shared,driver_name,host);
外設時鐘的開啟
struct clk=clk_get(null,"adc");
clk.enable();
之後adc對應的時鐘位就能時能。
struct clk *clk_get(struct device *dev, const char *id)
}.............................................
return clk;
}clk_get從乙個時鐘list鍊錶中以字元id名稱來查詢乙個時鐘clk結構體並且返回,最後呼叫clk.enable(),來時能對應的外設時鐘源。
詳解platform device 系列函式
platform device 系列函式,實際上是註冊了乙個叫platform的虛擬匯流排。使用約定是如果乙個不屬於任何匯流排的裝置,例如藍芽,串列埠等裝置,都需要掛在這個虛擬匯流排上。driver base platform.c platform裝置宣告 struct device platfor...
platform device與驅動的聯絡
首先你需要為soc的各個功能部分定義他的一些資源.例如可用於訪問的暫存器位址.中斷號,dma什麼的。然後將這些資源 resource 作為 platform 的dev 通過platform add devices函式將你定義的paltform device變數註冊到系統的dev裡面.或者你可以象我這...
關於platform device一些講解
從2.6版本開始引入了platform這個概念,在開發底層驅動程式時,首先要確認的就是裝置的資源資訊,例如裝置的位址,在2.6核心中將每個裝置的資源用結構platform device來描述,該結構體定義在kernel include linux platform device.h中,struct ...