u-boot-2012.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]# "