zoukankan      html  css  js  c++  java
  • uboot移植到nano2410

    前段时间买了块友善之臂的nano2410的板子,一直都跑的是vivi,但是为了移植2.6内核,决定先把uboot移植过来,这就开始了我的痛苦之旅……
    1.这快板子没有nor flash,只有32M的NAND FLASH,所以要先找一个支持NAND FLASH的U-BOOT,点击下载
    2.make smdk2410_defconfig
    3.针对nano2410的板子修改一些文件
    (1)board/smdk2410/config.mk
           找到
                TEXT_BASE = 0x33F80000
           改成
                TEXT_BASE = 0x31F80000    
     
    (2)board/smdk2410/lowlevel_init.S
           找到
                 #define B6_BWSCON          (DW32)
           改成
                 #define B6_BWSCON          (DW16)
       上面两处修改都是针对nano2410的ram的
    (3)common/cmd_boot.c
    这个文件修改的地方比较多,主要是要能用go命令直接引导内核,这个问题困扰了我很长时间,
    在网上找了好多文章,都说可以用bootm启动内核,但无论我怎么改都不行,只有直接这样改
    才行。还希望有高手帮我解释一下.
     --- u-boot-1.1.4-nand/common/cmd_boot.c    2007-06-30 08:42:08.000000000 +0800
    +++ u-boot-nano-zj/common/cmd_boot.c    2007-06-29 11:34:05.000000000 +0800
    @@ -28,9 +28,9 @@
     #include <command.h>
     #include <net.h>
     
    -#if defined(CONFIG_I386)
    +//#if defined(CONFIG_I386)
     DECLARE_GLOBAL_DATA_PTR;
    -#endif
    +//#endif
     
     void  call_linux(long a0, long a1, long a2)
     {  
    @@ -77,6 +77,7 @@
     static void setup_linux_param(ulong param_base)
     {  
     struct param_struct *params = (struct param_struct *)param_base;
    +
     char *linux_cmd;
     
     //linux_cmd = "noinitrd root=/dev/mtdblock/2 init=/linuxrc console=ttyS0";
    @@ -89,11 +90,12 @@
     /* set linux command line */
     memcpy(params->commandline, linux_cmd, strlen(linux_cmd) + 1);
     }
    +
     int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
     {
         ulong    addr, rc;
         int     rcode = 0;
    -
    +    struct param_struct *params = gd->bd->bi_boot_params;
         if (argc < 2) {
             printf ("Usage:\n%s\n", cmdtp->usage);
             return 1;
    @@ -117,8 +119,12 @@
         argv[0] = (char *)gd;
     #endif
     #if !defined(CONFIG_NIOS)
    -    rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
    -#else
    +    //rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
    +
    +params->u1.s.page_size = 4096;
    +memcpy(params->commandline, CONFIG_BOOTARGS, strlen(CONFIG_BOOTARGS) + 1);
    +rc = ((ulong (*)(int, char *[]))addr) (0,gd->bd->bi_arch_number);
    +
         /*
          * Nios function pointers are address >> 1
          */
    @@ -146,3 +152,24 @@
         "reset   - Perform RESET of the CPU\n",
         NULL
     );
      (3)include/configs/smdk2410.h
        找到
            #define CFG_MEMTEST_END        0x33F00000    /* 63 MB in DRAM    */

            #define PHYS_SDRAM_1_SIZE    0x04000000 /* 64 MB */

            #define CONFIG_MTD_NAND_VERIFY_WRITE 1

            #define STACK_BASE            0x33f00000

            #define UBOOT_RAM_BASE        0x33f80000
        改成
            #define CFG_MEMTEST_END        0x31F00000    /* 31 MB in DRAM    */

            #define PHYS_SDRAM_1_SIZE    0x02000000 /* 32 mb

            //#define CONFIG_MTD_NAND_VERIFY_WRITE 1//注释这一行

            # define STACK_BASE            0x31f00000

            #define UBOOT_RAM_BASE        0x31f80000

    4.可以开始编译了,我用的是2.95.3的编译器编译的,在编译过程中可能会有些错误,如果是提示.srec什么的出错,就修改example/Mackfile,
    把%.srec:    %
    改成%.srec:    %.o
    ok,可以下载到板上看看效果了!
  • 相关阅读:
    java线程池
    缓存命中
    dubbo面向服务使用
    ActiveMQ
    创建证书
    struts2的运行原理以及底层的工作机制
    jdbc,mybatis,hibernate各自优缺点及区别
    struts2与springmvc的区别
    linux vi 命令编辑操作
    Linux FTP基本操作命令 ( 序列二 ftp)
  • 原文地址:https://www.cnblogs.com/swordzj/p/2034756.html
Copyright © 2011-2022 走看看