日期:2014-05-16 浏览次数:20661 次
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、桌面。