微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > U-Boot在LPC2210上的移植分析

U-Boot在LPC2210上的移植分析

时间:03-22 来源:互联网 点击:

地调用各级子目录下的Makefile文件,最后把编译过的程序链接成U-Boot可执行映像。因此利用vim在Makefie文件中添加配置命令:

dx2210_config : unconfig

@ ./mkconfig $(@ : _config=) arm lpc2210 dx2210 NULL

各项定义如下:

arm CPU架构(ARCH)

lpc2210 CPU的类型(CPU),其对应于cpu/lpc2210子目录

dx2210 开发板型号(BOARD), 其对应于board/dx2210子目录

NULL 开发板或硬件经销商(VENDER)

这样在执行配置命令make dx2210_config,通过./config脚本可生成include/config.mk的配置文件,硬件平台依赖文件的目录文件可以根据这些定义来确定。

5.2修改include/configs/dx2210.h文件

在include/configs/dx2210.h文件中包含了大部分的全局宏定义。主要修改的宏定义有:#define CONFIG_LPC2210 1 //CPU配置型号

#define CONFIG_LPC2210_CLOCK_SPEED 60 //最大CPU操作频率

#define CONFIG_DRIVER_RTL8019 1 //定义以太网控制器型号

#define RTL8019_BASE 0x83400000 //RTL8019的硬件地址

#define CONFIG_SERIAL 1 //串口设置

#define CFG_LOAD_ADDR 0x81008000 //kernel映像加载到RAM空间中的起始地址

此外还需要修改开发板的波特率,配置网络信息,FLASH ROM和RAM的容量大小、地址信息,操作时序等参数。

5.3 cpu/lpc2210目录下相关文件

该目录中包含了Makefile、config.mk、cpu.c、interrupts.c、serial.c、start.S几个文件。其中汇编文件start.S是整个Bootloader程序的入口,主要设置系统堆栈和工作方式为进入C程序奠定基础。根据RAM地址将中断向量表起始地址 0x0c000000修改为0x81000000,根据LPC2210的芯片手册完成设置CPU速度和时钟频率、为加载Stage2准备RAM空间并将 Stage2加载到RAM中执行、设置堆栈、看门狗、屏蔽所有中断部分的修改。这里注意的是TEXT_BASE变量是在board/dx2210 /config.mk文件中定义,它规定了主程序TEXT段在内存RAM中的起始地址,当u-boot从FLASH中启动后会把Stage2阶段的代码和数据重定位到这个地址开始的RAM中运行以提高速度。复制时要明确Stage2的可执行映像在固态存储设备的存放的起始地址和终止地址,一般来说给 Stage2部分在RAM地址顶端分配1MB的空间,因此经过计算得出TEXT_BASE=0x81700000;serial.c文件是串口设备的驱动代码,在调试部分主要依靠串口产生调试信息,串口波特率设置为115200bit/s;cpu.c文件初始化CPU、由于LPC2210中并没有指令 Cache和数据Cache,则应用源码提供的icache_disable(void)和dcache_disable(void)两个函数禁止这部分代码功能;interrupt.c文件设置系统的各种中断和异常,在Bootloader阶段应禁止中断的产生。

5.4 board/dx2210开发板相关文件

在这个目录中主要包含dx2210.c、config.mk、flash.c、memsetup.S、u-boot.lds几个文件。在 dx2210.c文件中主要工作为初始化开发板,在文件中编写int board_init(void)函数定义各个复用I/O端口的信息、初始化RAM芯片等完成初始化工作。由于在u-boot代码中是用抽象成一种结构体来描述开发板硬件信息以便于移植工作,因此在文件中修改:

gd->bd->bi_arch_number=MACH_TYPE_LPC2210; //开发板架构ID号

gd->bd->bi_boot_params=0x81000100; //传递给ucinux内核的参数

gd->bd->bi_dram[0].start=PHYS_SDRAM_1;

gd->bd->bi_dram[0].size=PHYS_SDRAM_1_SIZE; //RAM内存配置

u-boot.lds是给Linker程序使用的配置文件,主要修改部分:

SECTIONS

{ .=0x80000000; //起始地址为0x80000000

.=ALIGN(4); //4字节对齐

.text :

{ cpu/LPC2210/start.o (.text)

*(.text) //text段的起始是start.S的text段

memsetup.S汇编文件主要是用来初始化RAM,在memsetup.S文件中配置开发板用到的存储器组,然后根据MT45W4MW16芯片手册驱动RAM;Flash芯片的驱动代码在flash.c文件中,由于开发板的Flash芯片SST39VF160与B2开发板芯片相同,直接复制后即可。

6.生成目标文件完成移植工作

移植工作完成后在SHELL环境下依次运行如下命令:make clean; make dx2210_config;make。成功编译后生成4个映像文件分别是:u-boot.hex文件: U-Boot映像原始的INTEL HEX格式文件;u-boot.map文件:U-Booty映像的符号表;u-boot.srec文件:U-Boot映像的S-Record格式文件;System.map文件: U-Boot映像的符号表。使用Flash烧写工具将u-boot.hex文件按照16进制格式下载到Nor Flash中,再将uclinux内核映像文件和根文件系统影响文件init.img烧写到Nor Flash的指定地址后,可以看到如图2所示的存储空间分布:

图2 存储空

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

网站地图

Top