首页 / 操作系统 / Linux / 移植U-Boot-2009.08到mini2440(二)板级设置
一、环境目标板:mini2440u-boot版本:u-boot-2009.08交叉编译器:arm-linux-gcc-4.3.2操作系统:Linux(Ubuntu-11.10)相关阅读: 植U-Boot-2009.08到mini2440 基础配置篇 http://www.linuxidc.com/Linux/2011-12/50388.htm二、目的修改cpu/arm920t/start.s包括时钟部分、中断部分、看门狗修改cpu/arm920t/增加mini2440的板子定义三、步骤1、 注释LED跳转cpu/arm920t/start.s第117行,这部分的LED初始化代码是为AT91RM9200DK开发板写的。这里我们注释掉跳转语句 blcoloured_LED_init blred_LED_on @bl coloured_LED_init @bl red_LED_on2、 添加板子宏定义在include/configs/mini2440.h 文件中去掉s3c2410的宏定义,修改为:#define CONFIG_S3C2440 1 /*in a SAMSUNG S3C2440 SoC */3、 CPU频率定义S3c2440比s3c2410的频率要高,为405MHZ。所以我们必须要修改CPU频率设置的代码。#if defined(CONFIG_S3C2400)|| defined(CONFIG_S3C2410) /* turn off the watchdog */ # ifdefined(CONFIG_S3C2400)# define pWTCON 0x15300000# define INTMSK 0x14400008 /* Interupt-Controller base addresses */# define CLKDIVN 0x14800014 /* clockdivisor register */#else# define pWTCON 0x53000000# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */# define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4C000014 /* clockdivisor register */# endif修改为#ifdefined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) /* turn off the watchdog */ # ifdefined(CONFIG_S3C2400)# define pWTCON 0x15300000# define INTMSK 0x14400008 /* Interupt-Controller base addresses */# define CLKDIVN 0x14800014 /* clockdivisor register */#else# define pWTCON 0x53000000# define INTMSK 0x4A000008 /* Interupt-Controller base addresses */# define INTSUBMSK 0x4A00001C# define CLKDIVN 0x4C000014 /*clock divisor register */# endif#define CLK_CTL_BASE 0x4c000000#define MDIV_405 0x7f << 12#define PSDIV_405 0x21#define MDIV_200 0xa1 << 12#define PSDIV_200 0x31由于S3C2410和S3C2440的MPLL、UPLL计算公式不一样,所以get_PLLCLK函数也需要修改get_PLLCLK函数在cpuarm920ts3c24x0speed.cstatic ulongget_PLLCLK(int pllreg){ S3C24X0_CLOCK_POWER * const clk_power =S3C24X0_GetBase_CLOCK_POWER(); ulong r, m, p, s; if (pllreg == MPLL) r = clk_power->MPLLCON; else if (pllreg == UPLL) r = clk_power->UPLLCON; else hang(); m = ((r & 0xFF000) >> 12) + 8; p = ((r & 0x003F0) >> 4) + 2; s = r & 0x3;#ifdefined(CONFIG_S3C2440) if(pllreg == MPLL) { return((CONFIG_SYS_CLK_FREQ * m * 2) /(p << s)); }#endif return((CONFIG_SYS_CLK_FREQ * m) / (p<< s));}由于S3C2410和S3C2440的设置方法也不一样,所以get_HCLK函数也需要修改get_HCLK函数在cpuarm920ts3c24x0speed.culong get_HCLK(void){ S3C24X0_CLOCK_POWER * const clk_power =S3C24X0_GetBase_CLOCK_POWER(); #ifdefined(CONFIG_S3C2440) return(get_FCLK()/4);#endif return((clk_power->CLKDIVN & 0x2) ?get_FCLK()/2 : get_FCLK());}