中山市博爱医院肖笃凯:U-Boot在FS2410上的移植(转载)

来源:百度文库 编辑:中财网 时间:2024/04/28 22:26:31
 2011-04-14 15:37

1.环境:
uboot版本:u-boot-1.1.4
交叉编译器(CROSS-COMPILE)版本:3.3.2
操作系统:
RH9(虚拟机)

开发板:FS2410

 

2.具体步骤:

2.1修改Makefile
[uboot@localhost u-boot-1.1.4]# vim Makefile
#为fs2410建立编译项
fs2410_config : unconfig
@./mkconfig $(@:_config=) arm arm920t fs2410 NULL s3c24x0
各项的意思如下:
arm: CPU的架构(ARCH)
arm920t: CPU的类型(CPU),其对应于cpu/arm920t子目录。
fs2410: 开发板的型号(BOARD),对应于board/fs2410目录。
NULL: 开发者/或经销商(vender)。
s3c24x0: 片上系统(SOC)。

 

2.2 在board子目录中建立fs2410
[uboot@localhost uboot]#cp -rf board/smdk2410/* board/fs2410
[uboot@localhost uboot]#cd board/fs2410
[uboot@localhost fs2410]#mv smdk2410.c crane2410.c

 

2.3 在include/configs/中建立配置头文件
[uboot@localhost uboot]#cp include/configs/smdk2410.h include/configs/fs2410.h

 

2.4 测试编译能否成功
[uboot@localhost uboot]#make distclean   //如果之前有编译失败的话,那么这一步还是很有必要的
[uboot@localhost uboot]#make fs2410_config
[uboot@localhost uboot]#make CROSS_COMPILE=arm-linux-
出现以下错误:
ERROR说: fs2410.a needed by smdk2410.o
是说在/home/felix/embedded/uboot/u-boot-1.1.4/board/fs2410/Makefile里smdk2410.o这个依赖找不到!
首先找到:OBJS    := smdk2410.o flash.o
将:smdk2410.o==>fs2410.o
OK!

再make一次,轻松编译成功!
uboot根目录下生成u-boot.bin文件,将其烧写到2410板卡里应该能够启动。

 

2.5 烧写
    首先我用的FS2410,(在优龙BootLoader下)用DNW从串口下载编译好的uboot.bin(我也是直接用的smdk2410)到Nand flash里,启动是没有任何反映,一点提示都没有

    但是用同样用优龙BootLoader下的功能5下载uboot.bin到Nor flash里输入5和回车后直接就返回了,连烧写失败的提示都没有!
然后在优龙的论坛里搜了一下,突然想起来FS2410使用手册.pdf的第二章有一些用JTAG烧写FLASH的例子,但是它那里运行的是一些批处理文件,烧写的整个过程也没有什么地方让我输入我已经编译生成的u-boot.bin啊?用这个方法烧进去的还是优龙自带的bootloader!
    最后,感谢大侠itnova2006对我的提醒,把.bat下里的引导映像的文件名换成u-boot.bin,并把u-boot.bin拷贝到这个目录中就可以了。
然后利用Jtag烧nor flash,速度很慢。

 

2.6启动
烧完后复位,就出现了以下令人激动的串口终端消息:

SMDK2410 #
       
U-Boot 1.1.4 (Apr 11 2008 - 13:31:13)

U-Boot code: 33F80000 -> 33F9696C  BSS: -> 33F9AC58
RAM Configuration:
Bank #0: 30000000 64 MB
Flash: 512 kB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
SMDK2410 #

注意到以下一行错误提示:
*** Warning - bad CRC, using default environment
在网上乱搜一通,发现有这样一篇文章:
******************************************************************************
解决方法:
通过分析u-boot的启动流程,调试代码,得知问题出在cpu/at91rm9200/start.S中。其中有一段代码:
--------------------
        ldr     r0, =_start
        ldr     r1, =0x0
        mov     r2, #16
copyex:
        subs    r2, r2, #1
        ldr     r3, [r0], #4
        str     r3, [r1], #4
        bne     copyex
--------------------
它的作用是把中断向量表从flash reload到RAM,以提高速度。但是它没有进行remap。故而使得u-boot启动之后无法寻找到环境变量所在的第63扇区。更改如下:
--------------------
if 0       
        ldr     r0, =_start
        ldr     r1, =0x0
        mov     r2, #16
copyex:
        subs    r2, r2, #1
        ldr     r3, [r0], #4
        str     r3, [r1], #4
        bne     copyex
endif
--------------------
即把此段代码注释掉。
【或者是在此段前面加上remap部分,不过如果加上remap,则需要把前面的设置svc部分的代码注释掉,否则在u-boot>reset时会进入异常状态。】
此解决方案对u-boot-1.1.1也有效。
*************************************************************************************