Xen Zynq Distribution Support Forums
Question on format of dom0 kernel image in XZD distribution - Printable Version

+- Xen Zynq Distribution Support Forums (http://xzdforums.dornerworks.com)
+-- Forum: General Xilinx Support (http://xzdforums.dornerworks.com/forumdisplay.php?fid=1)
+--- Forum: Public Support (http://xzdforums.dornerworks.com/forumdisplay.php?fid=6)
+--- Thread: Question on format of dom0 kernel image in XZD distribution (/showthread.php?tid=655)

Question on format of dom0 kernel image in XZD distribution - brettstahlman - 03-14-2017

Thus far, I've had no need to rebuild the default linux kernel that ships with XZD:


The linux "file" utility calls this file "data". I have another dom0 kernel I'm attempting to boot (unsuccessfully), which the file utility reports as...
"MS-DOS executable, MZ for MS-DOS"

As best I can tell, the latter image is an objcopy'd version of the uncompressed linux kernel executable "vmlinux".

When I attempt to boot using this non-XZD kernel file, the boot simply hangs at the end of the Xen kernel load, at the point where the linux kernel would normally start booting. Clearly, though the files are both named "Image", they are different formats, and apparently, whereas the one included in XZD is suitable for loading at 0x80000, the one corresponding to vmlinux is not. What is the format of dist/images/linux/Image? How is it built? Any light you can shed on what format(s) the Xen kernel can handle would be greatly appreciated. Also appreciated would be links to any relevant documentation.

*** Update ***
I've noticed another Image file in the XZD distribution whose format is similar to the one I've been unable to boot:


This image also has the "MS-DOS executable, MZ for MS-DOS" format, and is significantly larger than the "<project>/images/linux/Image" created by petalinux-build. I suspect that this file is meant to be loaded as an executable from disk, whereas the smaller "data" Image is meant to be loaded directly to RAM by the boot script, and eventually jumped into by the Xen kernel. If so, how can I create the smaller "data" file (the one suitable for load from boot script) from vmlinux? I'm thinking it involves objcopy, but even when I run petalinux-build with verbose option (-v), the full objcopy command doesn't appear in the output, so I can't tell which options are required...

*** Update ***
I've now used objdump to examine both source vmlinux images, and I think I can see why the Image produced from one boots and the other doesn't. The one that boots has an unconditional branch at the start of the _text section (0x80000) to section <stext> (0x80040). The vmlinux whose corresponding Image doesn't boot has the PE/COFF headers at the beginning, and the <stext> section at a significantly higher address (after all the headers and a bunch of NOPs). What exactly is the Xen kernel expecting to find at 0x80000? Do I need to build a vmlinux without the PE/COFF headers, or should I just modify my build process to strip certain header sections out?