いくつかの正当な理由により、ページテーブルが強く順序付けられている領域をマップする必要があります。パフォーマンスが少し低下しますが、テーブルへの書き込みやメモリバリアの発行後に完全なキャッシュをフラッシュするよりはましです。
あなたが何を尋ねようとしているのか、どこに問題があるのか 正確にはわかりませんが、これは私のソフトウェアの1つで使用しているものです。
.align
arch_mmu_map_section:
#if ARM_WITH_MMU
ldr r3, =MMU_TLB @ r3 = &table
add r1, r3, r1, lsr #18 @ r1 = &table + offset(entry)
ldr r3, =0xFFFFF @ r3 = (1<<20) - 1
bic r0, r0, r3 @ Align r0 to 1 MB
orr r0, r0, r2 @ ORR the flags
str r0, [r1] @ Write entry to r1, pointer to entry
@ Invalidate UTLB
mov r3, #0
mcr p15, 0, r3, c8, c7, 0
#endif
bx lr
MMU_TLB はテーブルへのポインターであり、mmu_init 中に厳密に順序付けされたものとしてマップされます。この関数のプロトタイプは次のようになります。
void arch_mmu_map_section(addr_t paddr, addr_t vaddr, uint flags);