Linux arch 目录 应该完成什么功能

boot
	1. kernel dtb 重新布局 // 不是共有部分,arm32独有
	2. 各级别页表及开启MMU
	3. 调用 start_kernel
	4. 提供 start_kernel boot 过程中的回调
		setup_arch

运行时的回调	

1BOOT

1.1. kernel dtb 重新布局

如果 kernel 被压缩了,或者 kernel 被(loader) 加载的位置 不是 kernel 想要的
	则会  进行重新 搬运 kernel // 1.解压缩的时候,如果目的地址和当前地址有重叠,要搬运自身到 稍微靠后的地址。而后解压缩
	
	目前只有arm32 的zImage 会 做 Image 的重新搬运
	对于arm32 ,如果你直接加载Image ,Image 不会将其自己 重新搬运

一般情况下 dtb 不会 被搬运
	arm32/64 rv32/64 都不会

该 过程中 基本没有用到 该文 中描述的 公共API

1.2. 各级别页表及开启MMU

swapper_pg_dir 不是一个arch 漏出符号,但是在 VMSA(虚拟内存系统架构) 中起到了很重要的作用

不同的架构用了 不同的临时内核页表(管理了Image/dtb和fixmap的映射关系) 名称 ,总结如下
	arm32 	: swapper_pg_dir 
	arm64 	: init_pg_dir 
	rv32/64 : early_pg_dir 

不同的架构用到了不同的 MMU 开启技术(MMU切换页表),总结如下
	arm32 	: swapper_pg_dir 中的 identity mapping  	VA=PA,无缝切换
	arm64 	: idmap_pg_dir 							VA=PA,无缝切换
	rv32/64 : trampoline_pg_dir  					VA!=PA,利用异常处理来切换到VA

该 过程中 值用到了 该文 中描述的 mem 相关API

"Image .head.text段 的 第一条指令"(一般用arch/xxx/kernel/head.S 中的 __HEAD 索引)"start_kernel" 工作是

建立1级映射机制(fdt Image,mmu on时的映射)

1级别的页表(其实是段表)(4/8字节)一个对应1/2/4MB空间。
	arm32 : 4字节 : 1MB
	arm64 : 8字节 : 2MB
	rv64  : 8字节 : 2MB
	rv32 :  4字节 : 4MB
需要创建Image所在内存位置的映射即可,不需要创建所有内存的映射

1.3. 调用 start_kernel

1.4. 提供 start_kernel boot 过程中的回调

1.4.1 setup_arch

清老页表,创建新页表,切换到新页表

1.4.2 earlycon & early_printk

./drivers/tty/serial/earlycon.c  // 该层架构无关,底层架构相关
./arch/xxx/kernel/early_printk.c // 架构相关 // 目前有 x86/mips/arm32 提供了 early_printk , rv/arm64 不提供

2.运行时的回调

2.1 进程切换

switch_mm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值