-
Notifications
You must be signed in to change notification settings - Fork 23
Description
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.