最近,一些发行版开始将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
感谢您的帮助!
答案 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图像?