1. UBOOT的主要功能
UBOOT的主要任务是初始化硬件(如:串口,内存),然后将内核从Flash中读到RAM中,然后跳转到内核的入口点去运行,也就是启动操作系统。
UBOOT和BIOS的差异:PC机的引导程序由BIOS和位于硬盘MBR中的引导程序(GRUB或LILO)一起组成。BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序(GRUB/LILO)读到系统内存中然后将控制权交给引导程序。引导程序的组要任务是将内核从硬盘读到内存,然后跳转到内核的入口点去运行。
传统的个人电脑上面BIOS会有一个int19软件中断功能,在初始化完成后,BIOS会进入int19中断,寻找启动介质,如软盘,光盘,硬盘,flash或者网络等等,读取第一个扇区的内容到内存的0000:7C00处,跳入这个地址执行。这里int19就是一个bootloader,启动引导器。所以BIOS具有Boot Loader的功能。当然,目前的BIOS功能已经被扩充了很多,例如电源管理方面的ACPI接口,USB驱动,PXE网络引导功能,硬盘加密,TPM接口,BIOS配置界面,BIOS自动恢复等等。
2. 零地址跳转
下面介绍一下系统上电后如何跳转到程序执行的第一条指令。系统上电后,所有的处理器通常都从处理器制造商预先安排的地址开始执行。如X86处理器复位后一般在4G-8字节处,而ARM处理器一般是在0x00000000起开始执行。
3. UBOOT执行的2个stage
UBOOT的执行分为两个阶段,第一个阶段stage1主要使用汇编语言编写,第二个阶段stage2主要使用C语言编写。
UBOOT stage1阶段的主要任务:
1)系统复位转入UBOOT的stage1入口点
2)设置异常向量
3)设置CPU