[U-Boot] Help command broken on AT91SAM9G10-EK
Peter Tyser
ptyser at xes-inc.com
Fri Nov 13 22:39:04 CET 2009
Hi Justin,
> > > > And are you seeing 2 separate issues: 1 where the help output is
> > > > garbled, and 1 where the "help" command can't be ran?
> > >
> > > Yes, I am seeing two separate issues. It depends on which commit I use.
> > > If I go back to the "readline" commit, then I get garbled output. Once
> > > the editenv commit is added back, I get the 'help not found' error.
> >
> > I'm not sure what to make of this. I can't figure out how
> > "246c69225c7b962d5c93e92282b78ca9fc5fefee - Add 'editenv' command" would
> > fix the garbled output or cause the help command not to be found. Its
> > just adding a new command and shouldn't really have any impact on common
> > code.
>
> Well, editenv doesn't fix the garbled output, it just makes it so you
> can't see it. The help command issue is what really confuses me. If I
> just disable the editenv command, running "help" seems to lock up the
> board. That seems really weird to me, since it seems to disable all of
> the code that was added by the previous patch. I'm going to dig into
> this a little more. If I also revert the changes in cread_line,
> everything works fine.
>
> > Thanks. If I understand correctly, chronologically you first start
> > having issues when "ecc5500ee487170d8af6ff893fd1e0082380a01a -
> > readline(): Add ability to modify a string buffer" is applied.
>
> Yes, that's correct.
>
> > If this is the case, I'd try debugging this issue first before
> > addressing the later 'help not found' issue.
>
> I agree. That's the tact that I was trying to take before.
>
> > Is there any pattern in the garbled output? Could you send an example of
> > it? Is only the output of 'help' is garbled, everything else is fine?
>
> So there are three commits in a row:
>
> ecc5500 - readline(): Add ability to modify a string buffer
> b0fa8e5 - setenv(): Delete 0-length environment variables
> 246c692 - Add 'editenv' command
>
> After the first commit, the garbled text appears at the end of help.
> After the second, running *help* hangs the board.
> After the third, I get the 'help not found' message. Although, now that
> I try to reproduce the error, it seems to hang as well. Possibly
> something still sitting around in memory that was causing the problem?
>
> > Could you add some debug to print out the value of init_len in
> > common/main.c:cread_line()? In theory as long as you don't run
> > "editenv" it should always be 0. Assuming it is always 0, could you try
> > commenting out the following snippet in the same file:
> >
> > if (init_len)
> > cread_add_str(buf, init_len, 1, &num, &eol_num, buf, *len);
> >
> > Then also try commenting out the modification to
> > common/main.c:readline():
> >
> > console_buffer[0] = '\0';
> >
> > Those 2 modifications are all that commit
> > ecc5500ee487170d8af6ff893fd1e0082380a01a added - I'd be curious to know
> > which one caused the problem.
>
> Definitely the first one. I can leave the second one in without a
> problem.
What is the value of "init_len"? It should always be 0 other than when
'editenv' is called. So I doubt the added code is ever called.
> >
> > Another interesting data point would be to remove CONFIG_SYS_HUSH_PARSER
> > from the AT91SAM9263-EK u-boot image and see if it breaks in the same
> > way.
>
> Now things have gotten very interesting... SAM9263 works great without
> hush, but the 9G10 and 9261 (which use the same base code, just slightly
> different configurations) are completely broken. Also, I can't add hush
> into these boards, or they won't boot. This error that I see after
> applying your patches seems likely to be a symptom of a larger issue
> with these two boards. I'm going to try some of the other Atmel boards
> that I have lying around (9260, 9G20). I'll let you know what I find
> out.
Thanks for the info.
My guess is that somehow the end of u-boot command section is getting
corrupted. Perhaps the editenv patches, etc increase the size of your
image such there's an overlap in sections that isn't reported as an
error? Or is the stack above the U-boot image in RAM? Or malloc pool,
etc?
If I look at my System.map file I see this at the end:
<lots more __u_boot_cmds>
fffd2bbc D __u_boot_cmd_test
fffd2bd4 D __u_boot_cmd_exit
fffd2bec D __u_boot_cmd_help
fffd2c04 D __u_boot_cmd_question_mark
fffd2c1c D __u_boot_cmd_showvar
fffd2c34 A __start___ex_table
fffd2c34 A __stop___ex_table
fffd2c34 A __u_boot_cmd_end
fffd2d00 A __init_begin
fffd2d00 A __init_end
fffff000 T _start_e500
fffff18c t switch_as
If you look at other commands near help (eg exit or test) in your
System.map file, do they have the same issues as as 'help'? Seems fishy
that the u-boot command table is near the end of the u-boot image, and
you're seeing issues specifically with the end of the u-boot command
table.
Best,
Peter
More information about the U-Boot
mailing list