platform device記憶體,中斷,時鐘

2021-06-16 12:23:59 字數 1332 閱讀 3649

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 ...