新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于U-BOOT的S3C44B0引导装载程序的设计与实现

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

作者:时间:2012-05-21来源:网络收藏


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。

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

本系统开发板主要由嵌入式微处理器、2MB的Flash(SST39VF160)、8MB的SDRAM(HY57V641620)、4个LED以及ARM JTAG接口组成。该开发板上与相关部分的功能框图如图1所示。

U-Boot移植主要修改的文件:

针对本文提供的主板硬件资源,从移植最小要求,能正常启动的角度出发,主要考虑修改如下文件:u-boot根目录下的 Makefile文件,include目录下的myboard.h头文件,board目录下的myboard.c文件,cpu/s3c44b0目录下的文件。移植操作中文件修改的具体操作为:

⑴cpu/s3c44b0目录下

◆start.s文件的修改。Start.s是汇编语言编写的U-BOOT程序入口代码,完成对底层硬件的初始化,这个文件的主要任务是设置处理器状态、初始化中断和内存时序等,并确定是否需要对整个U-BOOT代码重定位,最终从Flash中跳转到定位好的内存位置执行。具体修改内容如下。

①设置WTCON=0x0,禁止看门狗定时器,避免处理器强行复位。

②设置INTMSK=0X7ffffff,禁止所有中断。的执行过程中不必响应任何中断。

③根据嵌入式微处理器的工作主频,修改宏CONFIG__CLOCK_SPEED,使处理器能够正常工作,本文的目标板S3C44B0处理器工作主频为66MHZ。

④设置PLLCON寄存器。PLLCON锁相环控制寄存器中存储有计算系统时钟的相关参数,为了产生正确的系统时钟,必须根据外接晶振频率和处理器工作主频确定各个倍频数。

◆serial.c文件。这个文件初始化串口,主要是对UART相关的寄存器进行配置。串口的波特率不需要修改,直接用B2板的串口驱动即可。

⑵board/myboard目录下

◆myboard.c文件。这个文件主要是SDRAM的驱动程序,S3C44B0提供有SDRAM控制器,与一些CPU需要UPM表编程相比,它只需进行相关寄存器的设置即可。

◆flash.c文件。Flash驱动程序就在这个文件中。Flash存储器的烧写与擦除一般不具有通用性,跟具不同型号的存储器做出相应的修改。 Snds110嵌入式系统板选用的是SST39VF160,所以用snds110目录下的flash.c替换原来的flash.c,使FLASH芯片正常工作。

◆memsetup.s文件。memsetup.s代码是对存储器空间的初始化,在start.s中被调用。修改内存映射相关参数,SDRAM的刷新速度等,根据不同嵌入式系统版本修改。



关键词: Bootloader U-BOOT S3C44B0

评论


相关推荐

技术专区

关闭