在 Lab 2 中,MAIR 的取值在 https://gitee.com/ipads-lab/chcore-lab/blob/lab2/boot/tools.S#L190 处定义,我注意到此处只定义了 MAIR 1、2、3 的 MemAttr,并在随后使能 MMU 的代码中以此配置了 MAIR_EL1。因此,我理解这说明 PTE 中 AttrIndx 的取值应该为 1 2 3 中的一个。
但在实验指导中,AttrIndx 的描述如下:
MAIR_ELn 的索引,置为 0 表示强序设备内存,置为 4 表示正常内存。
在配置页表的 boot/mmu.c 中,也使用了上述取值。
我认为,有关 MemAttr 的配置出现了一些不一致。同时,经过简单的测试,我发现在 QEMU 中并不会模拟 MemAttr 的行为。
最后,我的问题是,这种取值是否有问题?如果有问题的话,需要怎么修改才能在 RPi 真机上运行?