好文档 - 专业文书写作范文服务资料分享网站

嵌入式Linux之我行 史上最牛最详细的uboot移植,不看别后悔

天下 分享 时间: 加入收藏 我要投稿 点赞

#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3C2440 */ S3C2440的时钟部分除了在start.S中添加外,还要分别在board/samsung/my2440/my2440.c和cpu/arm920t/s3c24x0/speed.c中修改或添加部分代码,如下:

#gedit board/samsung/my2440/my2440.c //设置主频和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 //设置默认等于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 /* Fout = 48MHz */ #define U_M_MDIV 0x38 //这三个值根据S3C2440芯片手册“PLL VALUE SELECTION TABLE”部分进行设置 #define U_M_PDIV 0x2 #define U_M_SDIV 0x2 #endif #gedit cpu/arm920t/s3c24x0/speed.c //根据设置的分频系数FCLK:HCLK:PCLK = 1:4:8修改获取时钟频率的函数 static ulong get_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; #if defined(CONFIG_S3C2440) if(pllreg == MPLL)

{ //参考S3C2440芯片手册上的公式:PLL=(2 * m * Fin)/(p * 2s) return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s)); } #endif

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

/* return HCLK frequency */ ulong get_HCLK(void) {

S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

#if defined(CONFIG_S3C2440) return(get_FCLK()/4); #endif

return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK()); }

好了!修改完毕后我们再重新编译u-boot,然后再下载到RAM中运行测试。结果终端有输出信息并且出现类似Shell的命令行,这说明这一部分移植完成。示意图如下:

4)准备进入u-boot的第二阶段(在u-boot中添加对我们开发板上Nor Flash的支持)。

通常,在嵌入式bootloader中,有两种方式来引导启动内核:从Nor Flash启动和从Nand Flash启动。u-boot中默认是从Nor Flash启动,再从上一节这个运行结果图中看,还发现几个问题:第一,我开发板的Nor Flash是2M的,而这里显示的是512kB;第二,出现Warning - bad CRC, using default environment的警告信息。不是u-boot默认是从Nor Flash启动的吗?为什么会有这些错误信息呢?这是因为我们还没有添加对我们自己的Nor Flash的支持,u-boot默认的是其他型号的Nor Flash,而我们的Nor Flash的型号是SST39VF1601。另外怎样将命令行提示符前面的SMDK2410变成我自己定义的呢?

下面我们一一来解决这些问题,让u-boot完全对我们Nor Flash的支持。首先我们修改头文件代码如下:

#gedit include/configs/my2440.h //修改命令行前的名字和Nor Flash参数部分的定义 #define CONFIG_SYS_PROMPT \ //将命令行前的名字改成[MY2440] /*----------------------------------------------------------------------- * FLASH and environment organization */

#if 0 //注释掉下面两个类型的Nor Flash设置,因为不是我们所使用的型号

#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */

#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */ #endif

#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks */

#ifdef CONFIG_AMD_LV800

#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */

#define CONFIG_SYS_MAX_FLASH_SECT (19) /* max number of sectors on one chip */

#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x0F0000) /* addr of environment */ #endif

#ifdef CONFIG_AMD_LV400

#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */

#define CONFIG_SYS_MAX_FLASH_SECT (11) /* max number of sectors on one chip */

#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000) /* addr of environment */ #endif

#define CONFIG_SST_39VF1601 1 //添加mini2440开发板Nor Flash设置

#define PHYS_FLASH_SIZE 0x200000 //我们开发板的Nor Flash是

嵌入式Linux之我行 史上最牛最详细的uboot移植,不看别后悔

#endif/*CONFIG_S3C2400||CONFIG_S3C2410||CONFIG_S3C2440*/S3C2440的时钟部分除了在start.S中添加外,还要分别在board/samsung/my2440/my2440.c和cpu/arm920t/s3c24x0/speed.c中修改或添加部分代码,如下:#geditboard/samsu
推荐度:
点击下载文档文档为doc格式
1llk84bive8wrp7237rx
领取福利

微信扫码领取福利

微信扫码分享