What is the purpose of parse_elf() in misc.c
Hi All,
In looking at booting a raw x86 kernel image, I discovered that the compressed image in bzImage is actually an ELF image created with:
objcopy -R .comment -S vmlinux
After decompressing the image, the parse_elf() function in misc.c copies the sections from the ELF image (there are 3 sections, only 2 are marked PT_LOAD) into their final resting place in memory. This got me to thinking, why not use:
objcopy -O binary -R .comment -S vmlinux
I wrote a little stand-alone parse_elf() program, and lo-and-behold, the outputs are identical. So, in theory, if bzImage contained a raw binary, it could be decompressed directly to the target address.
Now there is some adjustment in parse_elf() for relocatable kernels, but I can't but think that this could be simply catered for in the decompression target address
Surely this would speed up kernel loading by removing the additional copy that parse_elf() introduces
Or am I missing something significant?
Regards,
Graeme
Hi Graeme....
Quoted 3 lines · Graeme Russ
I wrote a little stand-alone
parse_elf()program, and lo-and-behold, the outputs are identical. So, in theory, if bzImage contained a raw binary, it could be decompressed directly to the target address.
I find your experiment quite interesting. After looking at parse_elf
(http://lxr.linux.no/#linux+v3.1.4/arch/x86/boot/compressed/misc.c#L276),
I guess it could be codes introduced long time before objcopy support "binary" form. And since then is rarely touched again.
But maybe it's left there in case there is a platform that doesn't have objcopy version that supports "binary" form conversion. So I think it's more about portability issue.
Signature · 7 lines
regards, Mulyadi Santosa Freelance Linux trainer and consultant blog: the-hydra.blogspot.com training: mulyaditraining.blogspot.com