Skip to content

kernel build not 32 bit clean #22

@mcmechan

Description

@mcmechan

The kernel compile uses 64 bit addresses when building on a 32 bit host either on the ci20 itself or on a x86 32 bit host. When built on a 64 bit host it throws away the high 32 bits of the load address, but on both mips and x86 it will stop processing in the mkimage strtoul at one 32 bit word's worth of data which is that annoying freeze or crash where it trys to uncompress to address 0xffffffff

Booting kernel from Legacy Image at 88000000 ...
Image Name: Linux-3.18.3+
Image Type: MIPS Linux Kernel Image (gzip compressed)
Data Size: 3816747 Bytes = 3.6 MiB
Load Address: ffffffff <=== Problem
Entry Point: 805bdc10
Verifying Checksum ... OK
Uncompressing Kernel Image ...

and I have not found a way to set it in u-boot. Also you can't change the 0xffffffff80001000 in arch/mips/jz47[48]0/Platform because it is being used as some sort of magic flag and without the 0xffffffff part it doesn't know how to build a uImage. Currently I have patched mkimage to see if that fixes it, it took 1 hour to compile with make -j3 on the ci20.

Alas markdown does not seem to have a way to turn itself off so I can't include the two line patch so here is a sed script to do it instead.

sed -i "s/strtoul /strtoull /" tools/mkimage.c

The kernel really should be fixed to be 32 bit clean, magiclly dropping the high bits of the load address seems way out there.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions