zoukankan      html  css  js  c++  java
  • ok6410 u-boot-2012.04.01移植七完善u-boot移植(u-boot移植结束)

    继ok6410 u-boot-2012.04.01移植六后,开发板已支持MLC NAND、DM9000等。但还需要完善比如环境变量、mtdpart分区、裁剪、制作补丁等。下面的工作就是完善移植的u-boot。

    开发环境:
    系统:ubuntu 10.04.4
    单板:ok6410
    NAND FLASH:K9GAG08U0D 2048MB
    NOR Flash:EN29LV160AB 2MB
    DDR:K4X1G163PCX2 256MB
    NET:DM9000AEP
    编译器:arm-linux-gcc-4.3.2
    搭建开发环境详见ubuntu 10.04.4开发环境配置。
    目标:
    1.板级初始化,支持单板ok6410
    2.修改u-boot,支持NAND启动
    3.增加菜单update功能
    4.增加MLC NAND支持
    5.支持DM9000,网卡下载程序
    6.修改环境变量以及mtdpart分区
    7.u-boot裁剪及制作补丁

    一、修改环境变量

    根据u-boot启动界面输出的using default environment,找到common/enc_common.c,还可以通过save命令找到env_nand.c,就不进一步分析了,直接修改代码。修改smdk6410.h

    #define CONFIG_SYS_MALLOC_LEN  (CONFIG_ENV_SIZE + 512*1024)

    #define CONFIG_ENV_IS_IN_NAND
    #define CONFIG_ENV_SIZE   0x80000//0x4000 /* Total Size of Environment Sector */
    #define CONFIG_ENV_OFFSET  0x80000
    #define CONFIG_ENV_RANGE  CONFIG_ENV_SIZE

    接着编译测试

    SMDK6410 # set bootdelay 5
    SMDK6410 # save
    Saving Environment to NAND...
    Erasing Nand...

    nand0: MTD Erase failure: -22

    Writing to Nand... done
    SMDK6410 # reset

    重启发现没有保存,看来还有问题,根据提示继续修改

    change@change:/si/OK6410/u-boot-2012.04.01$ grep "MTD Erase failure" * -nR
    Binary file drivers/mtd/nand/libnand.o matches
    drivers/mtd/nand/nand_util.c:149:                       printf(" %s: MTD Erase failure: %d ",

    ok,去drivers/mtd/nand/nand_util.c:149

      result = meminfo->erase(meminfo, &erase);
      if (result != 0) {
       printf(" %s: MTD Erase failure: %d ",
              mtd_device, result);
       continue;
      }

    没看出啥问题,那还是从save命令分析saveenv()是在common/env_nand.c中实现的,进去看看,加了很多打印语句还是没找到。后来在头文件include/asm-generic/errno.h找到#define EINVAL  22 /* Invalid argument */原来failure: -22是参数问题。输的u-boot命令肯定没问题。没办法只好到配置文件smdk6410.h找问题。仔细看了一遍还真找到了,原来#define CONFIG_ENV_OFFSET  0x40000没有改成#define CONFIG_ENV_OFFSET  0x80000。因为K9GAG08U0D的BLOCK SIZE是512K。下面测试

    SMDK6410 # set bootdelay 5
    SMDK6410 # save
    Saving Environment to NAND...
    Erasing Nand...
    Erasing at 0x80000 -- 100% complete.
    Writing to Nand... done
    SMDK6410 # reset
    resetting ...


    U-Boot 2012.04.01 (Jul 09 2013 - 21:30:25) for SMDK6400


    CPU:     S3C6400@532MHz
             Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz (ASYNC Mode)
    Board:   SMDK6400
    DRAM:  128 MiB
    WARNING: Caches not enabled
    Flash: 0 KB
    NAND:  select s3c_nand_oob_mlc_64
    NAND_ECC_NONE selected by board driver. This is not recommended !!
    2048 MiB
    In:    serial
    Out:   serial
    Err:   serial
    Net:   dm9000
    Hit any key to stop autoboot:  0

    ##### Update menu for ok6410 #####
    [g] get file, and write to nand flash 0 block
    [b] Boot the system
    [r] Reset the u-boot
    [q] Quit from menu
    Enter your selection: q
    SMDK6410 #

    重启发现bootdelay变为5,正常了。

    二、修改mtdpart分区
    这个比较简单,仿照别人做法,直接在配置文件smdk6410.h增加如下:

    /*-----------------------------------------------------------------------
     * Dynamic MTD partition support
     */
    #define CONFIG_CMD_MTDPARTS
    #define CONFIG_MTD_DEVICE               /* needed for mtdparts commands */
    //#define CONFIG_FLASH_CFI_MTD
    #define MTDIDS_DEFAULT          "nand0=OK6410-0"

    #define MTDPARTS_DEFAULT        "mtdparts=OK6410-0:512k(u-boot),"     
                                                     "512k(params),"           
                                                     "4M(kernel),"       
                                                     "-(rootfs)"        
     添加后编译在测试

    SMDK6410 # mtdparts default
    SMDK6410 # mtdparts


    device nand0 <OK6410-0>, # parts = 4
     #: name                size            offset          mask_flags
     0: u-boot              0x00080000      0x00000000      0
     1: params              0x00080000      0x00080000      0
     2: kernel              0x00400000      0x00100000      0
     3: rootfs              0x7fb00000      0x00500000      0


    active partition: nand0,0 - (u-boot) 0x00080000 @ 0x00000000


    defaults:
    mtdids  : nand0=OK6410-0
    mtdparts: mtdparts=OK6410-0:512k(u-boot),512k(params),4M(kernel),-(rootfs)
    SMDK6410 # 

     测试基本正常。下面制作补丁。

    三、整个移植代码修改量比较大,这里制作一个补丁文件,大家直接打个补丁就可以用了。

    change@change:/si/OK6410/u-boot-2012.04.01$ make distclean
    change@change:/si/OK6410/u-boot-2012.04.01$ cd ..
    change@change:/si/OK6410$ mv u-boot-2012.04.01 u-boot-2012.04.01_ok
    change@change:/si/OK6410$ tar xjf u-boot-2012.04.01.tar.bz2 
    change@change:/si/OK6410$ diff -urN u-boot-2012.04.01 u-boot-2012.04.01_ok > u-boot-2012.04.01_ok6410.patch
    change@change:/si/OK6410$ 

    生成补丁文件u-boot-2012.04.01_ok6410.patch,不想做繁琐的修改,打个上面的补丁文件就OK了。打补丁方法如下:

    change@change:/si/OK6410/u-boot-2012.04.01$ patch -p1 < ../u-boot-2012.04.01_ok6410.patch 
    patching file arch/arm/config.mk
    patching file arch/arm/cpu/arm1176/start.S
    patching file arch/arm/include/asm/arch-s3c64xx/s3c6400.h
    patching file arch/arm/lib/board.c
    patching file board/samsung/smdk6410/config.mk
    patching file board/samsung/smdk6410/.gitignore
    patching file board/samsung/smdk6410/init.c
    patching file board/samsung/smdk6410/lowlevel_init.S
    patching file board/samsung/smdk6410/Makefile
    patching file board/samsung/smdk6410/sdram.c
    patching file board/samsung/smdk6410/smdk6400_nand_spl.c
    patching file board/samsung/smdk6410/smdk6410.c
    patching file board/samsung/smdk6410/u-boot-nand.lds
    patching file common/cmd_menu.c
    patching file common/env_nand.c
    patching file common/main.c
    patching file common/Makefile
    patching file drivers/mtd/nand/nand_base.c
    patching file drivers/mtd/nand/s3c64xx.c
    patching file include/common.h
    patching file include/configs/smdk6410.h
    patching file include/linux/mtd/mtd-abi.h
    patching file Makefile
    change@change:/si/OK6410/u-boot-2012.04.01$ make
    System not configured - see README
    make: *** [all] Error 1
    change@change:/si/OK6410/u-boot-2012.04.01$ make smdk6410_config 


    warning: Please migrate to boards.cfg.  Failure to do so will
             mean removal of your board in the next release.


    Configuring for smdk6410 board...
    change@change:/si/OK6410/u-boot-2012.04.01$ make

    编译ok就可以用了。想偷懒可以这样做,最简单。但不建议,自己亲自移植一遍更能学到东西。至此ok6410 u-boot-2012.04.01移植部分告一段落,下一篇linux移植。

  • 相关阅读:
    UICollectionViewController用法
    UISegmentedControl的详细使用
    &#x开头的是什么编码呢。浏览器可以解释它。如&#20013;&#22269;等同与中文"中国"?
    Random.nextint() 和Math.random()的区别
    UIGestureRecognizer ios手势识别温习
    [工具]Mac平台开发几个网络抓包工具(sniffer)
    IOS中Json解析的四种方法
    iOS官方Sample大全
    Ubuntu 16.04安装cuda7.5 GCC
    Ubuntu中升极下载4.2内核
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3181565.html
Copyright © 2011-2022 走看看