我想访问物理地址0xfee00020
,这是APIC寄存器的存储器映射的位置。我想使用“MOV
”指令将数据读取或写入此位置。我应该先做物理到虚拟地址的翻译吗?应该如何在内联程序集中编写代码片段?如何在MOV指令中使用物理地址?
谢谢。
我想访问物理地址0xfee00020
,这是APIC寄存器的存储器映射的位置。我想使用“MOV
”指令将数据读取或写入此位置。我应该先做物理到虚拟地址的翻译吗?应该如何在内联程序集中编写代码片段?如何在MOV指令中使用物理地址?
谢谢。
是的,您需要先对地址进行物理到虚拟地址的转换(通常使用ioremap),然后才能使用它。在某些平台上,您可以直接使用ioremap的返回值作为指向您要访问的内存的指针。
应使用下列功能而不是直接访问的地址(可能的工作,但它绝对是不可移植):
request_mem_region()
ioremap()
writeb()/writew()/writel()
或readb()/readw()/readl()