将Linux内核编译为非ELF

时间:2011-02-25 20:15:59

标签: linux linux-kernel elf

最近,一些发行版开始将vmlinuz文件和initrd打包在一个“ELF-Boot”中,这可以说有一些优势。好吧,我需要使用vmlinuz文件的旧格式编译新内核。有谁知道我怎么能做到这一点?我正在使用Oracle Enterprise Linux,如果我运行,例如“make bzImage”,结果是一个我无法使用的ELF文件。

或者,有没有办法解压缩ELF-Boot图像并提取传统的vmlinuz文件?

澄清一下,当我执行“file / boot / vmlinuz”时,我现在得到的是:

vmlinuz:ELF 64位LSB共享对象,AMD x86-64,版本1,剥离

然而,我想要获得的是:

vmlinuz:Linux / x86内核,安装版本0x20a,bzImage,版本2.6.37,版本2.6.37-40,RO-rootFS,root_dev 0x301,swap_dev 0x4,普通VGA

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

1.修改Makefile并将-O二进制文件添加到objcopy cmd,如下所示:

在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.评论 parse_elf ,例如关注:

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

asmlinkage void decompress_kernel(...)

{

    ...

    decompress(input_data, input_len, ...);

    /* parse_elf(output); */

    ...

}

答案 1 :(得分:1)

Linux使用ELF内核映像已有一段时间了,这不是最近的一些开发。那么为什么你认为你不能使用ELF图像?