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,可以下载到板上看看效果了!
原文地址:https://www.cnblogs.com/swordzj/p/2034756.html