本文共 1250 字,大约阅读时间需要 4 分钟。
A arch/arm/kernel/head.S 中的 stext符号 - __turn_mmu_on 符号----此时开了MMU,开启了虚拟内存时代
mrc p15, 0, r9, c0, c0 // 将 cpuid 存储到 r9__lookup_processor_type // 根据 r9 中的值 ,获取 procinfo 并存储到 r5movs r10, r5 // 获取 procinfo 并存储到 r10__vet_atags // 验证 atags__create_page_tables // 内存管理相关1 // clear 50004000 - 50007fffc // at 50005400 , Create identity mapping to cater for __enable_mmu. // at 50007000 - 50007020 , Map our RAM from the start to the end of the kernel .bss section. // at 50007fe0 - 50007fe4 , map boot params address in r2ldr r12, [r10, #PROCINFO_INITFUNC]add r12, r12, r10ret r12 // 内存管理相关2 // 跳转到 arch/arm/mm/proc-v6.S 中的 __v6_setup // 设置 D cache , I cache , write buffer __enable_mmu // 内存管理相关3 // load domain access register // load page table pointer__turn_mmu_on // write control reg , 即 开 MMU // 内存管理相关4
在 50004000 - 50007fffc 地址 为 下列 部分所在的物理地址 做 到 虚拟地址 的 映射1. 当前pc处相关代码2. 整个kernel的代码3. atags的数据
arch/arm/mm/proc-v6.S 中的 __v6_setup设置 D cache , I cache , write buffer
__enable_mmu 写 cp15 协处理器load domain access register // 该寄存器 在 MMU开启后的访问内存流程中 会被使用load page table pointer // 该寄存器 在 MMU开启后的访问内存流程中 会被使用
__turn_mmu_on 写 cp15 寄存器write control reg // 开MMU // 此语句一开始执行,就代表MMU开启了 // 下一句就是 MMU开启后的访问内存流程
转载地址:http://ecigi.baihongyu.com/