u-boot-2011.03在mini2440/micro2440上的移植 在RAM中运行

发布时间:2024-06-27  

2.1  include/configs/micro2440.h

删除

#define CONFIG_S3C2410 1 /* specifically a SAMSUNG S3C2410 SoC */

#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */

添加
#define CONFIG_S3C2440 1 /* specifically a SAMSUNG S3C2440 SoC */
#define CONFIG_MICRO2440
#define CONFIG_SKIP_LOWLEVEL_INIT

 

【说明】
定义CONFIG_SKIP_LOWLEVEL_INIT是因为我们要在RAM中运行,所以要跳过底层的一些初始化代码

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

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

 

# if defined(CONFIG_S3C2440)
# define LOCKTIME 0x4C000000
# define MPLLCON 0x4C000004
# define UPLLCON 0x4C000008

 

# define CLKDIV_VAL 5
# define M_MDIV 0x7f /* XTal=12.0MHz MPLL=405MHz */
# define M_PDIV 2
# define M_SDIV 1
# define U_MDIV 0x38 /* XTal=12.0MHz UPLL=48MHz */
# define U_PDIV 2
# define U_SDIV 2

 

    ldr r1, =0x7fff
    ldr r0, =INTSUBMSK
    str r1, [r0]

 

    ldr r0,=LOCKTIME /* 设置U_LTIME和M_LTIME */
    ldr r1,=0x0fff0fff
    str r1,[r0]

 

    ldr r0, =CLKDIVN /* Fclk:Hclk:Pclk = 1:4:8 */
    ldr r1, =CLKDIV_VAL
    str r1, [r0]

 

    mrc p15, 0, r0, c1, c0, 0 /* 总线模式设为异步模式 */
    orr r0, r0, #0xc0000000
    mcr p15, 0, r0, c1, c0, 0

 

    ldr r0,=UPLLCON /* 配置UPLL */
    ldr r1,=((U_MDIV<<12) + (U_PDIV<<4) + U_SDIV) 
    str r1,[r0]
    nop /* 为确保硬件完成操作,至少需7个时钟周期 */
    nop
    nop
    nop
    nop
    nop
    nop

    ldr r0,=MPLLCON /* 配置MPLL */
    ldr r1,=((M_MDIV<<12) + (M_PDIV<<4) + M_SDIV)
    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 /* CONFIG_S3C2440 */

 

#endif /* CONFIG_S3C24X0 */

 

2.3 board/samsung/micro2440/micro2440.c

#define FCLK_SPEED 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
#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 /* Fout = 48MHz */
#define U_M_MDIV 0x38
#define U_M_PDIV 0x2
#define U_M_SDIV 0x2

#endif

 

int board_init (void)
{
     ......
     gd->bd->bi_arch_number = MACH_TYPE_MINI2440;

     ......
}

 

int dram_init (void)
{
     ......
     gd->ram_size = PHYS_SDRAM_1_SIZE; 

     return 0;
}

 

【说明】

我在发布资源时用的是MACH_TYPE_MICRO2440,之前的Linux内核中有MICRO2440的机器码,值为2680,但是最近的内核,比如Linux-2.6.39中并没有这个值,虽然我自己是在Micro2440开发板上移植,但机器码还是使用MACH_TYPE_MINI2440,其值为1999。所以下载了资源的网友一定要注意gd->bd->bi_arch_number 的值。

 2.4 测试

[www.linuxidc.com@linuxidc u-boot-2011.06]$ make
编译完成后将u-boot.bin下载到SDRAM的0x33f80000地址处,u-boot已经能在RAM中运行。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>