yeah, how to create an initrd was not explained because i thought: the ones who get that far, will know it

yeah that strange jump. i dont understand where and how the context is changing.
the registers in the struct get set up, but where now exactly those take effect, i dont know.
guess this is somewhere in scheduler, but didnt find it yet.
that the kernel is XIP was just a simplicity issue.
else the kernel had to load itself to its target position and that didnt work well.
when using zImage it showed a really weird behavior - i couldnt emulate it in my emu and on camera it simply hung.
its also not clear if zImage works for NOMMU kernels. at least i couldnt confirm that it does.
might be a different bahavior now, as maaany things in memory map changed since i tried that.
memory setup:
0x00000000 - 0x00000040 reset vectors (first canon, updated by bootloader, then linux')
0x00000100 - 0x00008000 ATAGS (parameters for kernel)
0x00008000 - 0x00008008 bootloader interface (function pointers for emulating text console, as linux has no fb driver yet)
0x00008000 void (*print_line)(uint32_t color, uint32_t scale, char *txt, uint32_t count);
0x00008004 void (*print_char)(void); /* pritns the character stored in the word at 0x00008008 */
0x00008008 uint32_t char_to_print
0x00008000 - 0x00698658 relocated bootloader (first 12 bytes get overwritten with function pointers)
0x0072D100 - 0x00800000 YUV/bitmap buffers
0x0072D100 disp_yuvbuf
0x007D5D00 disp_bmpbuf
0x00800000 - 0x01000000 linux kernel
0x01000000 - 0x10000000 via ATAGs reported RAM
at 0x01000000 - (sizeof(initrd)) the bootloader places the initrd image and reports that via ATAGs