我想訪問物理地址0xfee00020
,這是APIC寄存器的存儲器映射的位置。我想使用「MOV
」指令將數據讀取或寫入此位置。我應該先做物理到虛擬地址的翻譯嗎?應該如何在內聯程序集中編寫代碼片段?如何在MOV指令中使用物理地址?
謝謝。
我想訪問物理地址0xfee00020
,這是APIC寄存器的存儲器映射的位置。我想使用「MOV
」指令將數據讀取或寫入此位置。我應該先做物理到虛擬地址的翻譯嗎?應該如何在內聯程序集中編寫代碼片段?如何在MOV指令中使用物理地址?
謝謝。
是的,您需要先對地址進行物理到虛擬地址的轉換(通常使用ioremap),然後才能使用它。在某些平臺上,您可以直接使用ioremap的返回值作爲指向您要訪問的內存的指針。
應使用下列功能而不是直接訪問的地址(可能的工作,但它絕對是不可移植):
request_mem_region()
ioremap()
writeb()/writew()/writel()
或readb()/readw()/readl()