Uboot启动流程
第一阶段:关闭看门狗,设置系统时钟,初始化RAM,复制第二阶段的代码到内存中,设置好栈,跳转到第二阶段的C语言入口点。
第二阶段:检测内存映射,将内核映像和要传给内核的参数从flash复制到内存中,,设置处理器为SVC模式,关闭MMU、缓存,调用theKernel函数,传入机器号和参数列表地址作为参数,跳转到内核在内存的地址,从而启动内核。
Linux内核启动
架构和开发板相关(汇编代码):
1.检测是否支持该架构,__lookup_processor_type,检测是否支持该机器。
2.建立一级页表,__creat_page_table
3.关闭Cache,使能Mmu。
4.复制数据段、清除BSS段、设置栈、保存机器ID到全局变量。
4.start_kernel
后续通用过程:
setup_arch,初始化CPU子系统,之后让内存和进程管理系统就位,解析uboot传给内核的参数,接下来启动外部总线和外部设备,最后一步是激活用户空间的Init进程,Init进程执行必要的服务和用户空间的脚本,根据配置文件,决定启动哪些程序,如shell、桌面。
本文详细介绍了Uboot的启动流程,包括关闭看门狗、设置系统时钟等第一阶段任务,以及检测内存映射、启动内核等第二阶段任务。同时,也概述了Linux内核的启动过程,包括检测架构支持、建立页表、关闭Cache、使能MMU等步骤,以及后续的通用启动流程。
1574

被折叠的 条评论
为什么被折叠?



