uboot移植步骤介绍

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

uboot移植过程

1.修改Makefile

首先给要建立的S3C2410开发板取名为TE2410, 移植uboot时以smdk2410为模板,

修改Makefile

#tar xvjf u-boot-1.1.3.tar.bz2

#cd u-boot-1.1.3

#vi Makefile

scb9328_config : unconfig

@./mkconfig $(@:_config=) arm arm920t scb9328 NULL imx

smdk2400_config : unconfig

@./mkconfig $(@:_config=) arm arm920t smdk2400 NULL s3c24x0

smdk2410_config : unconfig

@./mkconfig $(@:_config=) arm arm920t smdk2410 NULL s3c24x0

SX1_config : unconfig

@./mkconfig $(@:_config=) arm arm925t sx1

te2410_config : unconfig

@./mkconfig $(@:_config=) arm arm920t te2410 NULL s3c24x0

蓝色字体是添加的内容。其中,te2410_config : unconfig意思是为TE2410建立一个编译项,@./mkconfig $(@:_config=) arm arm920t te2410 NULL s3c24x0中的arm表示CPU的架构是基于ARM体系结构的;arm920t表示CPU类型是arm920t;te2410是开发板的型号;NULL表示开发商或经销商的名称为空;s3c24x0表示是基于s3c24x0的片上系统。

2.在uboot的board目录下建立te2410开发板子目录

#cp –fr board/smdk2410 /board/te2410

#cd board/te2410

#mv smdk2410.c te2410.c

还要修改board/te2410/Makefile文件,

OBJS := smdk2410.o flash.o -------- OBJS := te2410.o flash.o

3.在include/configs目录下建立te2410.h头文件

#cd include/configs

#cp –fr smdk2410.h te2410.h

4.指定交叉编译器的路径

选择支持softfloatpoint的交叉编译器,在etc/bashrc文件中添加一行

export

PATH=/home/newdisk/toolchain/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linu x-gnu/bin:$PATH

其中,

/home/newdisk/toolchain/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu /bin是交叉编译器路径

修改Makefile中的交叉编译器

ifeq ($(ARCH),arm)

CROSS_COMPILE = arm-softfloat-linux-gnu-

Endif

5.测试编译

#cd u-boot-1.1.3

#make te2410_config

#make

如果编译正确,将会在u-boot-1.1.3目录下生成u-boot、u-boot.bin、u-boot.srec 三个文件,其中u-boot是ELF格式二进制的image文件,u-boot.bin是原始的二进制image文件,u-boot.srec是Motorola S-Record格式的image文件。接下来的工作就是根据开发板的硬件配置来修改。

6.修改start.S文件

首先在ldr pc, _start_armboot一行之前添加如下代码,将程序从Flash复制到DRAM中运行

#ifdef CONFIG_S3C2410_NAND_BOOT

bl copy_myself

@jump to ram

ldr r1, =on_the_ram

add pc, r1, #0

nop

nop

1:b 1b @infinite loop

on_the_ram:

#endif

然后在_start_armboot: .word start_armboot一行之后添加下面内容

#ifdef CONFIG_S3C2410_NAND_BOOT

copy_myself:

mov r10, lr

@reset NAND

mov r1, #NAND_CTL_BASE

ldr r2, =0xF830 @initial value

str r2, [r1, #oNFCONF]

ldr r2, [r1, #oNFCONF]

bic r2, r2, #0x800 @enable chip

str r2, [r1, #oNFCONF]

mov r2, #0xFF @reset command

strb r2, [r1, #oNFCMD]

mov r3, #0 @wait

1:add r3, r3, #0x1

cmp r3, #0xa

blt 1b

2:ldr r2, [r1,#oNFSTAT] @wait ready

tst r2, #0x01

beq 2b

ldr r2, [r1, #oNFCONF]

orr r2, r2, #0x800 @disable chip

str r2, [r1, #oNFCONF]

@get ready to call C functions(for nand_read())

ldr sp, DW_STACK_START @setup stack pointer

mov fp, #0 @no previous frame,so fp=0

@copy uboot to ram

ldr r0, =UBOOT_RAM_BASE

mov r1, #0

mov r2, #0x30000

bl nand_read_ll

tst r0, #0x0

beq ok_nand_read

#ifdef CONFIG_DEBUG_LL

bad_nand_read:

ldr r0, STR_FAIL

ldr r1, SerBase

bl PrintWord

1:b 1b @infinite loop

#endif

ok_nand_read:

#ifdef CONFIG_DEBUG_LL

ldr r0, STR_OK

ldr r1, SerBase

bl PrintWord

#endif

@verify

m ov r0, #0

l dr r1, =UBOOT_RAM_BASE

m ov r2, #0x400

go_next:

相关文档
最新文档