L2 ページ テーブルのベース アドレスはどのように決定できますか? (ARM Cortex-A9 を使用)
たとえば、7KB のデータ空間を必要とし、アドレス 0x0 から始まるプログラムがある場合、4KB のページが 2 つ必要です。そのために、L2 ページ テーブルのベース アドレスを指すエントリを L1 ページ テーブルに追加します。次に、そのように L2 ページ テーブルに 2 つのエントリを追加します (最初のページは addr = 0x0、2 番目のページは 0x1000)。
u32 *ptr;
u32 small_page;
small_page = addr / 0x1000;
ptr = small_page + L2_table_base_addr;
*ptr = (addr & 0xFFFFF) | attributes;
今、私がまだ理解していないことが1つあります。L2 ページ テーブルのベース アドレスを特定するにはどうすればよいですか? L1 ページ テーブルの直後にテーブルを配置する必要がありますか?
アドレスはどこに保存できますか? L1 ページ テーブルのベース アドレスがコプロセッサ レジスタに格納されていることはわかっていますが、L2 ベース アドレスを格納するレジスタが見つかりませんでした。
確認すべきもう 1 つの質問は、コプロセッサ レジスタ TTBR0 と TTBR1 の両方が L1 ページのベース アドレスを保持していることです。それぞれ独自に。L1はTTBR0、L2はTTBR1じゃないですよね?