public inbox for ecos-discuss@sourceware.org
 help / color / mirror / Atom feed
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

  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).