phys_base 在内核源代码__phys_addr() arch/x86/mm/physaddr.c 中被引用,并且 crash 也将其用作与机器相关的参数,例如 --machdep phys_base=0x200000
unsigned long __phys_addr(unsigned long x)
{
if (x >= __START_KERNEL_map) {
x -= __START_KERNEL_map;
VIRTUAL_BUG_ON(x >= KERNEL_IMAGE_SIZE);
x += phys_base;
} else {
VIRTUAL_BUG_ON(x < PAGE_OFFSET);
x -= PAGE_OFFSET;
VIRTUAL_BUG_ON(!phys_addr_valid(x));
}
return x;
}
EXPORT_SYMBOL(__phys_addr);
你能帮忙解释一下它在什么情况下不是 0,它是如何定义/确定的以及为什么。
更新:“phys_base”的首次亮相可以在这里找到