原创 移植u-boot-2010.06到AT2440

2010-8-13 13:34 2704 2 2 分类: MCU/ 嵌入式

移植u-boot-2010.06到AT2440


编译环境: VMware7.0下Ubuntu9.10


交叉编译器:crosstools-0.43


目标板:CPU:Samsung S3C2440A


                            SDRAM:64M Samsung K4S561632H-UC75


                            Nor Flash:2M AMD AM29LV160DB


                            NAND Flash:64M Samsung K9F1208UOB


                            Ethernet:Davicom DM9000AE


                           


前期准备:


删除arch目录下除arm目录以外的所有目录,arm\cpu目录下除arm920tmulu以外的所有目录,arch\arm\cpu\arm920t目录下除s3c24x0目录以外的所有目录(该目录下的文件不要删),arch\arm\include\asm目录下除arch‐s3c24x0目录以外的所有arch‐xxxx目录(该目录下的文件不要删) 删除board目录下除samsung目录以外的所有目录,board\samsung目录下除smdk2410目录以外的所有目录 删除include\configs目录下除smdk2410.h文件以外的所有头文件。


 


准备移植:


将board\samsung\smdk2410目录复制为at2440目录,进入at2440目录。 修改smdk2410.c为at2440.c 修改Makefile文件中的COBJS改为:COBJS := at2440.o flash.o


建立目标板配置文件:进入include\configs目录下,将smdk2410.h复制为at2440.h。


修改顶层Makefile文件,复制


smdk2410_config   :      unconfig


       @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0



at2440_config :      unconfig


       @$(MKCONFIG) $(@:_config=) arm arm920t at2440 samsung s3c24x0


配置交叉编译器:修改Makefile文件157行增加:


CROSS_COMPILE = arm-softfloat-linux-gnu-


 


编译测试:


进入u-boot-2010.06目录:


make distclean


make at2440_config


make all


如果没有错误,则会生成u‐boot.bin文件。


至此,自己的目标板已经建立,下面要做的是修改一些配置,增加一些驱动。


 


修改时钟:


查看S3C2440 spec,




板卡上的晶振为16.9344MHz,设定MPLL为400MHz,则MDIV为110(0x6e),PDIV为3,SDIV为1。设定UPLL为48MHz,则MDIV为60(0x3c),PDIV为4,SDIV为2。


在at2440.c文件中board_init函数,添加:


#define S3C2440_MPLL_399MHZ      ((0x6e<<12)|(0x03<<4)|(0x01))


#define S3C2440_UPLL_48MHZ         ((60<<12|(4<<4)|(2)))


修改:


       clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);


为:


       clk_power->MPLLCON = S3C2440_MPLL_399MHZ;


 


修改:


       clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);


为:


       clk_power->UPLLCON = S3C2440_UPLL_48MHZ;


 


修改:


       gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;


为:


       gd->bd->bi_arch_number = MACH_TYPE_S3C2440;


 



 


设定FCLK:HCLK:PCLK = 1:4:8,则CLKDIVN为5


修改start.s


       /* FCLK:HCLK:PCLK = 1:2:4 */


       /* default FCLK is 120 MHz ! */


       ldr   r0, =CLKDIVN


       mov r1, #3


       str    r1, [r0]


为:


#if 1


       /* FCLK:HCLK:PCLK = 1:4:8 */


       /* default FCLK is 400 MHz ! */


       ldr   r0, =CLKDIVN


       mov r1, #5


       str    r1, [r0]


#else


       /* FCLK:HCLK:PCLK = 1:2:4 */


       /* default FCLK is 120 MHz ! */


       ldr   r0, =CLKDIVN


       mov r1, #3


       str    r1, [r0]


#endif


 



修改speed.c


 


修改get_PLLCLK函数:


       return (CONFIG_SYS_CLK_FREQ * m) / (p << s);


为:


       return (CONFIG_SYS_CLK_FREQ * m * 2) / (p << s); /*S3C2440*/


 


修改get_HCLK函数:


       return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 2 : get_FCLK();


为:


       return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 4 : get_FCLK();/*S3C2440*/


修改get_PCLK函数:


       return (readl(&clk_power->CLKDIVN) & 1) ? get_HCLK() / 2 : get_HCLK();



       return (readl(&clk_power->CLKDIVN) & 1) ? get_HCLK() / 8 : get_HCLK();/*S3C2440*/


 


修改at2440.h


#define CONFIG_SYS_CLK_FREQ    12000000/* the SMDK2410 has 12MHz input clock */


为:


#define CONFIG_SYS_CLK_FREQ    16934400/* the AT2440 has 16.9344MHz input clock */


 


修改:


#define    CONFIG_SYS_PROMPT            "SMDK2410 # "    /* Monitor Command Prompt       */


为:


#define    CONFIG_SYS_PROMPT            "AT2440 # "   /* Monitor Command Prompt       */


此时,对S3C2440的时钟算配置好了,为了方便调试,可以利用开发板自带的U-BOOT文件烧写到内存中运行,此时还需要修改一些配置:


修改board\samsung\at2440\config.mk:


TEXT_BASE = 0x33F80000


为:


TEXT_BASE = 0x33000000


修改start.s:


#ifndef CONFIG_SKIP_LOWLEVEL_INIT


       bl    cpu_init_crit


#endif


为:


#ifndef CONFIG_SKIP_LOWLEVEL_INIT


/*    bl    cpu_init_crit*/


#endif


编译测试:


进入u-boot-2010.06目录:


Make clean


make


如果没有错误,则会生成u‐boot.bin文件。


 


通过串口及超级终端:


Loadb 30000000


Go 30000000


运行成功,串口出信息:


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /3 下一条