1
votes

recently some distributions started to pack the vmlinuz file together with the initrd in an "ELF-Boot" imagine that arguably has some advantages. Well, I need to compile a new kernel using the old format for the vmlinuz file. Does anyone know how can I achieve this? I'm using Oracle Enterprise Linux and if I run, for example, "make bzImage", the result is an ELF file that I cannot use.

Alternatively, is there a way to unpack an ELF-Boot image and extract the conventional vmlinuz file?

To clarify, what I get now when I do a "file /boot/vmlinuz" is:

vmlinuz: ELF 64-bit LSB shared object, AMD x86-64, version 1, stripped

What I want to obtain, however, is something like:

vmlinuz: Linux/x86 Kernel, Setup Version 0x20a, bzImage, Version 2.6.37, Version 2.6.37-40, RO-rootFS, root_dev 0x301, swap_dev 0x4, Normal VGA

Thanks for any help!

2

2 Answers

3
votes

1.Modify the Makefile and add -O binary to the objcopy cmd, such as follow:

in linux-3.7.4/arch/x86/boot/compressed/Makefile:

OBJCOPYFLAGS_vmlinux.bin := -R .comment -S **-O binary**

    $(obj)/vmlinux.bin: vmlinux FORCE 

        $(call if_changed,objcopy)

2.Comment parse_elf, such as follow:

in linux-3.7.4/arch/x86/boot/compressed/misc.c

asmlinkage void decompress_kernel(...)

{

    ...

    decompress(input_data, input_len, ...);

    /* parse_elf(output); */

    ...

}
1
votes

Linux uses ELF kernel images for quite some time, this is not some recent development. So why do you think you can't use a ELF image?