RE: [jornada] A faster alternative to file2hex

From: Christopher Hoover <ch_at_murgatroid.com>
Date: Mon, 24 Jun 2002 11:44:56 -0700

It is much, must faster to use objcopy to convert the file to a .o
directly and then just link the image in.

Better yet skip this cibd stuff and use rmk's bootp support; it is part
of the standard kernel.

-ch

> -----Original Message-----
> From: jornada-admin_at_handhelds.org
> [mailto:jornada-admin_at_handhelds.org] On Behalf Of Peter Gerwinski
> Sent: Monday, June 24, 2002 11:37 AM
> To: jornada_at_handhelds.org
> Subject: [jornada] A faster alternative to file2hex
>
>
> Hi, everyone stuck with CIBD!
>
> (CIBD = Compiled-In Block Device. It is needed to boot Linux
> on platforms where the bootloader has limited control over the system
> - such as hpcboot started from MS Windows CE on the HP Jornada
> 710/720.)
>
> I observed that the way a CIBD is compiled into the Linux
> kernel is way too slow for doing serious debugging with it.
> The following is faster:
>
> - Instead of running `makeh', save the following two lines as the
> contents of `drivers/block/cibd.h':
>
> static unsigned char cibd_fs[2 * 1024 * 1024] =
> { 3, 1, 4, 1, 5, 9, 2, 6 };
>
> Compiling this will result in an `rc.o' that has 2 MB of free
> space in it, starting with some "magic" bytes.
>
> - Now, use my little program `file2o' to copy the disk image
> directly into `rc.o':
>
> file2o < /tmp/linux-2048.initrd-20020624
>
> (I am appending the C source of `file2o' below.)
>
> - After that, compile the Linux kernel.
>
> For whatever reason, I did not succeed to squeeze anything
> bigger than 2 MB into the CIBD. If someone can solve this
> problem, it would make booting Linux on the Jornada _much_ simpler!
>
> Whenever the disk image (/tmp/linux-2048.initrd-20020624 in
> the example above) changes, it is necessary to re-compile
> `rc.o' and repeat the procedure above. If someone includes it
> into the Makefile, it would be better.
>
> Have fun,
>
> Peter
>
> 8< ---- file2o.c ---------------------------------------------------
>
> /* file2o.c - copy standard output into a `.o' file
> * Copyright (C) 2002 by Peter Gerwinski <peter_at_gerwinski.de>
> * This program is free software under the GNU GPL, version 2
> or higher. */
>
> #include <stdio.h>
>
> #define LMAX 8
>
> int main (void)
> {
> FILE *rd = fopen ("rd.o", "r+");
> char t0[LMAX], t1[LMAX] = { 3, 1, 4, 1, 5, 9, 2, 6 }, c;
>
> do
> {
> int l = 0;
> if (fread (&t0[0], 1, 1, rd) == 0)
> {
> fprintf (stderr, "pattern not found\n");
> return 1;
> }
> while (l < LMAX - 1 && t0[l] == t1[l])
> {
> l++;
> if (fread (&t0[l], 1, 1, rd) == 0)
> {
> fprintf (stderr, "pattern not found\n");
> return 1;
> }
> }
> }
> while (strncmp (t0, t1, LMAX) != 0);
> fseek (rd, -LMAX, SEEK_CUR);
> while (fread (&c, 1, 1, stdin) != 0)
> fwrite (&c, 1, 1, rd);
> fclose (rd);
> return 0;
> }
> _______________________________________________
> jornada mailing list
> jornada@handhelds.org http://handhelds.org/mailman/listinfo/jornada
>
Received on Mon Jun 24 2002 - 18:44:32 EDT

This archive was generated by hypermail 2.2.0 : Mon Jul 25 2005 - 17:26:16 EDT