FL2440的u-boot-2010.09移植(二)

最后更新于:2022-04-01 09:44:37

让串口能正常输出打印信息,添加jz2440中S3C2440片上系统的支持。 ## 一、汇编文件修改,这部分主要集中修改修改cpu/arm920t/start.S文件。 1、打开/cpu/arm920t/start.S,删除AT91RM9200使用的LED代码,117、118行,关闭LED代码。 ~~~ - start_code: /* * set the cpu to SVC32 mode */ mrsr0,cpsr bicr0,r0,#0x1f orrr0,r0,#0xd3 msrcpsr,r0  /*bl coloured_LED_init bl red_LED_on*/     //这是LED灯初始化将其屏蔽掉,因为我们jz2440上的LED资源与SMDK2410开发板的不一致 ~~~ 2.找到下面的语句,定位到该位置,修改相应部位,即增加红色部分 ~~~ #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)   mov  r1, #0xffffffff ldr    r0, =INTMSK strr1, [r0] # if defined(CONFIG_S3C2440) ldrr1, =0x7fff   //这里是屏蔽中断,S3C440用到了15位,所以把值设置成0x7fff ldrr0, =INTSUBMSK strr1, [r0] # endif     # if defined(CONFIG_S3C2440) #  define MPLLCON        0x4C000004  #  define UPLLCON        0x4C000008  ldrr0, =CLKDIVN movr1, #5                // FCLK:HCLK:PCLK = 1:4:8  strr1, [r0]        ldr   r0, =MPLLCON     //写MPLL使pll生效,405MHz,(127<<12)+(2<<4)+(1)        ldr   r1, =0x7F021        str    r1, [r0]                                     ldr   r0, =UPLLCON    //USB时钟48MHz       (56<<12)+(2<<4)+(2)        ldr   r1, =0x038022        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 #endif /* CONFIG_S3C2400 || CONFIG_S3C2410 */ /* * we do sys-critical inits only at reboot, * not when booting from ram! */ #ifndef CONFIG_SKIP_LOWLEVEL_INIT blcpu_init_crit #endif ~~~ 3 打开 board/samsung/ok2440v3/ok2440v3.c  将下面一段去掉: ~~~  #define FCLK_SPEED 1  #ifFCLK_SPEED==0              /* Fout = 203MHz, Fin = 12MHz for Audio */  #define M_MDIV  0xC3  #define M_PDIV  0x4  #define M_SDIV  0x1  #elifFCLK_SPEED==1            /* Fout = 202.8MHz */  #define M_MDIV  0xA1  #define M_PDIV  0x3  #define M_SDIV  0x1  #endif  #define USB_CLOCK 1  #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  #endif ~~~ 用下面一段替换: ~~~ #define M_MDIV 0x7f #define M_PDIV 0x2 #define M_SDIV 0x1 #define U_M_MDIV 0x38 #define U_M_PDIV 0x2   //因为FL2440的晶振为12M,在芯片手册可以查到这些值,使得CPU频率为405M,USB时钟频率为48M. #define U_M_SDIV 0x2 ~~~ 4 打开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) { 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.bin,下载到开发板运行,就可以看到串口打印信息了 如果我们在include/configs/fl2440.h文件中添加 ~~~ #define  CONFIG_SKIP_LOWLEVEL_INIT     1 //用来支持uboot在内存中直接运行 ~~~ 然后再编译出u-boot.bin,这时的镜像文件就可以通过J-Link下载到内存0x33f80000处运行。 在board/asmsung/fl2440/fl2440.c添加如下两个宏定义用来自动补齐命令 ~~~ #define CONFIG_CMDLINE_EDITING   1   #define CONFIG_AUTO_COMPLETE     1 /*tab COMPLETE*/  ~~~
';