ARM64的启动过程之(一):内核第一个脚印
作者:linuxer 发布于:-10-10 15:06
分类:ARMv8A Arch
一、前言
kernel的整个启动过程涉及的内容很多,不可能每一个细节都描述清楚,因此我打算针对部分和ARM64相关的启动步骤进行学习、整理,并方便后续查阅。本文实际上描述在系统启动最开始的时候,bootloader和kernel的交互以及kernel如何保存bootloader传递的参数并进行校验,此外,还有一些最基础的硬件初始化的内容。
本文中的source来自4.1.10内核,这是一个long term的版本,后续一段时间的文章都会基于这个long term版本进行。
二、进入kernel之前
系统启动过程中,linux kernel不是一个人在战斗,在kernel之前bootloader会执行若干的动作,然后把控制权转移给linux kernel。需要特别说明的是:这里bootloader是一个宽泛的概念,其实就是为kernel准备好执行环境的那些软件,可能是传统意义的bootloader(例如Uboot),也可能是Hypervisor或者是secure monitor。具体bootloader需要执行的动作包括:
1、初始化系统中的RAM并将RAM的信息告知kernel
2、准备好device tree blob的信息并将dtb的首地址告知kernel
3、解压内核(可选)
4、将控制权转交给内核。当然,bootloader和kernel的交互的时候需求如下:
MMU = off, D-cache = off, I-cac