GoldFish Kernel启动:ARM汇编详解中断禁用与模式设置

5星 · 超过95%的资源 需积分: 10 238 下载量 156 浏览量 更新于2024-07-27 1 收藏 783KB PDF 举报
本文将深入剖析Linux内核GoldFish启动过程中的ARM汇编细节,着重关注arch/arm/kernel/head.S中的关键代码。文章从一个实际的场景出发,描述了Kernel启动阶段如何通过BL指令传递执行权限,以及ENTRY(stext)在启动流程中的核心作用,它定义了内核的入口点。 在汇编代码中,`.section`指令被用来指定代码的存储区域,".text.head","ax"表明这部分代码是可执行的,且处于分配状态。ENTRY(stext)在这里指定了内核启动时执行的第一个函数,它是通过链接器ld脚本中的定义来确定的,确保内核启动的正确流程。 接下来,文章介绍了MSR(Move Special Register)指令,这是ARM汇编中用于设置CPU状态寄存器(CPSR)的重要操作。通过`msrcpsr_c,#PSR_F_BIT|PSR_I_BIT|SVC_MODE`这一行,代码禁用了中断(I/F)并置入Supervisor模式(SVC_MODE),这是操作系统级别运行的必要条件。CPSR控制位包括用户模式标志(如N/Z/C/V)、中断控制(I/F)以及CPU模式选择,共涉及多个字段,每个字段都有特定的功能和用途。 作者还详细解释了不同字段的作用,例如`c`、`x`、`s`和`f`字段分别对应控制、扩展、状态和功能位,这些设置对CPU的行为有着直接影响。通过这些设置,内核能够确保在启动初期,中断被关闭,并以安全的管理模式运行,为后续系统初始化和模块加载做好准备。 文章最后概述了ARMCPU支持的不同运行模式,以及MSR指令的具体操作格式,帮助读者理解内核启动时处理器状态的管理和切换。这不仅对于理解Linux内核的底层工作原理,对于深入学习和调试ARM平台的内核开发都具有很高的参考价值。整个分析过程深入浅出,适合对汇编语言有一定基础的开发者阅读。