在x86 arch中,linux内核2.6.x,32位系统
我理解虚拟地址0xC0000000~0xFFFFFFFF
是为内核保留的。
并且可以通过
将此虚拟地址转换为物理地址减去0xC0000000。
然而,我认为即使结果相同,MMU也会翻译
通过遍历页表来将内核虚拟地址(例如0xC0851000)转换为物理地址。
,例如
CR3 - >页面目录 - >页表 - > PFN。
我是对还是错?如果我错了,请纠正我。
我需要在x86,linux 32bit系统中开发基于硬件的内核监视器。
所以我需要知道这个问题
请帮忙。
答案 0 :(得分:3)
对于内核逻辑地址,你是对的。内核虚拟地址(如vmalloc
分配的内存)不一定与表示逻辑地址空间的物理地址进行一对一映射。
请记住,内核逻辑地址并不总是通过减去偏移量来转换为物理地址(在x86中是真的,但不是,例如,AVR32)。
答案 1 :(得分:0)
“此虚拟地址可以通过
转换为物理地址减去0xC0000000“
由于内核虚拟地址的页面表是以这种方式配置的,因此人们提出了你提到的快捷方式。