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