使用一热心网友提供的patch,编译后加载至smartarm可以运行u-boot,但发现执行某些命令会导致u-boot自动复位,通过增加串口打印消息跟踪,发现在commomcommand.c中的cmd_tbl_t *find_cmd (const char *cmd)函数中出现异常,下发help命令时,串口打印信息:
U-Boot 1.1.4 (Jul 17 2007 - 00:36:58)
U-Boot code: 81400000 -> 814182AC BSS: -> 8141C850 // TEXT_BASE设置为0x81400000
RAM Configuration: Bank #0: 81000000 8 MB Flash: 2 MB *** Warning - bad CRC, using default environment
In: serial Out: serial Err: serial Hit any key to stop autoboot: 5 0 => help
&__u_boot_cmd_start: 0x81417ED4, len:0x45A4 // 命令列表为增加的打印信息 cmdtp: 0x81417ED4, autoscr cmdtp: 0x81417EEC, bdinfo cmdtp: 0x81417F04, go cmdtp: 0x81417F1C, reset cmdtp: 0x81417F34, bootm cmdtp: 0x81417F4C, boot cmdtp: 0x81417F64, bootd cmdtp: 0x81417F7C, iminfo cmdtp: 0x81417F94, imls cmdtp: 0x81417FAC, coninfo cmdtp: 0x81417FC4, bootelf cmdtp: 0x81417FDC, bootvx cmdtp: 0x81417FF4, flinfo // 搜索到此处即自动复位
而执行bdinfo命令响应是正确的: => bdinfo
&__u_boot_cmd_start: 0x81417ED4, len:0x45A4 cmdtp: 0x81417ED4, autoscr cmdtp: 0x81417EEC, bdinfo // 成功搜索到该命令
return cmdtp: 0x81417EEC found - check max args arch_number = 0x000000FB env_t = 0x00000000 boot_params = 0x81000100 DRAM bank = 0x00000000 -> start = 0x81000000 -> size = 0x00800000 ethaddr = 00:50:C2:1E:AF:FB ip_addr = 192.168.0.25 baudrate = 115200 bps =>
调试中发现,如果屏蔽某些代码,使代码体积变化时,能搜索到的命令数目也相应变化。怀疑可能是start.S中处理导致的问题,请有经验的高手帮忙指点一下,多谢了!
start.S和patch文件附在楼下。
|