arm64_linux启动流程分析03_设定当前core的启动状态
接下来看el2_setup
1 | ENTRY(el2_setup) |
判断当前core的EL, 如果是EL1, 就设定使用little endian, CPU_BE
和CPU_LE
只有一条会编译进code. 之后返回BOOT_CPU_MODE_EL1
, 如果EL2, 会初始化虚拟化相关的东西, 比较复杂, 先搁着.
1 | adrp x23, __PHYS_OFFSET |
这段code跟kaslr有关, 我们下篇文章来着重讲这个. 先接着往下看set_cpu_boot_mode_flag
:
1 | set_cpu_boot_mode_flag: |
在__boot_cpu_mode
标签下保存了两个值
1 | ENTRY(__boot_cpu_mode) |
这段code的作用就是把保存的这两个值修改为一致, 且为当前CORE的启动EL, 其他CORE启动时也会运行这段code, 这样如果后面的CORE启动到了不同的EL就又会把这两个值修改为不一致, 从而可以判断出CPU的启动状态时不对的.