天嵌TQ2440 ARM开发板Uboot移植

Q2440 ARM开发板Uboot移植

 

移植环境

    机:VMWare--Fedora 10 Kernel:2.6.34 
开发板:TQ2440--256MB Nand
编译器:arm-linux-gcc-4.3.3.tgz 
u-bootu-boot-1.1.6

代码查看工具:Source Insight

移植步骤

本次移植的功能特点包括:

Nand Flash读写
Nor/Nand
自动选择启动
DM9000
网卡支持
Yaffs2
文件系统支持
Uboot
启动菜单

 

1. 清除已编译的文件,配置编译选项

make distclean

修改u-boot/cpu/arm920t/config.mk文件:

PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 /
-msoft-float

注释掉 / -msoft-float这一段,不使用软浮点编译。

PLATFORM_CPPFLAGS += -march=armv4修改成

PLATFORM_CPPFLAGS += -march=armv4t

来避免编译时产生target CPU does not support interworking的错误。

2. 建立自己的开发板项目并测试编译。

 

tar xjfv u-boot-1.1.6.tar.bz2 –C /opt/bootloader

cd /opt/bootloader/u-boot-1.1.6/board

cp –fr smdk2410/ tender/

cd tender

mv smdk2410.c tender.c

cd /opt/bootloader/u-boot-1.1.6/include/configs

cp –f smdk2410.h tender.h

U-boot对我们使用的TQ2440开发板和S3C2440芯片并不支持,但是我们可以以具有相似性的SMDK2410为参考,通过以上几个步骤,建立自己开发板的项目。取名为tender 。现在继续。

vim /opt/bootloader/u-boot-1.1.6/Makefile

对自己的开发板进行配置

smdk2410_config   :      unconfig

       @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

 

tender_config         :      unconfig

       @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

 

SX1_config :         unconfig

       @$(MKCONFIG) $(@:_config=) arm arm925t sx1

保存退出。

vim /opt/bootloader/u-boot-1.1.6/board/tender/Makefile

将我们的开发板的编译项进行修改。

LIB  = $(obj)lib$(BOARD).a

COBJS    := tender.o flash.o

SOBJS    := lowlevel_init.o

接着:

vim /opt/bootloader/u-boot-1.1.6/include/configs/tender.h

进入配置头文件,添加与我们使用的开发板相关的宏定义。

#define    CONFIG_TENDER              1

#define CONFIG_ARM920T        1     /* This is an ARM920T Core */

#define    CONFIG_S3C2440              1     /* in a SAMSUNG S3C2440 SoC     */

/* #define CONFIG_SMDK2410         1     on a SAMSUNG SMDK2410 Board  */

查看board目录下的u-boot.lds文件可以知道,我们整个工程的入口位于cpu/arm920t/start.c。接下去所有跳转指令都是位于u-boot的根目录下进行的操作。

cd cpu/arm920t/start.c

#elif defined(CONFIG_S3C2410)

# define pWTCON        0x53000000

# define INTMSK         0x4A000008   /* Interupt-Controller base addresses */

# define INTSUBMSK   0x4A00001C

# define CLKDIVN       0x4C000014   /* clock divisor register */

#elif defined(CONFIG_TENDER)

# define pWTCON        0x53000000

# define INTMSK         0x4A000008   /* Interupt-Controller base addresses */

# define INTSUBMSK   0x4A00001C

# define CLKDIVN      0x4C000014   /* clock divisor register */

S3C2440用户手册中的中断和看门狗寄存器与S3C2410地址相似。进行以上的修改。紧接着进行reset设置,包括关闭看门狗、禁止中断、禁止子中断、配置时钟分频比,同时将总线模式修改为异步模式,原因在于我们使用的分频比为1:4:8,根据用户手册说明,HDIV=1的时候,总线工作模式应该为异步。在相应的位置加入如下代码。

#if defined(CONFIG_TENDER)

       ldr     r0, =pWTCON

       mov     r1, #0x0

       str     r1, [r0]

 

       /*

        * mask all IRQs by setting all bits in the INTMR - default

        */

       mov r1, #0xffffffff

       ldr   r0, =INTMSK

       str    r1, [r0]

      

       ldr   r1, =0x7ff

       ldr   r0, =INTSUBMSK

       str    r1, [r0]

# endif

 

       /* FCLK:HCLK:PCLK = 1:4:8 */

       /* default FCLK is 400 MHz ! */

       ldr   r0, =CLKDIVN

       mov r1, #5

       str    r1, [r0]

#endif     /* CONFIG_TENDER */

  mrc p15,0,r0,c1,c0,0    //根据2440Datasheet,设置异步总线模式
  orr r0,r0,#0xc0000000  /*R1_nF:OR:R1_iA*/
  mcr p15,0,r0,c1,c0,0

完成上述任务之后,将会跳到cpu_init_crit函数,

 #ifndef CONFIG_SKIP_LOWLEVEL_INIT

       bl    cpu_init_crit

#endif

在这个函数里面,在完成mmu的关闭的同时,还完成了13个寄存器的初始化,这些寄存器的任务是进行内存管理。

       bl    lowlevel_init

它位于board/tender/lowlevel_init.S文件中,我们的SDRAM是挂载在Bank6上的,修改同文件下的SDRAM配置,使之和开发板的硬件配置一致。检查在board/smdk2440/lowlevel_init.S

一并将之后需要涉及的Nor Flash、网卡和串口进入位宽修改。
#define B1_BWSCON     (DW16)
#define B4_BWSCON     (DW16) //接网卡,位宽为16
#define B5_BWSCON     (DW8)
#define B6_BWSCON     (DW32) //接内存,位宽为32
根据HCLK设置SDRAM 的刷新参数,主要是REFCNT寄存器,开发板HCLK100M,查看SDRAMdatasheet进行计算,
  #define REFCNT   0x1113  改为  #define REFCNT  0x4f4

 

#if 0

         i = 0;

         while (!(phy_read(1) & 0x20)) {        /* autonegation complete bit */

                   udelay(1000);

                   i++;

                   if (i == 10000) {

                            printf("could not establish link/n");

                            return 0;

                   }

         }

#endif

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值