ARM Android内核虚拟地址到物理地址的转换实例 (ARM Android kernel virtual address to physical address)
实验平台:Samsung Exynos 5420 Android 4.2
从ARM手册(arm_architecture_reference_manual)上可以知道,arm有两个格式的页表:short-descriptor translationtable format 和 long-descriptortranslation table format。从5420板子上的实验结果来看,如果板子上仅仅装了一个Android,使用的是short格式的页表,如果板子上先装xen,再在xen上装一个Android,使用的是long格式的页表。实验中,只在板子上装了Android,也就是会使用short格式的页表。ARM32位控制寄存器TTBCR的最高位EAE,决定了页表所使用的格式:
通过编写内核模块,可以使用下面的嵌入式汇编在Android kernel中读出TTBCR寄存器的值
__asm__ __volatile__("MRC p15, 0, %0, c2, c0, 2\n"
:"=r"(ttbcr)
:
)
实验的结果,TTBCR的寄存器的值为0(的确是0!)