OK6410A 开发板 (八) 33 linux-5.11 OK6410A 内存管理第一阶段

A arch/arm/kernel/head.S 中的 stext符号 - __turn_mmu_on 符号
----此时开了MMU,开启了虚拟内存时代
流程
mrc p15, 0, r9, c0, c0
	// 将 cpuid 存储到 r9
__lookup_processor_type
	// 根据 r9 中的值 ,获取 procinfo 并存储到 r5
movs    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 r2
ldr r12, [r10, #PROCINFO_INITFUNC]
add r12, r12, r10
ret 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
  • 内存管理相关1
50004000 - 50007fffc 地址 
为 下列 部分所在的物理地址 做 到 虚拟地址 的 映射
1. 当前pc处相关代码
2. 整个kernel的代码
3. atags的数据
  • 内存管理相关2
arch/arm/mm/proc-v6.S 中的 __v6_setup
设置  D cache , I cache , write buffer 

  • 内存管理相关3
__enable_mmu 写 cp15 协处理器
load domain access register
	// 该寄存器 在 MMU开启后的访问内存流程中 会被使用
load page table pointer
	// 该寄存器 在 MMU开启后的访问内存流程中 会被使用
  • 内存管理相关4
__turn_mmu_on 写 cp15 寄存器
write control reg
	// 开MMU
	// 此语句一开始执行,就代表MMU开启了
	// 下一句就是 MMU开启后的访问内存流程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值