Matt,
if you're using i386 RPMs busybox is compiled in a i386 arch and you're
installing an i386 machine, so endianess should be the same...
Moreover looking in the busybox code it seems that it fails here:
if (f->header.e_ident[EI_CLASS] != ELFCLASSM
|| f->header.e_ident[EI_DATA] != ELFDATAM
|| f->header.e_ident[EI_VERSION] != EV_CURRENT
|| !MATCH_MACHINE(f->header.e_machine)) {
bb_error_msg("ELF file not for this architecture");
return NULL;
}
The correct macros should be the follwing:
/* x86 */
#if defined(__i386__)
#ifndef EM_486
#define MATCH_MACHINE(x) (x == EM_386)
#else
#define MATCH_MACHINE(x) (x == EM_386 || x == EM_486)
#endif
#define SHT_RELM SHT_REL
#define Elf32_RelM Elf32_Rel
#define ELFCLASSM ELFCLASS32
#define CONFIG_USE_GOT_ENTRIES
#define CONFIG_GOT_ENTRY_SIZE 4
#define CONFIG_USE_SINGLE
#endif
So one of the conditions above is false. But looking at one of your
modules (found in the initrd you posted) all seems correct:
# readelf -h ext3.o
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: REL (Relocatable file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0x0
Start of program headers: 0 (bytes into file)
Start of section headers: 114152 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 0 (bytes)
Number of program headers: 0
Size of section headers: 40 (bytes)
Number of section headers: 22
Section header string table index: 21
I mean:
- magic is ok
- elf class is ELF32
- elf data is 2's complement, little endian (so endianess seems ok)
- elf version is current (ok)
- and MATCH_MACHINE seems ok, since it is Intel 80386
Have you found other details to verify that the problem is really in the
endianess?
Regards,
-Andrea
Matt Jamison wrote:
> No, I'm not installing on x86_64, but I do think I have this problem beat :)
>
> The errors I've previously posted are due to Big Endian Little Endian
> detection in Busy Box 1.1.1.
>
> The problem is/was in the endian detection macros in platform.h. A lot of
> the
> binaries (insmod etc) in busy box check a #define "BB_LITTLE_ENDIAN" to
> decide Endianess at compile time. The issue is that BB_LITTLE_ENDIAN was
> never being defined in busybox 1.1.1.
>
> I did find the svn check in that fixed this issue the same way I did, and it
> is correct in the latest busy box versions:
>
> http://www.busybox.net/cgi-bin/viewcvs.cgi?rev=14654&view=rev
>
> Author: landley
> Date: Fri Mar 24 19:01:59 2006 PST (4 months, 1 week ago)
>
> Log Message:
> Define both big endian and little endian macros.
>
>
> Seems like the most appropriate fix is to upgrade to the latest busy box.
> Why
> this doesn't cause the same issues with 2.6 kernels, I'm not sure yet.
>
> Thanks,
>
> Matt
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Sisuite-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sisuite-users