head.S
init.S
这里需要注意的是MMU通过Translation base和table index(即MVA的高12位)找到段描述符,从而找到物理地址,Translation base占[31:14],table index占[13:2],后两位是0,所以就有了str r4, [r1, r3, lsl #2]这种写法,其中r4为段描述符,r1为translation base,r3位MVA的高12位,而C语言里的写法是这样的 *(ttb_base + (virtaladdr >> 20)) = (physicaladdr & 0xFFF00000) | SEC,这里表面上看不到左移两位的操作,其实已经包含了移位的操作,ttb_base是unsigned long类型的,这样一个指针移动1个位置就是4个字节,就相当于左移了2位,*(ttb_base + 1)就相当于(unsigned char*)ttb_base + 1 << 2
本文详细介绍了ARM处理器启动过程及内存管理单元(MMU)的配置方法,包括禁用看门狗、内存控制器初始化、复制代码到SDRAM、创建页表等步骤,并深入解析了MMU段描述符设置及虚拟地址到物理地址转换机制。
765

被折叠的 条评论
为什么被折叠?



