uboot移植步骤介绍
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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: