日期:2014-05-16  浏览次数:20585 次

Uboot 和 Linux启动流程

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、桌面。