linux内存管理 (三) 3 未压缩内核启动流程-从stext到start_kernel

  • OK6410 修改的 linux-3.0.1 的代码启动流程
smdk6410        MACH_SMDK6410       SMDK6410        1626
  • 启动涉及到的文件
涉及到的文件
arch/arm/kernel/head.S
arch/arm/kernel/head-common.S
arch/arm/kernel/asm-offsets.c
arch/arm/mm/proc-v6.S
  • 大致过程
匹配处理器
校验tags
建立临时页表
开MMU
数据段搬运 bss段清0 设置sp
相关变量赋值
跳转到 start_kernel
1.
设置处理器到 svc 运行模式,关 FIQ 与 IRQ
2.
从 cp15 处理器的 寄存器 0 中 读取 id code , 得到 处理器 id
将处理器id 与 __proc_info_begin 到 __proc_info_end 中的 proc_info 结构体 比较,得出一个 匹配的 proc_info_list 结构体
	// 否则 死循环
3.
算出 PAGE_OFFSET(0xC0000000) 逻辑地址 对应的 运行地址(50000000 - C0008000 + C0000000 = 50000000),并存储到r8.
为 页表基址 提供参考值
4.
针对 r2, 确定 第一个 tag 是 ATAG_CORE
	// 否则, 赋值 r2 为 0
5.
创建临时页表 // 参考 https://blog.csdn.net/clb1609158506/article/details/41447475 中的图
	// 页表基址 运行地址 为 50000000
	// 页表基址 链接地址 为 C0000000 
	1. 4K个一级页表项,用来索引二级页表(用来索引1MB),索引4G内存
		// 大小 为 0x4000
	2. 为 从__enable_mmu到__enable_mmu_end 的代码 创建 直接映射
	3. 为 kernel 建立从虚拟地址到物理地址的映射
	4. 为 r2 中的 bootargs 建立从虚拟地址到物理地址的映射,包括了过程1中创建的16K一级页表
6.
开启 MMU
	1. __v6_setup,为开启MMU做准备
	2. __enable_mmu->__turn_mmu_on
7.
__mmap_switched
	1. 搬运数据段
	2. 清空bss段
	3. 赋值变量
		arch/arm/kernel/setup.c 中的 unsigned int processor_id
		arch/arm/boot/compressed/misc.c 中的 unsigned int __machine_arch_type
		arch/arm/kernel/setup.c 中的 unsigned int __atags_pointer __initdata
		arch/arm/kernel/entry-armv.S 中的 cr_alignment
		arch/arm/kernel/entry-armv.S 中的 cr_no_alignment
	4. 设置sp
		sp = init_thread_union + 8184
8.
b start_kernel
	跳转到 start_kernel
链接:https://pan.baidu.com/s/1l_ZOSBy-kAD3MhrsZaMrZQ 
提取码:anox 
复制这段内容后打开百度网盘手机App,操作更方便哦
  • 下一步, 确定 start_kernel 之前, 所有内存相关符号的意义及内存分布
KERNEL_RAM_VADDR
CONFIG_PAGE_OFFSET
PAGE_OFFSET
PHYS_OFFSET
TEXT_OFFSET
KERNEL_START
KERNEL_END
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值