uboot2012.04移植

开发平台:x86 redhat5.5
目标平台:SMDK6410

注意:

    该文档是移植完成之后的总结,所以并非按照真正的移植步骤所写, 只做参考
    修改完成后运行make进行编译,把编译生成的u-boot-nand.bin烧写到nand的0-0x40000后即可切换为nand启动方式来运行
    在uboot启动后手动添加环境变量
    [zhangsan@nand]# set ipaddr 192.168.1.20
    [zhangsan@nand]# set serverip 192.168.1.254
    [zhangsan@nand]# set ethaddr 11:22:33:44:55:66
    这些变量也可在smdk6400.h中以宏的方式定义
    经测试,nand、tftp等命令都好用,如有问题请发邮箱:
    lizhiyong_beyond@163.com

以下为文件中修改的部分

一、修改u-boot-2012.04/arch/arm/cpu/arm1176/start.S
    在132行添加如下,目的是找到命令段
    132 .global uboot_cmd_start
    133 uboot_cmd_start:
    134         .word __u_boot_cmd_start - _start
    135 .global uboot_cmd_end
    136 uboot_cmd_end:
    137         .word __u_boot_cmd_end - _start

    注释掉386行,如下
    @add     lr, lr, r9

二、修改u-boot-2012.04/arch/arm/lib/board.c
    在373到375行之间添加如下
    372         addr -= gd->mon_len;
    373         //myself
    374         addr = 0x57e00000;
    375         //myself
    376         addr &= ~(4096 - 1);
    
    把530到532行修改如下,因为该开发板没有NOR    
    530                 puts("0K");
    531                 //puts(failed);
    532                 //hang();

 
三、修改u-boot-2012.04/arch/arm/lib/eabi_compat.c
    注释掉第17行如下,该问题以后再解决
    14int raise (int signum)
     15 {
     16 #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_
    LIBCOMMON_SUPPORT)
     17 //      printf("raise: Signal # %d caught\n", signum)    ;
     18 #endif
     19         return 0;
     20 }

四、修改u-boot-2012.04/board/samsung/smdk6400/lowlevel_init.S
    把第54到63行删除
    在第54行到66行添加如下
    这段代码的目的在于测试程序是否能执行到此,如果能则开发板的四个led都亮
    55         ldr     r0, =0x7f008820
    56         ldr     r1, [r0]
    57         ldr     r2, =0xffff
    58         bic     r1, r1, r2
    59         orr     r1, r1, #0x11
    60         orr     r1, r1, #0x1100
    61         str     r1, [r0]
    62         /* LED ALL ON */
    63         ldr     r1, =0x7f008824
    64         ldr     r2, [r1]
    65         bic     r2, r2, #0xf
    66         str     r1, [r2]

 
五、修改u-boot-2012.04/board/samsung/smdk6400/smdk6400.c
    把board_eth_init函数修改如下,目的在于把DM9000网卡替换CS8900网卡
    126 int board_eth_init(bd_t *bis)
    127 {
    128         int rc = 0;
    129 #ifdef CONFIG_DM9000
    130         rc = dm9000_initialize(bis);
    131 #endif
    132 #ifdef CONFIG_CS8900
    133         rc = cs8900_initialize(0, CONFIG_CS8900_BASE)    ;
    134 #endif
    135         return rc;
    136 }

六、修改u-boot-2012.04/board/samsung/smdk6400/smdk6400_nand_spl.c
    把board_init_f函数修改如下
    33 void board_init_f(unsigned long bootflag)
     34 {
     35 //      relocate_code(CONFIG_SYS_TEXT_BASE - TOTAL_MA    LLOC_LEN, NULL,
     36 //                      CONFIG_SYS_TEXT_BASE);
     37         relocate_code(0x2000, NULL, CONFIG_SYS_TEXT_B    ASE);
     38 }

七、修改u-boot-2012.04/common/command.c
    修改find_cmd函数如下,目的在于寻找命令段
    138 cmd_tbl_t *find_cmd (const char *cmd)
    139 {
    140         int start, end;
    141         int text_start;
    142 //      int len = &__u_boot_cmd_end - &__u_boot_cmd_start;
    143         __asm__ __volatile__(
    144                 "ldr r0, =uboot_cmd_start\n"
    145                 "ldr %0, [r0]\n"
    146                 "ldr r0, =uboot_cmd_end\n"
    147                 "ldr %1, [r0]\n"
    148                 "ldr %2, =_start\n"
    149                 :"=&r"(start), "=&r"(end), "=&r"(text_start)
    150                 :
    151                 :"r0"
    152         );
    153         return find_cmd_tbl(cmd, start + text_start, (end - start) /
    sizeof(cmd_tbl_t));
    154 //      return find_cmd_tbl(cmd, &__u_boot_cmd_start, len);
    155 }

八、修改u-boot-2012.04/include/configs/smdk6400.h
    把81到83行注释掉,目的是取消CS8900网卡
    添加85到90行如下,目的是添加DM9000网卡支持
    81 //#define CONFIG_CS8900     /* we have a CS8900 on-board    */
     82 //#define CONFIG_CS8900_BASE            0x18800300
     83 //#define CONFIG_CS8900_BUS16 /* follow the Linux driver      */
     84
     85 #define CONFIG_DM9000
     86 #define CONFIG_DRIVER_DM9000
     87 #define CONFIG_DM9000_BASE 0X18000000
     88 #define DM9000_IO CONFIG_DM9000_BASE
     89 #define DM9000_DATA (CONFIG_DM9000_BASE + 4)
     90 #define CONFIG_DM9000_BUS16
    
    在114行到117行添加如下,目的在于打开网络支持和ping命令
    114 //mysefl
    115 #define CONFIG_CMD_NET
    116 #define CONFIG_CMD_PING
    117 //myself
 
    把164行修改如下,目的在于修改uboot的shell名字
    164 #define CONFIG_SYS_PROMPT "[zhangsan@nand]# "

原文地址:https://www.cnblogs.com/cainiaoaixuexi/p/3021426.html