U-boot-200908在FL2440上的移植(一)--uboot在RAM中运行

来源:互联网 发布:怎样养淘宝小号 编辑:程序博客网 时间:2024/05/23 19:17

首先我的环境是

主机:Ubuntu11.10

编译器: arm-linux-4.3.2

u-boot: uboot-2009.08


1.建立FL2440项目并编译

建立板级文件夹:

(1)在board/samsung目录下新建文件夹fl2440,找到相似的板级文件夹smdk2410,并把该文件夹中的所有文件拷贝到fl2440下

(2)到fl2440目录下,把文件smdk2410.c重命名为fl2440.c;修改该目录下Makefile中的目标(COBJS),把smdk2410.o改为fl2440.o;

2.建立芯片级文件夹

直接用cpu/arm920t芯片文件夹,不做修改;

3.建立配置文件:

到include/configs目录下,找到相似的配置文件smdk2410.h,将其拷贝并重命名为fl2440.h;


4.建立编译规则:

在根目录下的Makefile中找到ARM体系架构中smdk2410的编译规则

smdk2410_config : unconfig                @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0在此处添加ok2440的编译规则fl2440_config : unconfig                @$(MKCONFIG) $(@:_config=) arm arm920t fl2440 samsung s3c24x0(注意Makefile中命令行要以tab键开头)

5.在宿主机linux环境下编译:

在终端进入uboot的根目录下执行两条命令:


make fl2440_configmake

此时编译应该通过,生成u-boot.bin


6.下载到内存中调试时不进行底层初始化、不进行uboot代码拷贝,所以在配置文件include/configs/fl2440.h中加入两句:

#   define CONFIG_SKIP_LOWLEVEL_INIT    1    #   define CONFIG_SKIP_RELOCATE_UBOOT    1 

7。修改cpu/arm920t/start.S,


(1)在这里我主要是想添加LED初始化代码,让LED都亮起来,证明程序有运行(这也是Debug的一种)


在这里注释掉这两个没有用的/*      bl coloured_LED_init        bl red_LED_on */下面定义我的LED0,LED1,LED2,LED3使他们都亮起来,这个是根据开发板的配置        #define GPBCON 0x56000010        #define GPBDAT 0x56000014        #define GPBUP  0x56000018        ldr r0, =GPBUP        ldr r1, =0x7ff        str r1, [r0]        ldr r0, =GPBCON        ldr r1, =0x111400        str r1, [r0]        ldr r0, =GPBDAT        ldr r1, =0x29f        str r1, [r0]

(2)配置S3C2440的寄存器

#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) //这里添加CONFIG_S3C2440//这里我选择注释掉CONFIG_S3C2410,因为我在fl2440.h中#define CONFIG_S3C2440 和#define CONFIG_S3C2410/*# if defined(CONFIG_S3C2410)        ldr     r1, =0x3ff        ldr     r0, =INTSUBMSK        str     r1, [r0]# endif*///新添加# if defined(CONFIG_S3C2440)        ldr  r1, =0x7fff        ldr  r0, =INTSUBMSK        str  r1, [r0]# endif//继续添加和修改# if defined(CONFIG_S3C2440)        #define MPLLCON   0x4C000004         #define UPLLCON   0x4C000008        ldr  r0, =CLKDIVN        mov  r1, #5        str  r1, [r0]        ldr  r0, =MPLLCON        ldr  r1, =0x7F021        str  r1, [r0]        ldr  r0, =UPLLCON        ldr  r1, =0x38022        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 */

8.在include/configs/fl2440.h中添加


//添加CONFIG_S3C2440#define CONFIG_ARM920T          1       /* This is an ARM920T Core      */#define CONFIG_S3C2410          1       /* in a SAMSUNG S3C2410 SoC     */#define CONFIG_SMDK2410         1       /* on a SAMSUNG SMDK2410 Board  */#define CONFIG_S3C2440          1

9.修改board/samsung/fl2440/fl2440.c中的


#elif FCLK_SPEED==1         /* Fout = 405MHz, FCLK:HCLK:PCLK = 1:4:8 */      #define M_MDIV     0x7f      #define M_PDIV     0x2      #define M_SDIV     0x1修改#define U_M_MDIV        0x48为#define U_M_MDIV        0x38

10.修改cpu/arm920t/s3c24x0/speed.c相关部分:

(1).修改FCLK的计算公式:

把下面的部分:     m = ((r & 0xFF000) >> 12) + 8;     p = ((r & 0x003F0) >> 4) + 2;     s = r & 0x3;     return((CONFIG_SYS_CLK_FREQ * m) / (p << s));替换为:     m = ((r & 0xFF000) >> 12) + 8;     p = ((r & 0x003F0) >> 4) + 2;     s = r & 0x3;     if(pllreg == MPLL)         return((CONFIG_SYS_CLK_FREQ * m * 2) / (p << s));     else         return((CONFIG_SYS_CLK_FREQ * m) / (p << s));

(2)修改get_HCLK函数:

/* return HCLK frequency */ulong get_HCLK(void){    S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();            //return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK());      return (get_FCLK()/4);     //这里修改的只能用于 s3c2440 ,1:4:8 !!!}

11.这一步应该非常重要,我就在这上面载了跟头,老是串口输出不了讯息,这个是由于三星给我们的DNW烧写工具的

options里面有一个Download Address 0x30800000

所以我们的include/configs/fl2440.h


#define CONFIG_SYS_LOAD_ADDR            0x30800000      /* default load address  33000000*/

还有就是board/samsung/fl2440/config.mk


#TEXT_BASE = 33F80000TEXT_BASE = 0x30800000

这样两个一样那么编译一下下载到ram中就能看到讯息了,哦,对了下载的时候首先薄码开关1,2,3,4全部关闭,且串口接串口0,然后选择0 Download &Run,

选择USB transmit就行了


这篇文章参考网址:http://blog.chinaunix.net/uid-22174347-id-1786933.html