u-boot-2009.08在mini2440上的移植(二)

2014-11-24 08:54:37 · 作者: · 浏览: 12
ue_LED_on")));
void inline __blue_LED_off(void) {}
//void inline blue_LED_off(void)__attribute__((weak, alias("__blue_LED_off")));


[root@localhost u-boot-2009.08]# make clean


[root@localhost u-boot-2009.08]# make


... ...


cpu/arm920t/start.o: In function `start_code':
/root/workspace/u-boot-2009.08/cpu/arm920t/start.S:117: undefined reference to `coloured_LED_init'


/root/workspace/u-boot-2009.08/cpu/arm920t/start.S:118: undefined reference to `red_LED_on'
make: *** [u-boot] 错误 1
出现错误coloured_LED_init'未定义。打开cpu/arm920t/start.S,搜索“coloured_LED_init”定位到117行,找到如下代码:


bl coloured_LED_init
bl red_LED_on


将其注释掉


//这两行是AT91RM9200DK开发板的LED初始化,注释掉


//bl coloured_LED_init
//bl red_LED_on



然后执行清除、编译命令


[root@localhost u-boot-2009.08]# make clean


[root@localhost u-boot-2009.08]# make


... ...


arm-linux-objcopy -O srec u-boot u-boot.srec
arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
[root@localhost u-boot-2009.08]#
编译通过。


【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


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


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


【1】增加对S3C2440一些寄存器的支持,添加中断禁止部分和时钟设置部分


用gedit打开cpu/arm920t/start.S,定位到134行附近,如下代码


#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)
/* turn off the watchdog */


由于2410和2440的寄存器及地址大部分是一致的,所以这里就直接在2410的基础上再加上对2440的支持即可,修改后代码如下:


#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
/* turn off the watchdog */


... ...


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


# if defined(CONFIG_S3C2440)//添加s3c2440的中断禁止部分
ldr r1, =0x7fff //根据2440芯片手册,INTSUBMSK寄存器有15位可用
ldr r0, =INTSUBMSK
str r1, [r0]
# endif


# if defined(CONFIG_S3C2440) //添加s3c2440的时钟部分
#define MPLLCON 0x4C000004 //系统主频配置寄存器基地址
#define UPLLCON 0x4C000008 //USB时钟频率配置寄存器基地址
ldr r0, =CLKDIVN //设置分频系数FCLK:HCLK:PCLK = 1:4:8
mov r1, #5
str r1, [r0]
ldr r0, =MPLLCON //设置系统主频为405MHz
ldr r1, =0x7F021 //这个值参考芯片手册“PLL VALUE SELECTION TABLE”部分
str r1, [r0]
ldr r0, =UPLLCON //设置USB时钟频率为48MHz
ldr r1, =0x38022 //这个值参考芯片手册“PLL VALUE SELECTION TABLE”部分
str r1, [r0]
# else //其他开发板的时钟部分
/* FCLK:HCLK:PCLK = 1:2:4 */
/* default FCLK is 202.8 MHz ! */
ldr r0, =CLKDIVN
mov r1, #3
str r1, [r0]


ldr r0, =MPLLCON //设置系统主频为202.8MHz
ldr r1, =0xa1031 //这个值参考芯片手册“PLL VALUE SELECTION TABLE”部分
str r1, [r0]


#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3C2440 */


【2】S3C2440的时钟部分除了在start.S中添加外,还要分别在board/samsung/mini2440/mini2440.c和cpu/arm920t/s3c24x0/speed.c中修改或添加部分代码。


(1)用gedit打开board/samsung/mini2440/mini2440.c,定位到33行,修改或添加如下内容:


//设置主频和USB时钟频率参数与start.S中的一致


#define FCLK_SPEED 2 //设置默认等于2


#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
#define M_MDIV 0xC3
#define M_PDIV 0x4
#define M_SDIV 0x1
#elif FCLK_SPEED==1 /* Fout = 202.8MHz */
#define M_MDIV 0xA1
#define M_PDIV 0x3
#define M_SDIV 0x1
#elif FCLK_SPEED==2 /* Fout = 405MHz */
#define M_MDIV 0x7F //这三个值根据S3C2440芯片手册“PLL VALUE SELECTION TABLE”部分进行设置
#define M_PDIV 0x2
#define M_SDIV 0x1
#endif



#define USB_CLOCK 2