[xboard] 23 kernel启动流程之汇编篇
文章目录
-
-
- 1总的流程
- 2 入口函数
-
-
- 2.1 主函数
- 2.2 __enable_mmu 与 __turn_mmu_on
- 2.3 __mmap_switched
- 2.4 __v7_setup
-
-
1总的流程
一般的armv7系列CPU,使用的内核镜像是zImage和uImage,所以都是压缩后的镜像,它们的启动流程一般会经历3个阶段
- 初始化解压镜像
- 初始化运行镜像,汇编阶段
- 初始化运行镜像,C语言阶段
大体的流程如下所示
bootloader→ 压缩内核入口(start arch/arm/boot/compressed/head.S)→ decompress_kernel()→ __decompress() [具体算法实现]→ 解压数据到目标地址→ **跳转到解压后的内核(stext arch/arm/kernel/head.S)**→ start_kernel()
2 入口函数
2.1 主函数
arch/arm/kernel/head.S.arm @指定以下代码为ARM指令集__HEAD @__HEAD 是一个标记,表示代码的开始部分
ENTRY(stext) @定义了内核入口点 stext(Start of TEXT)ARM_BE8(setend be ) @ ensure we are in BE8 mode 强制BE8字节序(若编译为BE8)THUMB( badr r9, 1f ) @ Kernel is a