u-boot中几个主要文件及作用

来源:互联网 发布:电脑动画软件 编辑:程序博客网 时间:2024/06/07 05:36

http://bbs.sciencenet.cn/thread-1117042-1-1.html
http://hi.baidu.com/mrxzwang/item/8c8d017c6df5d93c6cc37cef

bootloader是嵌入式系统开发过程中不可逾越的一步,其作用就是初始化必要的硬件,建立完整的内存映射图,为后续操作系统的系统运行建立一个合适的软硬件环境。
u-boot是bootloader的一种,它能工作在多种体系结构上,比如ARM、X86、MIPS、PPC等,能够引导多种操作系统,包括常见的window、linux等,特别是在嵌入式中的广泛应用。
u-boot在ARM上引导linux内核的过程,首先需要关闭包括看门狗在内各种中断,使得在对板级初始化过程中不会受到外部的影响,通过配置PLL完成对系统时钟的初始化,通过配置BWSCON寄存器完成对SDRAM的初始化,然后通过对CPSR和SP的配合使用完成对堆栈的初始化。


U-Boot的启动代码分布在start.S、low_level_init.S、board.c和main.c文件中。

其中,start.S是U-Boot整个程序的入口,该文件使用汇编语言编写,不同体系结构的启动代码是不同的;

level_init.S是特定开发板的设置代码;

board.c包含开发板底层设备驱动;

main.c是一个与平台无关的代码,U-Boot应用程序的入口在此文件中。



第一阶段(stage 1)是依赖于CPU体系结构的代码(如设备初始化代码等),一般用汇编语言来实现。

主要进行以下方面的设置:

设置ARM进入SVC模式、禁止IRQ和FIQ、关闭看门狗、屏蔽所有中断。

协处理器清空I/D cache、清空TLB、禁止MMU和cache、配置内存控制器(BWS)、设置堆栈,设置时钟(FCLK,HCLK,PCLK)、为搬运代码做准备、搬移uboot映像到RAM中(C语言使用CopyCode2Ram ,或者使用copy_loop实现)、分配堆栈、清空bss段(使用clbss_l实现)。


第二阶段(stage 2)通常用C语言来实现。
start_armboot(): 
     一系列初始化(cpu, 板卡,中断,串口,控制台等),开启I/D cache。初始化FLASH,根据系统配置执行其他初始化操作。

打印LOG,使能中断,获取环境变量,初始化网卡。最后进入main_loop()函数。在main_loop函数中会检查bootdelay和bootcmd环境变量,如果bootcmd已经设置过,则在等待bootdelay个毫秒后会自动执行bootcmd。如果等待过程中被用户中断(ctl+c)或者bootcmd没有设置,则会等待用户输入命令。