zoukankan      html  css  js  c++  java
  • s3c2440 移值uboot2016.03 第1篇 新建单板

    目前除RC版外,最新的就是 u-boot-2016.03.tar.bz2 ,大概看了几个年份的u-boot 发现,现在 更像是 linux kernel 。有 menuconfig 。

    对比2012年的版本,发现 原来在 start.S 中做的一些事情,被拆分了。 board 分的更加详细。

    之前没有 J-LINK 根本无法烧写 NOR FLASH ,导致 u-boot 只能在 NAND FLASH 上,但是卡在 重定向这一处。用了点灯大法,串口调试,都不是很理想。

    买了个J-LINKV9 ,一试,原来烧写,NOR FLASH 这么简单。

    因为 u-boot 自带的 只有 2410 的 单板,而且是不支持 NAND FLASH 的。

    现在开始新建 2440 的单板。大至流程,和编写,裸板程序比较相似。

    1,初始化中断向量 (如果有需要的话)

    2,关看门狗

    3,初始化 PLL 设置 分频

    4,初始化SDRAM 内存

    5,执行 board_r 中的后续操作

    在 NAND FLASH 上,也是和这个类似,区别在于, NAND FLASH 会有一个自动复制4K 到 SRAM 执行的过程,在这4K 里面,需要读出整个u-boot 放到

    SDRAM 中,还要修改  链接地址----重向定的代码。如果有 Open-JAG 就更好了,就能知道是在哪一步出现问题。

    具体修改哪些东西:

    1, configs/smdk2410_defconfig 在上面修改也行,复制出来一份也行。
    改名为 smdk2440_defconfig
    修改内容为
    CONFIG_ARM=y
    CONFIG_TARGET_SMDK2440=y
    CONFIG_SYS_PROMPT="SMDK2440 # "
    # CONFIG_CMD_SETEXPR is not set

    2, /board/samsung/smdk2410 文件夹 复制为 smdk2440
    /board/samsung/smdk2440/smdk2410.c 改为
    /board/samsung/smdk2440/smdk2440.c
    /board/samsung/smdk2440/Makefile 修改内容
    obj-y := smdk2440.o
    obj-y += lowlevel_init.o

    /board/samsung/smdk2410/Kconfig 修改内容
    if TARGET_SMDK2440
    config SYS_BOARD
    default "smdk2440"
    config SYS_VENDOR
    default "samsung"
    config SYS_SOC
    default "s3c24x0"
    config SYS_CONFIG_NAME
    default "smdk2440"

    endif

    /include/configs/smdk2410.h 复制为 smdk2440.h
    修改里面的 所有 2410 改为 2440

    /arch/arm/Kconfig中 添加

    source "board/samsung/smdk2440/Kconfig"

    config TARGET_SMDK2440
    bool "Support smdk2440"
    select CPU_ARM920T

    3, 试着 Make
    修改 Make 添加
    ARCH=arm
    CROSS_COMPILE=arm-linux-
    #执行
    make smdk2440_defconfig
    #make menuconfig 使用图型显示

    基本上能用了,NAND FLASH 有点问题。
    LDS u-boot.lds
    LD u-boot
    drivers/mtd/nand/built-in.o: In function `nand_init_chip':
    /home/u-boot-2016.03/drivers/mtd/nand/nand.c:76: undefined reference to `board_nand_init'
    arm-linux-ld: BFD (Sourcery G++ Lite 2008q3-72) 2.18.50.20080215 assertion fail /scratch/julian/lite-respin/linux/obj/binutils-src-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/bfd/elf32-arm.c:9537
    arm-linux-ld: BFD (Sourcery G++ Lite 2008q3-72) 2.18.50.20080215 assertion fail /scratch/julian/lite-respin/linux/obj/binutils-src-2008q3-72-arm-none-linux-gnueabi-i686-pc-linux-gnu/bfd/elf32-arm.c:9771
    Segmentation fault
    make: *** [u-boot] Error 139

    去掉 网卡 USB 不需要的文件系统, NAND RTC 等后,重新编译,直到无错。
    (最后会发布补丁)
    编译成功 , 这当然是不能使用的,因为内存参数配置不对
    -rw-r--r-- 1 root root 191068 2016-05-09 09:17 u-boot.bin
    -rw-r--r-- 1 root root 9633 2016-05-09 09:17 u-boot.cfg
    -rw-r--r-- 1 root root 1288 2016-05-09 09:17 u-boot.lds
    -rw-r--r-- 1 root root 206425 2016-05-09 09:17 u-boot.map
    -rw-r--r-- 1 root root 191068 2016-05-09 09:17 u-boot-nodtb.bin
    -rw-r--r-- 1 root root 549400 2016-05-09 09:17 u-boot.srec
    -rw-r--r-- 1 root root 57927 2016-05-09 09:17 u-boot.sym

    5, 修改内存配置参数 及 启动流程分析
    /arch/arm/cpu/arm920t/start.S
    修改 时钟初始化

    /* 设置分频参数 */
    ldr r0, =CLKDIVN
    mov r1, #0x05; /* FCLK:HCLK:PCLK=1:4:8 */
    str r1, [r0]

    /* 如果HDIVN非0,CPU的总线模式应该从“fast bus mode”变为“asynchronous bus mode” */
    mrc p15, 0, r1, c1, c0, 0 /* 读出控制寄存器 */
    orr r1, r1, #0xc0000000 /* 设置为“asynchronous bus mode” */
    mcr p15, 0, r1, c1, c0, 0 /* 写入控制寄存器 */

    /* 配置时钟 */
    #define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01))
    ldr r0, =0x4c000004
    ldr r1, =S3C2440_MPLL_400MHZ
    str r1, [r0]

    调用 lowlevel_init
    /board/samsung/smdk2440/lowlevel_init.S
    修改内存配置参数


    /board/samsung/smdk2440/smdk2440.c
    中有 board_early_init_f 中初始化了 PLL
    而它又是在 board_r.c 中被调用,太靠后了。
    所以放到 start.S 中,这样加快了速度,因为SDRAM 初始化的时序是按 HCLK 100M 计算的,也必须在初始化 SDRAM 之前配置好时钟。

    所以就取消 board_early_init_f 中的 Mpll 的设置 。

    重新 清理 编译, 无错。 使用 J-LINK 烧到 NOR FLASH 上面,试机。
    生成反汇编
    arm-linux-objdump -D u-boot > u-boot.dis

  • 相关阅读:
    mysql开发
    mysql的初始化配置及命令行选项
    纪念Vamai
    JXU1NDRBJXU0RTJBJXU1MjJCJXU1NDI3
    Java8简明学习之新时间日期API
    Java8简明学习之Lambda表达式
    Java8简明学习之接口默认方法
    Java8简明学习之Optional
    JVM类加载器及Java类的生命周期
    Java反射拾遗
  • 原文地址:https://www.cnblogs.com/ningci/p/5474345.html
Copyright © 2011-2022 走看看