文章预览
RISC-V Linux的汇编启动部分比较简单,不算复杂。有两个部分比较核心:页表创建和重定向。页表创建是用C语言写的,今天先分析汇编部分,先带大家分析整体汇编启动流程,然后再分析重定向。 注意:本文基于linux5.10.111内核 汇编启动流程 先从整体分析汇编做的事情,有个大体框架。 路径: arch/riscv/kernel/head.S ,入口是 ENTRY(_start_kernel) 从 ENTRY(_start_kernel) 开始进行启动前的一些初始化,建立页表前的主要工作: 关闭所有中断 /* 关闭所有中断 */ csrw CSR_IE, zero csrw CSR_IP, zero 加载全局指针gp /* 加载全局指针gp */ .option push .option norelax la gp, __global_pointer$ .option pop disable FPU /* 禁用 FPU 以检测内核空间中浮点的非法使用*/ li t0, SR_FS csrc CSR_STATUS, t0 选择一个核启动 /* 选择一个核启动 */ la a3, hart_lottery li a2, 1 amoadd.w a3, a2, (a3) bnez a3, .Ls
………………………………