什么是IO內(nèi)存
I/O內(nèi)存也稱為Memory-Mapped I/O(MMIO), 它是指一種編址方式,不同cpu平臺使用的編址方式不同,一種是“IO內(nèi)存”方式,也叫統(tǒng)一編址方式,是指內(nèi)存和外設(shè)的地址是在同一個(gè)地址空間上的,比如我們常見的ARM、MIPS等平臺;還有另外一種叫獨(dú)立編址方式,是指內(nèi)存的地址空間和外設(shè)的地址空間是分開的,比如x86平臺。
(1) IO內(nèi)存申請
要使用某個(gè)外設(shè)前,要申請其所對應(yīng)的IO內(nèi)存,表明驅(qū)動(dòng)要訪問這塊區(qū)域。
(2)IO內(nèi)存訪問
在內(nèi)核中訪問IO內(nèi)存(通常是芯片內(nèi)部的各個(gè)I2C,SPI, USB等控制器的寄存器或者外部內(nèi)存總線上的設(shè)備)之前,需首先使用ioremap()函數(shù)將設(shè)備所處的物理地址映射到虛擬地址上。
驅(qū)動(dòng)訪問IO內(nèi)存流程
1)調(diào)用request_mem_region()申請I/O內(nèi)存資源。
2)將設(shè)備寄存器的物理地址通過ioremap()映射到內(nèi)核空間的虛擬地址。
3)通過readb/writeb等接口訪問設(shè)備的寄存器。
4)訪問完成后,調(diào)用iounmap()函數(shù)對ioremap()映射的虛擬地址解除映射,并調(diào)用release_mem_region()函數(shù)釋放申請的I/O內(nèi)存資源。
審核編輯:劉清
-
ARM
+關(guān)注
關(guān)注
134文章
9027瀏覽量
366476 -
Linux
+關(guān)注
關(guān)注
87文章
11207瀏覽量
208716 -
mips
+關(guān)注
關(guān)注
1文章
237瀏覽量
47680 -
IO口
+關(guān)注
關(guān)注
3文章
169瀏覽量
23967
發(fā)布評論請先 登錄
相關(guān)推薦
評論