u-boot启动简介:
先从makefile里面去设置自己板子的信息,然后去执行相应的config就可以得到配置文件以及相应的开发板的头文件,然后查看连接脚本可知,可知是从start.s文件开始执行的,其实这就已经进入了uboot的第一阶段,在这个阶段里面,uboot主要是通过这个文件来进行硬件初始化,比如说关看门狗,初始化sdram,设置时钟,进入svc模式,拷贝代码,清楚bss段,然后还有就是设置堆栈,然后跳到第二阶段,在这个阶段里面主要是为了检查内存映射,还有就是进行串口的设置,还有最后总要的是要设置tag,以此来告诉kernel信息,然后判断是否有bootdelay和bootcmd,没有的话就继续通过take_kernel函数,在启动函数中主要传递机器id和执行bootm命令来获得加载地址和入口地址来将内核调动过来进行内核启动。
Linux内核启动流程:
首先先处理由uboot传进来的启动参数,其中包括机器id和tag(机器id是在刚进入内核后的汇编文件head.s里面进行处理,去检测此内核是否支持所用cpu,检测内核是否支持单板,而tag测试在c函数里面进行调用),在进入后会进行kernel_inti函数进行启用,接着建立页表,然后就是对时钟和mmu等进行使能,最后就是挂载根文件系统(而根文件系统的挂载点则是根据系统的环境变量进行设置),对根文件系统上的应用进行执行,至此整个操作系统就整体完成。 |