Unrecognized machine ID with too large initramfs ... why ?

Hi All,

I am a bit disappointed tonight… My BBB is working well for a while, I am playing a bit around the kernel and especially some features that I want to add in the initramfs before doing the switch_root.

My setup is :

  • Kernel 3.8 from the github repo

  • default configuration

  • linaro toolchain : gcc-linaro-arm-linux-gnueabihf-4.8-2013.06_linux

  • a basic initramfs

  • U-boot is the built-in revision 2013.04-dirty (May 20 2013 - 14:30:06)

  • kernel and dtb are placed on the SD card with basic uEnv.txt

Everything is working, kernel can boot, initramfs is mounted first, then filesystem is mounted and switch_root, I can login etc etc…

At this point, the initramfs was a cpio.gz file with a size of about 2.2MB. Total uImage LZO compressed was abount 6.3MB.

Then I added some libs in the initramfs and some scripts to add some custom features, the uImage was then about 8MB.

I was never able to load this kernel image !! I always get the following message :

Starting kernel …

Hi rh_ ,

Thanks I will try to look around the optargs and atags parsing…

I don’t want to but I need this to work :frowning:

"too large initramfs" your not by chance over writing the memory used
for the device tree binary?

Regards,

It seems that my issue is due to the initramfs size.

But I checked the address used to load the kernel and device tree and their sizes and it should not overlap.

What is strange is that the bad machine code I have (0x00000e05) is the same as other post that I found on the web. But they were related to old u-boot…

I tried to change my optargs to very minimal, only console=/dev/ttyO0 but same issue.

Now I will put some debug messages in the code to try to compare the values between small and large initramfs

Interesting…

I find that the machine ID is checked in 2 steps in kernel/setup.c function setup_arch()

First it tries to use the device tree by calling setup_machine_fdt() in devtree.c

But if this function return a NULL pointer, it will call setup_machine_tags() in kernel/atags_parse.c. This is the case with a large initramfs is used…

It should not be different… that means maybe that there is something wrong with kernel loading that overwrites the device tree…

Ok this one is solved !!

This was overlapping in fact… but only after kernel extraction…

zImage is about 7MB but vmlinux is 34MB !

So I need to load the device tree at address 0x83000000 or bigger… Otherwise it is overwritten after kernel extraction.

I am wondering why not load first the device tree then the kernel to let the kernel take as many place as it wants to extract itself…

Definitely I don’t like this device tree system so much… I need to learn more about, maybe I will be convinced

Thanks for the persons that take time to answer me, I will post the environment variables soon