uboot.2015.07移植之驱动串口(4)

移植u-boot-2015.07之修改程序支持串口打印

1.修改start.S里面的分频系数

#define S3C2440_UPLL_48M    ((56 << 12) | (2 << 4) | (2 << 0))
#define S3C2440_MPLL_400M   ((0x5c << 12) | (1 << 4) | (1 << 0))
#define S3C2440_FHP_821     (0x05)

/* 初始化时钟 */
    mrc P15, 0, R0, C1, C0, 0   /* Read C1 register to R0 */
    orr R0, R0, #0xC0000000     /* Set iA=1,nF=1,mode---Asynchronous */
    orr R0, R0, #(1 << 12)      /* Enable icache */
    mcr P15, 0, R0, C1, C0, 0   /* Write to C1 register */

    ldr r0, =0x4c000014         /* 设置分频系数,FCLK:HCLK:PCLK = 8:2:1 */
    ldr r1, =S3C2440_FHP_821                /*               400M:100M:50M */
    str r1, [r0]

2.设置时钟

//  ldr r0, =0x4c000000         /* Set lock time */
//  ldr r1, =0xFFFFFFFF         
//  str r1, [r0]

    ldr r0, =0x4c000004
    ldr r1, =S3C2440_MPLL_400M  /* 设置MPLL输出时钟400M */
    str r1, [r0]

/* 延时,编程手册里面有明确指出要进行一段时间的延时 */
1:
    ldr r0, =4000
    sub r0, r0, #1
    bne 1b

    ldr r0, =0x4c000008         /* UPLL 48M */
    ldr r1, =S3C2440_UPLL_48M               
    str r1, [r0]

1:
    ldr r0, =8000
    sub r0, r0, #1
    bne 1b

3.修改board_early_init_f函数

在 board.c 文件里面找到 board_early_init_f 函数,注释掉MPLL的设置(切换到board.c里面的函数的方法是修改smdk2440.h里面,注释掉#define CONFIG_SYS_GENERIC_BOARD。另外在make的时候会出现错误,修改u-boot.lds文件,删掉第一行的#define CONFIG_SYS_GENERIC_BOARD,重新make)

4.修改lowlevel_init里面的SDRAM参数

SMRDATA:
        .long 0x22011110
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00000700
        .long 0x00018005
        .long 0x00018005
        .long 0x008C04F4
        .long 0x000000B1
        .long 0x00000030
        .long 0x00000030

5.编译


  • 拷贝覆盖文件到虚拟机里面
  • make smdk2440_defconfig
  • make

make 结束后会出现一个警告
all:        $(ALL-y)
ifneq ($(CONFIG_SYS_GENERIC_BOARD),y)
    @echo "===================== WARNING ======================"
    @echo "Please convert this board to generic board."
    @echo "Otherwise it will be removed by the end of 2014."
    @echo "See doc/README.generic-board for further information"
    @echo "===================================================="
endif

这个警告说的是在2014版本的结束就会使用一个通用的板设置,这个与宏定义 CONFIG_SYS_GENERIC_BOARD 有关,因为上面我们已经在S3C2440.h文件里面注释掉了这个宏定义,所以这里就会出现警告,这个暂时不用去管它。
如果不注释smdk2440.h里面的#define CONFIG_SYS_GENERIC_BOARD,上述步骤执行完毕后直接make,不会出现错误以及警告,并且重启开发板的时候直接就会执行到了命令行等待用户输入,而不是卡到flash的检测上面,这点也是2015改进的一个地方吧

6.CONFIG_SYS_GENERIC_BOARD宏定义作用

在2015版本中,这个宏定义的使用使得 board.c 文件不被编译进 bootloader 里面了,取而代之的是顶层目录的 common 文件夹下面的 board_r.c 文件。这个文件里面包含有以前在 board.c 文件里面的所有函数,并且对以前的函数进行了改进,确切来说是变得更加分散化了,也就更有利于扩展,但是在理解起来会比较有困难,不过从大体上来说这两个文件实现的功能都是类似的,完全可以按照同样的思路去理解这两个文件。

你可能感兴趣的:(u-boot)