UBOOT移植简介(转)

1.1 U-Boot的介绍

U-Boot是德国DENX小组的开发用于多种嵌入式CPUBootLoader程序, U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持VxWorks, QNX,ARTOS, LynxOS嵌入式操作系统。U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS x86ARMNIOSXScale等诸多常用系列的处理器。U-Boot源代码在sourceforge网站的社区服务器中,它的项目主页是::URL::http://sourceforge.net/projects/u-boot  

U-Boot的最新版本源代码可以在SourceforgeCVS服务器中匿名获得。
 
1.2 U-Boot体系结构

1) 目录树

       u-boot/dtt

u-boot/net

u-boot/rtc

u-boot/disk

u-boot/post

u-boot/board

u-boot/tools

u-boot/drivers

u-boot/lib_arm

u-boot/lib_ppc

u-boot/lib_microblaze

u-boot/lib_generic

u-boot/common

u-boot/lib_i386

u-boot/lib_m68k

u-boot/lib_mips

u-boot/lib_nios

u-boot/examples

u-boot/include

u-boot/lib_nios2

2) 简单讲解各目录

2        board:和一些已有开发板有关的文件每一个开发板都以一个子目录出现在当前目录中如:board/ge9008子目录中存放与我们开发板相关的配置文件.

common:实现U-Boot命令行下支持的命令,每一条命令都对应一个文件。例如bootm命令

2        对应就是cmd_bootm.c

2        cpu:与特定CPU架构相关目录,每一款U-Boot下支持的CPU在该目录下对应一个子目录,比如有子目录cpu/arm720就是我们开发板上使用的CPU架构目录,当然我们也可以自己建立关于arm7tdmi的子目录。

2        disk:对磁盘的支持,这里对于我们可以暂时不用管这个目录。

2        doc:文档目录。U-Boot有非常完善的文档,在移植或使用U-Boot,有必要对其进行解读。

2        driversU-Boot支持的设备驱动程序都放在该目录,比如各种网卡、支持CFIFlash、串口和USB等。

2        fs: 支持的文件系统,U-Boot现在支持cramfsfatfdosjffs2registerfs

2        includeU-Boot使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。该目录下configs目录有与开发板相关的配置头文件,如ge9008.h。该目录下的有与CPU体系结构相关的头文件及各平台的寄存器定义,arm对应的是asm-arm.

2        lib_xxx: 与体系结构相关的库文件。如与ARM相关的库放在lib_arm中。

2        net:与网络协议栈相关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。

2        tools:生成U-Boot的工具,如:mkimage crc等。

1.       PORTING U-BOOT

关于开发环境的建立及U-Boot移植的准备,请见文档《Linux开发环境的建立》,在这里就不再累述,我们重点分析如何U-Boot移植中对相关文件的修改。

2.1 u-boot/Makefile文件的修改

首先有关GE9008的我们暂时定义:

cpu:            arm7tdmi(直接用arm720)

board:  ge9008

修改根目录下的Makefile使之支持相应的硬件平台,基本上所有的configuration都是类似于这样的模式:

_config : unconfig                                                            

@./mkconfig $(@:_config=)                               

对于GE9008,我们可以这样来添加一段代码:

ge9008_config : unconfig                                                             

@./mkconfig $(@:_config=) arm arm720  ge9008                                     

 

2.2支持ARM7TDMI的修改(u-boot/cpu)

u-boot/cpu目录下建立arm7dtmi的目录或者直接用arm720目录都可以。在这里我们直接用已经建立好的arm720目录:

u       config.mk:该文件是本目录Makefile文件所需的编译配置。直接copy即可。

u       Makefile:只需要添加要编译的项,其他都不动。

u       cpu.c:本文件是cpu的初始化代码。和具体硬件平台关系不大,只需要关注的是它和哪个arm核相关,它包括读写control register, reset cpu, I/D cache enable/disable, Setup the stacks for IRQ and FIQ等,具体我们可以见u-bootGE代码。

#include                                                                           

#include                                                                                                         

int cpu_init (void)                                                                                                                  

{                                                                                                                                            

       /*                                                                                                              

        * setup up stacks if necessary                                                                                     

        */                                                                                                                                  

#ifdef CONFIG_USE_IRQ                                                                                                     

       DECLARE_GLOBAL_DATA_PTR;

       IRQ_STACK_START = _armboot_start - CFG_MALLOC_LEN - CFG_GBL_DATA_SIZE - 4;

       FIQ_STACK_START = IRQ_STACK_START - CONFIG_STACKSIZE_IRQ;

#endif

       return 0;

}

int cleanup_before_linux (void)

{

       /*

        * this function is called just before we call linux

        * it prepares the processor for linux

        *

        * we turn off caches etc ...

        */

       disable_interrupts ();

       /* Since the CT has unknown processor we do not support

        * cache operations

        */

       return (0);

}

int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])

{

       extern void reset_cpu (ulong addr);

       disable_interrupts ();

       reset_cpu (0);

       /*NOTREACHED*/

       return (0);

}

/* May not be cached processor on the CT - do nothing */

void icache_enable (void)

{

}

void icache_disable (void)

{

}

/* return "disabled" */

int icache_status (void)

{

       return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值