U-boot1.1.6移植到TQ2440开发板(上)
- board 目标板相关文件,主要包含SDRAM、FLASH驱动;
- common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;
- cpu 与处理器相关的文件。如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;
- driver 通用设备驱动,如CFI FLASH驱动(目前对INTEL FLASH支持较好)
- doc U-Boot的说明文档;
- examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c;
- include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;
- lib_xxx 处理器体系相关的文件,如lib_ppc, lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;
- net 与网络功能相关的文件目录,如bootp,nfs,tftp;
- post 上电自检文件目录。尚有待于进一步完善;
- rtc RTC驱动程序;
- tools 用于创建U-Boot S-RECORD和BIN镜像文件的工具;
一、建立自己的开发板文件
1.在borad文件夹中新建自己的板子目录,复制sbc2410x中的文件到此目录,作为蓝本,加快移植进度,修改板子目录下的makefile文件COBJS := tq2440.o flash.o(其中tq2440.o文件的生成必须要修改此目录下的sbc2410x.c文件)
2.在include/configs文件夹下以sbc2410x.h为蓝本,创建tq2440.h文件
3.修改uboot根目录下的makefile文件,确定CROSS_COMPLE即编译器选项,加入make选项:
tq2440_config:unconfig
(TAB)@./mkconfig $(@:_config=) arm arm920t tq2440 NULL s3c24x0
其中:
arm: CPU的架构(ARCH)
arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。
tq2440: 开发板的型号(BOARD),对应于board/tq2440目录。
NULL: 开发者/或经销商(vender)。
s3c24x0: 片上系统(SOC)。
4.接下来测试是否能编译通过,执行:make disclean--删除原来的编译结果
make tqconfig
成功后出现Configuring for xxx board.....
make –可以生成uboot.bin文件
二、修改源码
1、修改start.S
修改如下代码:
#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
mov r1, #0xffffffff
ldr r0, =INTMSK
str r1, [r0]
# if defined(CONFIG_S3C2410)
ldr r1, =0x3ff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
#ifdefined(CONFIG_S3C2440)
ldr r1, =0x7fff
ldr r0, =INTSUBMSK
str r1, [r0]
# endif
#if0
ldr r0, =CLKdivN
mov r1, #3
str r1, [r0]
#endif
#endif
#ifndefCONFIG_SKIP_LOWLEVEL_INIT
bl cpu_init_crit
#endif
//把堆栈初始化拿到前面来,应为后面要写的时钟初始化函数会用到堆栈
stack_setup:
ldr r0, _TEXT_BASE
sub r0, r0, #CFG_MALLOC_LEN
sub r0, r0, #CFG_GBL_DATA_SIZE
#ifdefCONFIG_USE_IRQ
sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
sub sp, r0, #12
//跳转到时钟初始话函数
bl clock_init
#ifndefCONFIG_SKIP_RELOCATE_UBOOT
relocate:
adr r0, _start
ldr r1, _TEXT_BASE
cmp r0, r1
beq stack_setup
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2
//屏蔽原先代码,重写代码搬运函数
#if1
bl CopyCode2Ram
#else
add r2, r0, r2
copy_loop:
ldmia r0!, {r3-r10}
stmia r1!, {r3-r10}
cmp r0, r2
ble copy_loop
#endif
#endif
接着在include/configs/tq2440.h添加
#define CONFIG_S3C2440 1
#define CONFIG_TQ2440 1
并屏蔽原先的芯片和开发板定义,与此同时s3c24x0.h中的S3C24X0_GPIO结构体也要改写,使其支持2440,而且要添加
S3C24X0_REG32 res9[4];
S3C24X0_REG32 GPJCON;
S3C24X0_REG32 GPJDAT;
S3C24X0_REG32 GPJUP;
此为GPIO_J口的定义
添加typedefstruct{
S3C24X0_REG32 NFCONF;
S3C24X0_REG32 NFCONT;
S3C24X0_REG32 NFCMD;
S3C24X0_REG32 NFADDR;
S3C24X0_REG32 NFDATA;
S3C24X0_REG32 NFMECCD0;
S3C24X0_REG32 NFMECCD1;
S3C24X0_REG32 NFSECCD;
S3C24X0_REG32 NFSTAT;
S3C24X0_REG32 NFESTAT0;
S3C24X0_REG32 NFESTAT1;
S3C24X0_REG32 NFMECC0;
S3C24X0_REG32 NFMECC1;
S3C24X0_REG32 NFSECC;
S3C24X0_REG32 NFSBLK;
S3C24X0_REG32 NFEBLK;
} S3C2440_NAND;
其他结构体也要修改
修改lowlevel_init.S,修改54,58,126行即可,即外部存储器控制器。
54 #defineB1_BWSCON (DW16)
58 #defineB5_BWSCON (DW8)
126 #defineREFCNT 0x4f4
lowlevel_init.S 主要设置SDRAM配置
ARM的存储器控制器
位宽和等待控制寄存器BWSCON中每4位控制一个BANK,最高4位对应BANK7、接下来4位对应BANK6,依此类推
8 个存储器 banks
6 个是 ROM,SRAM 等类型存储器
U-boot116TQ2440开发 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)