phys_base在kernnel源代码中引用__phys_addr()弓/ 86/MM/physaddr.c 和崩溃也使用它作为一个依赖于机器的参数e.g. --machdep phys_base=0x200000什么情况下phys_base不是0?
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 ,它是如何定义/确定的以及为什么。
UPDATE:的“phys_base”登场,可以发现here
phys_base是实际运行的物理地址和链接的物理地址之间的差值。 – firo