[U-Boot] Help Request - Command parsing, find_cmd (), possible linker script problem
Graeme Russ
graeme.russ at gmail.com
Sun Sep 21 01:27:46 CEST 2008
Thanks for such a quick response Jerry. Your suggestion fixed one
problem, but it still doesn't work
Jerry Van Baren wrote:
> Graeme Russ wrote:
>> Hi All,
>>
>
> Aaargh, you printed %x, not 0x%x. That really threw me on the printout
> of sizeof(cmd_tbl_t).
>
>
> 0x18 == 24
How embarrassing - I've changed it to %i
>>
>> b) The loop never completes since cmdtp never actually equals
>> &__u_boot_cmd_end
>
> Alignment padding problems are preventing it (see above).
>
Fixed with . = ALIGN(4) (ALIGN(2) made no difference)
I've added a few more debugs in the loop (and my startup code) with
the following results:
U-Boot 2008.10-rc2-00002-gd6aaec1-dirty (Sep 20 2008 - 14:37:52)
U-Boot code: 38040000 -> 3805158F data: 00400000 -> 00400A57
BSS: 00400A58 -> 00404463 stack: 00404464 -> 0040C463
DRAM Configuration:
Bank #0: 00000000 64 MB
Bank #1: 04000000 64 MB
Bank #2: 08000000 0 kB
Bank #3: 08000000 0 kB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Serck Controls eNET
autoscript => do_autoscript() @ 0x38040886
bdinfo => do_bdinfo() @ 0x380408e7
<snip>
imls => do_imls() @ <undefined>
<snip>
help => do_help() @ 0x38043713
? => do_help() @ 0x38043713
boot > help
[RUN_COMMAND] cmd[00400ccc]="help"
[PROCESS_SEPARATORS] help
token: "help"
Processing Macros...
[PROCESS_MACROS] INPUT len 4: "help"
[PROCESS_MACROS] OUTPUT len 4: "help"
Extracting Arguments...
parse_line: "help"
parse_line: nargs=1
Looking up Command...
Searching for Command 'help'
Command Table Start : 0x00000540
Command Table End : 0x00000870
sizeof(int) : 4
sizeof(cmd_tbl_t) : 24
cmdtp = 0x00000540
cmdtp->name = 0xffffffff
cmdtp->maxargs = -262145
cmdtp->repeatable = -33562625
cmdtp->cmd = 0xf7ffffff
cmdtp->usage = 0xffff5fff
cmdtp->help = 0x7bffff7f
<snip>
cmdtp = 0x00000858
cmdtp->name = 0xfeffffff
cmdtp->maxargs = -513
cmdtp->repeatable = -1
cmdtp->cmd = 0xffffffff
cmdtp->usage = 0xffffffff
cmdtp->help = 0xffffffff
Searching complete
Unknown command 'help' - try 'help'
boot >
The address dumps of each command are simply achieved by:
printf("autoscript => do_autoscript() @ 0x%08lx\n", (ulong)do_autoscript);
<snip>
/* printf("imls => do_imls() @ 0x%08lx\n", (ulong)do_imls); */
printf("imls => do_imls() @ <undefined>\n");
For some reason do_imls always results in an undefined reference
error reported by the linker, even though it ends up in the command
list at 0x600 as shown in u-boot.map
0x0000000000000540 . = ALIGN (0x4)
0x0000000000000540 __u_boot_cmd_start = .
.u_boot_cmd 0x0000000000000540 0x330 load address 0x000000003805268e
*(.u_boot_cmd)
.u_boot_cmd 0x0000000000000540 0x18 common/libcommon.a(cmd_autoscript.o)
0x0000000000000540 __u_boot_cmd_autoscr
.u_boot_cmd 0x0000000000000558 0x18 common/libcommon.a(cmd_bdinfo.o)
0x0000000000000558 __u_boot_cmd_bdinfo
.u_boot_cmd 0x0000000000000570 0x30 common/libcommon.a(cmd_boot.o)
0x0000000000000588 __u_boot_cmd_reset
0x0000000000000570 __u_boot_cmd_go
.u_boot_cmd 0x00000000000005a0 0x78 common/libcommon.a(cmd_bootm.o)
0x00000000000005a0 __u_boot_cmd_bootm
0x00000000000005e8 __u_boot_cmd_iminfo
0x00000000000005d0 __u_boot_cmd_bootd
0x00000000000005b8 __u_boot_cmd_boot
0x0000000000000600 __u_boot_cmd_imls
.u_boot_cmd 0x0000000000000618 0x18 common/libcommon.a(cmd_console.o)
So now it is terminating the loop correctly, but it looks like the
command table contains nothing garbage
I thought the load address 0x000000003805268e might be a hint, so I
did a dump of u-boot.bin:
0x3805268e - 0x3804000 = 0x1268E = 75406
graeme at devel:~/Source/U-Boot/v2008.10-rc2$ xxd -s 75406 -l 160 u-boot.bin
001268e: 90e0 0438 0200 0000 0000 0000 8608 0438 ...8...........8
001269e: 98e0 0438 bae0 0438 a4e1 0438 0100 0000 ...8...8...8....
00126ae: 0100 0000 e708 0438 abe1 0438 0000 0000 .......8...8....
00126be: 2be2 0438 1000 0000 0100 0000 c509 0438 +..8...........8
00126ce: 2ee2 0438 5de2 0438 b8e2 0438 0100 0000 ...8]..8...8....
00126de: 0000 0000 63c9 0438 bee2 0438 0000 0000 ....c..8...8....
00126ee: 7ee6 0438 1000 0000 0100 0000 5a0c 0438 ~..8........Z..8
00126fe: 84e6 0438 b2e6 0438 c301 0538 0100 0000 ...8...8...8....
001270e: 0100 0000 3a0c 0438 5ae7 0438 0000 0000 ....:..8Z..8....
001271e: 87e7 0438 0100 0000 0100 0000 3a0c 0438 ...8........:..8
Doesn't seem to match (maybe I'm barking up the wrong tree)
Any ideas?
Regards,
Graeme
More information about the U-Boot
mailing list