新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 在基于ADSP BF533的嵌入式Linux系统上的移植

在基于ADSP BF533的嵌入式Linux系统上的移植

作者:时间:2012-04-26来源:网络收藏

2.3.2安装交叉编译器

交叉编译是在一个架构下编译另外一个架构的目标文件。要从http://blackfin.uclinux.org网站上下载Blackfin ToolChain,然后安装并修改环境变量PATH,使其包含ToolChain的安装目录。

3 启动两阶段

代码一般分为stage1和stage2两大部分。stage1依赖于cpu体系结构如设备初始化代码,常用汇编语言编写以达到短小精悍,提高系统运行效率的目的。它主要包括cpu/bf533目录下的start.s。stage2一般采用C语言编写实现复杂功能,这样代码则具有更好的可读性和可移植性,主要包括lib blackfin/board.c文件和common/main.c文件中main_loop函数。

stagel从cpu入口函数cpu/bf533/start.s开始,通常包含以下步骤:

(1)基本硬件的初始化,为随后执行kernel准备好基本的硬件环境。包括:屏蔽所有中断,引导装载程序的执行过程中不必执行任何中断,中断屏蔽可通过写cpu的中断屏蔽寄存器或状态寄存器实现;设置cpu的速度和时钟频率,初始化pll;RAM初始化,初始化内存控制器的各个寄存器;初始化 UART,向串口打印的字符信息;关闭cpu内部指令,数据cache。

(2) 为加载U-Boot的stage2准备RAM空间,通常将stage2置于整个RAM空间的最顶层1 MB空间。

(3)拷贝U-Boot的stage2到RAM。判断是否是Flash运行,如果是就将stage2的代码拷贝到TEXT BASE处。将stage2安排到RAM空间的最顶层1 MB是较推荐的方法。

(4)设置堆栈指针sp为C语言代码执行做好准备。

(5)跳转到stage2的C语言代码入口点。

stage2主要包括lib-blackfin/board.c中board_init_f、board_init_r函数以及common/main.C中main_loop函数。通常包含以下步骤:

(1)初始化此阶段需用的硬件设备,由board_init_f和board_init_r函数实现。

(2)内存映射检测。

(3)加载内核并为内核设置启动参数。

(4)调用内核。

4 U-BOOt的移植

4.1 U-Boot方法与要点

移植U-Boot简便的方法是从U-Boot支持的开发板中选择一个与其目标板接近的开发板进行修改。需修改的是与硬件相关的部分,涉及到两个层面:针对CPU的移植,由于U-Boot_1.1.3支持,故只需做第二层面的移植:针对目标板硬件的移植。在移植前,需仔细阅读U- Boot/readme文件,该文件对目录结构和如何移植作了简要介绍。从移植U-Boot的最小要求、U-Boot能够正常启动的角度出发,选择 的STAMP板为模板,相关源代码在/board/stamp目录下,结合U-Boot的启动流程,主要修改文件如下:

(1)与目标板相关的代码部分:在board下创建mybf533目录,无需从头开始,参考与目标板相似的STAMP板在mybf533目录下创建 mybf533.c、mybf533.h、flash.c、config.mk、Makefie等文件。需要修改/board/mybf533 /config.mk:

TFEXT_BASE用于设置程序编译链接的起始地址即将U-Boot的stage2拷贝到SDRAM的TEXT_BASE处,即SDRAM最顶层一段存储区。修改board/mybf533/Makefile:



(2)与CPU相关的代码部分:U-Boot_1.1.3/epu文件中含有的目录,其中包含start.s、cpu.c、cpu.h、interrupt.c、init_sdram.s等。故不需要建立与cpu相关的文件目录。



关键词: U-Boot BF533 Linux系统

评论


相关推荐

技术专区

关闭