From: Gary Thomas <gary@mlbassoc.com>
To: Winkler Andreas <andreas.aw.winkler@siemens.com>
Cc: 'eCos Discussion' <ecos-discuss@ecos.sourceware.org>
Subject: RE: [ECOS] Redboots CRC checking
Date: Wed, 07 Jul 2004 13:57:00 -0000 [thread overview]
Message-ID: <1089208626.3988.1227.camel@hermes> (raw)
In-Reply-To: <BCB494E8B7BF2D40B56D1164C67BC2A803A11301@kher443a.ww004.siemens.net>
[-- Attachment #1: Type: text/plain, Size: 2198 bytes --]
On Wed, 2004-07-07 at 07:41, Winkler Andreas wrote:
> Hi,
>
> i first had to buy a flash programmer and to make some holidays.
> Now after some weeks i am again struggling with this old problem.
> Remember:
> I got a Patch from Gary Thomas for the "Linux exec", to
> respect the CRC failure.
>
> In an earlier mail i wrote:
> > > after applying the patch i rebuilt Redboot and tried it.
> > > But it doesn't work.
> > > So i looked into the patch. The concerned file should be
> > > pachages/hal/arm/arch/current/src/redboot_linux_exec.c.
> > > There i find an addon
> > > if (entry == (unsigned long)NO_MEMORY) {
> > > diag_printf("Can't execute Linux - invalid entry
> > address\n");
> > > return;
> > > }
> > > For me this doesn't look like a CRC check.
> > > Or did I make a mistake in building Redboot?
>
> Gary Thomas answered:
> > No - the "fis load" command will set 'entry_address' to 'NO_MEMORY' if
> > there is a CRC error. This code should catch that and cause
> > the 'exec'
> > command to fail. Of course, it can only do this if you do not specify
> > an entry point address.
> >
> > Exactly what does it do? Perhaps you could print the value of 'entry'
> > when it gets to this point.
>
> I added this print command (entry printed as %x) and got the following:
>
> RedBoot> fi loa kernel
> ** Warning - checksum failure. stored: 0x7ca3fe54, computed:
> 0xdde742c4
> RedBoot> e
> entry = 6000000
> Using base address 0x01008000 and length 0x000ba7c8
> Uncompressing Linux...........
>
> invalid compressed format (err=1)
>
> -- System halted
>
> This means, that the CRC check is working out. But the exec command doesn't
> respect this and is starting the defect kernel.
> I had expected, that the exec command wouldn't start the kernel after
> recognizing
> the CRC failure. Therefore the value of entry should have been 0xffffffff.
> Where does this value 0x6000000 come from?
It looks like the patch I gave you before was a little incorrect. Try
applying this change and let me know how it works.
n.b. I'm doing this a little blind as I currently have no ARM hardware
online.
--
Gary Thomas <gary@mlbassoc.com>
MLB Associates
[-- Attachment #2: diffs --]
[-- Type: text/x-patch, Size: 1686 bytes --]
Index: hal/arm/arch/current/src/redboot_linux_exec.c
===================================================================
RCS file: /misc/cvsfiles/ecos/packages/hal/arm/arch/current/src/redboot_linux_exec.c,v
retrieving revision 1.11
diff -u -5 -p -r1.11 redboot_linux_exec.c
--- hal/arm/arch/current/src/redboot_linux_exec.c 27 May 2004 13:22:07 -0000 1.11
+++ hal/arm/arch/current/src/redboot_linux_exec.c 7 Jul 2004 13:55:13 -0000
@@ -289,10 +289,15 @@ do_exec(int argc, char *argv[])
char line[8];
char *cmd_line;
struct tag *params = (struct tag *)CYGHWR_REDBOOT_ARM_LINUX_TAGS_ADDRESS;
extern char __tramp_start__[], __tramp_end__[];
+ // Check to see if a valid image has been loaded
+ if (entry_address == (unsigned long)NO_MEMORY) {
+ diag_printf("Can't execute Linux - invalid entry address\n");
+ return;
+ }
// Default physical entry point for Linux is kernel base.
entry = (unsigned long)CYGHWR_REDBOOT_ARM_LINUX_EXEC_ADDRESS;
base_addr = load_address;
length = load_address_end - load_address;
@@ -312,14 +317,10 @@ do_exec(int argc, char *argv[])
(void **)&ramdisk_addr, (bool *)&ramdisk_addr_set, "ramdisk_addr");
init_opts(&opts[5], 's', true, OPTION_ARG_TYPE_NUM,
(void **)&ramdisk_size, (bool *)&ramdisk_size_set, "ramdisk_size");
if (!scan_opts(argc, argv, 1, opts, 6, (void *)&entry, OPTION_ARG_TYPE_NUM, "[physical] starting address"))
{
- return;
- }
- if (entry == (unsigned long)NO_MEMORY) {
- diag_printf("Can't execute Linux - invalid entry address\n");
return;
}
// Set up parameters to pass to kernel
[-- Attachment #3: Type: text/plain, Size: 148 bytes --]
--
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
next prev parent reply other threads:[~2004-07-07 13:57 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-07 13:41 Winkler Andreas
2004-07-07 13:57 ` Gary Thomas [this message]
-- strict thread matches above, loose matches on Subject: below --
2004-07-07 14:54 Winkler Andreas
2004-07-07 14:57 ` Gary Thomas
[not found] <BCB494E8B7BF2D40B56D1164C67BC2A801B168BF@kher443a.ww004.siemens.net>
2004-05-28 14:41 ` Gary Thomas
2004-05-27 13:22 Winkler Andreas
2004-05-27 14:40 ` Gary Thomas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1089208626.3988.1227.camel@hermes \
--to=gary@mlbassoc.com \
--cc=andreas.aw.winkler@siemens.com \
--cc=ecos-discuss@ecos.sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).