微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于U-BOOT的S3C44B0引导装载程序的设计与实现

基于U-BOOT的S3C44B0引导装载程序的设计与实现

时间:05-21 来源:互联网 点击:

引言

嵌入式Linux的引导装载程序(Bootloader)是操作系统内核启动之前运行的一段程序,其作用与PC机上的BIOS类似。通过这段程序,将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好正确的环境[1]。Bootloader 与底层硬件相关密切,即每个不同配置的目标板都有不同的Bootloader。对于两块不同的嵌入式板,即使它们使用同一种CPU构建,要想让运行在其中一块上的Bootloader程序也能够运行在另一块板子上,通常也都需要修改Bootloader源程序。

嵌入式系统的硬件部分不可能是完全一致的,不可能有通用的bootloader。因此,需要针对硬件系统进行有关引导程序的设计。对于嵌入式系统来说,引导程序比较复杂,一般采用对基本符合硬件体系要求的现有引导程序进行移植,然后加以应用的方法设计引导程序。本文我们选择功能强大的U-BOOT进行移植。

1.U-BOOT简介

U-BOOT,全称Universal Boot Loader,是德国DENX小组开发的用于多种嵌入式CPU的Bootloader引导程序,遵循GPL条款的开放源码项目。U-Boot是在 ppcboot以及armboot的基础上发展而来,现在已经非常成熟与稳定,在许多嵌入式系统开发过程中被采用。目前支持的目标操作系统包括 VxWorks、QNX、RTEMS、NetBSD、Lynxos等。就目前来看,U-BOOT对PowerPC系列处理器支持最丰富,同时还支持 MIPS,x86,ARM,Nios,XScale等诸多常用系列的处理器。U-BOOT对Linux的支持非常完善,是嵌入式Linux Bootloader的最佳选择。

U-BOOT支持的主要功能:

◆系统引导——支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统,从Flash中引导压缩或非压缩系统内核。

◆基本辅助功能——强大的操作系统接口功能,可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤其对Linux支持最强劲。

◆设备驱动——串口、SDRAM、以太网、PCI、RTC等驱动支持。

◆上电自检功能——自动检测FLASH、SDRAM选型及使用情况。

2.U-boot的启动流程[2]

从操作系统的角度看,Bootloader的总目标就是正确的调用内核来执行。由于Bootloader的实现依赖于CPU的体系结构,因此U-BOOT启动大多数分为stage1和stage2两大部分。

第一阶段主要包含依赖于CPU的体系结构硬件初始化代码,通常都用汇编语言来实现。U-BOOT的stage1如图1所示。通常包括以下步骤:

①基本的硬件设备初始化(屏蔽所有的中断、关闭处理器内部指令/数据cache等)。

②为加载Bootloader的Stage2准备空间。

③如果是从某个固态存储媒质中,则拷贝Bootloader的stage2到RAM空间中。

④设置好堆栈。

⑤跳转到stage2的C程序入口点。

第二阶段通常用C语言完成,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。这个阶段的任务有: ①初始化本阶段要使用到的硬件设备。②检测系统内存映射。③将kernel映像和根文件系统映像从flash上读到RAM空间中。④为内核设置启动参数⑤调用内核。


U-boot可执行映像


移植前需要对存储器的地址空间进行了解。操作系统内核可以通过U—BOOT下载到SDRAM中,调试完毕后可以将内核烧写到FLASH中,在本目标板中选用的是uclinux嵌入式操作系统,在存储器空间的分配见图2和图3。其中图2为在FLASH中的存储器空间分布。图3为启动后在SDR AM中的存储器分布。

如图所2示,FLASH存储器空间大小为2M,SDRAM大小为8M。系统上电复位后从0x00000000地址处开始执行代码start.s(即第一阶段),这一部分代码运行在FLASH中。主要完成必要的寄存器设置.,中断向量表,堆栈初始化等,并将第二阶段拷贝到SDRAM地址 0x0c120000处,然后从第二阶段(即跳转到start-armboot函数)开始执行,调用各种init函数,完成第二阶段要使用的硬件设备初始化工作(主要是板级初始化),最后跳转到main-loop函数(属第二阶段)中,负责接受用户命令,然后将其分发给相应的处理函数[3]。

3.U-Boot移植操作

要得到下载到目标板的U-BOOT二进制启动代码,需要对下载的U-BOOT进行编译。建立交叉编译移植开发环境,主机端(PC)开发平台选用linux操作系统,使用交叉编译工具为arm-elf-tools-20030314.sh。

移植U-BOOT到新的开发板上仅需修改与硬件相关的部分即可。主要包括二个方面的移植,第一层是针对CPU的移植,第二层是针对BOARD的移植[4]。为了减少移植工作量,我们在include/config目录下选一个和要移植的硬件相似的开发板,我们选择了B2开发板,在board目录下创建一个myboard目录,把B2板目录下的文件拷贝过来,修改文件名即可。

本系统开发板主要由S3C44B0嵌入式微处理器

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top