我已经读过ATAGS(在arm处理器上使用,为Linux内核提供内存布局等信息)被加载到[SystemRAM base] + 0x100。在Nexus 4上,SystemRAM基址为0x8020000。我也知道内核加载到0x80208000。我已经通过使用以下命令转储内存部分来验证是这种情况:
dd if=/dev/mem bs=1 skip=$((0x80208000)) count=$((0x200)) of=kimage_hdr
标头输出文件与未压缩的内核映像的预期标头匹配。但是,当我尝试使用以下命令查看atag时,生成的文件不包含有效的ATAG列表。
dd if=/dev/mem bs=1 skip=$((0x80200100)) count=$((0x200)) of=atags
我正在运行Android并使用kexec_load系统调用重新加载并重新启动内核,显式将ATAG信息放在0x80201000(0x80200100不与页面边界对齐)。内核重新加载,但即使我明确地看到这一部分,ATAGS也不见了。
有人知道内核是否重新分配或修改了这个内存区域,还是我做错了什么?
顺便说一句:我知道我可以通过/ proc / atags获得ATAGS,但我想知道它们现在存放在物理内存中。