linux内存管理 (三) 4 压缩内核启动流程-从start到stext

之前有一个启动流程,是介绍未压缩内核的启动流程
	linux内存管理 () 3 未压缩内核启动流程-从stext到start_kernel
现在这个是介绍 压缩内核启动流程-从start到解压内核
	linux内存管理 () 4 压缩内核启动流程-从start到解压内核

两者关系
	压缩内核启动过程 会引导 未压缩内核启动流程
	因为压缩内核肯定要解压缩,解压缩之后就是 未压缩内核的启动流程了
  • 启动涉及到的文件
arch/arm/boot/compressed/head.S
arch/arm/boot/compressed/piggy.gzip.S

arch/arm/boot/compressed/decompress.c
arch/arm/boot/compressed/lib1funcs.S
arch/arm/boot/compressed/misc.c

linux内存管理 (三) 2 压缩与未压缩的内核镜像启动粗略解析 大概描述了入口与出口

  • 大致过程
1. 
解决 Booting from Angel 的问题
2.
关闭IRQ与FIQ
3.
cache_on
4.
计算链接地址与运行地址
根据压缩内核的最后4个字节(需要翻转)得到 Image 的大小
6.
如果 当前被压缩的内核 与 即将被解压的内核 内存空间有重叠,则将 当前运行的映像搬运到 即将被解压的内核 结束地址 后面
	不重叠的条件
			即将被解压的内核 起始地址 >= 当前镜像的结束地址 + 16384
		或 
			pc >= 即将被解压的内核 起始地址 + 即将被解压的内核(Image) 的大小
7.
如果链接地址与运行地址不等,重定位 .bss 段 与 .got 段
8.
清空 .bss 段
9.
设置参数,调用 decompress_kernel
10.
cache_clean_flush
cache_off
11.
设置r0,r1,r2,设置pc=zreladdr,zreladdr地址的符号就是 stext (arch/arm/kernel/head.S)

  • 详细信息
链接:https://pan.baidu.com/s/1-HZ-7azVgNyrF5yoavIEbA 
提取码:qza8

其他

  • decompress_kernel 调用关系
    linux内存管理 (三) 4 压缩内核启动流程-从start到stext_第1张图片

你可能感兴趣的:(Linux内存管理)