首页 > 代码库 > uboot-2012.07移植到fl2440开发板(一)

uboot-2012.07移植到fl2440开发板(一)

原文

以前移植uboot总是用相同的版本按照网上的步骤进行移植,现在我想尝试一下移植最新版本的uboot,可能会遇到很多困难,但我会一步一步来,顺便记录下下移植过程,便于以后的回顾。

移植环境

1,主机环境:VMare下fedora9 ,1G内存。

3,编译编译环境:arm-linux-gcc 4.3.2

4,开发板:fl2440,256M nand flash。

5,u-boot版本:u-boot-2012.07

6,参考文章:

http://blogold.chinaunix.net/u3/101649/showart.php?id=2105215

http://blog.chinaunix.net/space.php?uid=23787856&do=blog&id=115382

http://blogimg.chinaunix.net/blog/upfile2/100811115954.pdf

下载并解压源文件

1,下载u-boot-2012.07,可以从官方网站下载u-boot-2012.07 下载地址:http://ftp.denx.de/pub/u-boot/

2,#tar -jxvf u-boot-2010.07.tar.bz2    //解压源码

移植步骤

1.1,了解u-boot启动流程,请参考U-Boot启动过程分析

 

启动流程

 

1.2,建立fl2440开发板文件并编译测试

在项目根目录u-boot-2009.08上单击右键->浏览文件夹

【1】定位到board/samsung,将目录smdk2410复制并粘贴到当前目录下,将其重命名为fl2440。

 # cp board/samsung/smdk2410 board/samsung/fl2440 -r

【2】打开fl2440目录,将smdk2410.c重命名为fl2440.c,

【3】用vim打开当前目录下的Makefile

include $(TOPDIR)/config.mk

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

COBJS   := fl2440.o

SOBJS   := lowlevel_init.o
然后保存。

【4】在根目录下定位到include/configs,将smdk2410.h复制并粘贴到当前目录下,将其重命名成fl2440.h。

【5】用vim打开根目录下的boards.cfg文件,然后搜索smdk2410,找到下列语句

在smdk2410下面添加fl2440  arm arm920t  -  samsung s3c24x0

注:Uboot 2012的板配置文件是在boards.cfg中配置的,不用修改根目录的Makefile

然后保存。
*说明:

 

mini2440 :对应在board目录下建立新的开发板项目的目录

arm      :CPU的架构(ARCH)
arm920t  :CPU的类型

-                             :表示在samsung目录下      

Samsung :新开发板项目目录的上级目录,如直接在board下建立新的开发板项目的目录,则这里就为NULL

s3c24x0:CPU型号

【6】编译测试

打开终端,进入到u-boot-2012.07根目录下执行

[root@localhost u-boot-2012.07]# make distclean
[root@localhost u-boot-2012.07]# make fl2440_config
Configuring for fl2440 board...
[root@localhost u-boot-2012.07]# make

【7】加入调试选项,启用DEBUG宏,有两种办法办法

<1>参考文章Makefile,如何传递宏定义DEBUG和Debug版和Release版的程序

在编译时,直接在make 后面传入参数 -d ,表示Debug模式,输出有关文件和检测时间的详细信息,如

make -d

可以输出源程序中定义的DEBUG宏定义的调试信息

<2>用gedit打开根目录下的config.mk文件,然后搜索“DDEBUG”,找到如下语句

DBGFLAGS= -g # -DDEBUG

将注释掉的DDEBUG选项打开,修改后下面语句

DBGFLAGS= -g  -DDEBUG

但是此种办法需要在调试完成时需要在将其注释掉。

【8】根据启动流程修改或添加基本的u-boot源码,使其能够在内存中启动

vi include /cnfigs/fl2440.h  把

#define CONFIG_S3C2410 改为 #define CONFIG_S3C2440

并且把做出如下改正:

#define CONFIG_SYS_TEXT_BASE 0x32000000

将NAND和YAFFS2配置先注释起来,不然会有很多错误:


更改内存范围,将:

#defineCONFIG_SYS_MEMTEST_END 0x33F00000

修改为:

#defineCONFIG_SYS_MEMTEST_END 0x34000000 fl2440sdram64M

#defined config_lowlevel_init 1 ;内存中测试不需要初始化sdram

【9】修改时钟

vi arch/arm/cpu/arm920t/start.S

找到如下

# if defined(CONFIG_S3C2410)
ldr r1,=0x3ff
ldr r0,=INTSUBMSK
str r1, [r0]
# endif

在后面加上

# if defined(CONFIG_S3C2440)
ldr r1,=0x7fff
ldr r0,=INTSUBMSK
str r1, [r0]
# endif

 

这里是屏蔽中断,S3C440用到了15位,所以把值设置成0x7fff

将下面这段去掉:

ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]

改为:
ldr r0,=CLKDIVN
mov r1, #5
str r1, [r0]


vi board/samsung/fl2440/fl2440.c

将这段改为:

#define FCLK_SPEED 1

#ifFCLK_SPEED==0
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elifFCLK_SPEED==1
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#endif
#define USB_CLOCK 1

#if USB_CLOCK==0
#define U_M_MDIV 0xA1
#define U_M_PDIV 0x3
#define U_M_SDIV 0x1
#elif USB_CLOCK==1
#define U_M_MDIV 0x48
#define U_M_PDIV 0x3
#define U_M_SDIV 0x2
#endif

增加这段:

#define FCLK_SPEED 2

#ifFCLK_SPEED==0
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elifFCLK_SPEED==1
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1

#elifFCLK_SPEED==2 

#define M_MDIV 0x7f
#define M_PDIV 0x2
#define M_SDIV 0x1
#endif
#define USB_CLOCK 2

#if USB_CLOCK==0
#define U_M_MDIV 0xA1
#define U_M_PDIV 0x3
#define U_M_SDIV 0x1
#elif USB_CLOCK==1
#define U_M_MDIV 0x48
#define U_M_PDIV 0x3
#define U_M_SDIV 0x2

#elif USB_CLOCK==2
#define U_M_MDIV 0x38
#define U_M_PDIV 0x2
#define U_M_SDIV 0x2
#endif


因为FL2440的晶振为12M,在芯片手册可以查到这些值,使得CPU频率为405M,USB时钟频率为48M

在board_init函数中,修改:
gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;
为:
gd->bd->bi_arch_number = MACH_TYPE_S3C2440;

编译之后下载到开发板上运行如下:

 

U-Boot 2012.07 (Oct 07 2012 - 14:52:20)

 

 

CPUID: 32440001

 

FCLK:      405 MHz

 

HCLK:  101.250 MHz

 

PCLK:   50.625 MHz

 

DRAM:  64 MiB

 

WARNING: Caches not enabled

 

Flash: *** failed ***

 

### ERROR ### Please RESET the board ###

 

接下来将进入u-boot的第二阶段,为u-boot-2012.07增加nandflash支持。