私は、ATAGS (メモリ レイアウトなどの情報を 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 syscall を使用してカーネルをリロードおよび再起動し、ATAG 情報を 0x80201000 に明示的に配置しました (0x80200100 はページ境界に整列しません)。カーネルがリロードされますが、このセクションをはっきりと見ても、ATAGS は消えています。
カーネルがこのメモリ領域を再割り当てするか、または変更するかどうか、誰かが知っていますか、それとも私が何か間違っているのでしょうか?
ところで: /proc/atags から ATAGS を取得できることはわかっていますが、物理 RAM のどこに格納されているか知りたいです。