2011-02-25 105 views
1

最近,一些发行版开始将vmlinuz文件与initrd一起打包到“ELF-Boot”想象中,这可以说有一定的优势。那么,我需要使用vmlinuz文件的旧格式编译新内核。有谁知道我怎么能做到这一点?我正在使用Oracle Enterprise Linux,如果我运行“make bzImage”,则结果是我不能使用的ELF文件。将Linux内核编译为非ELF

另外,有没有办法解压缩ELF启动镜像和提取传统的vmlinuz文件?

为了澄清,我现在拿到的时候我做了一个 “文件的/ 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

感谢您的帮助!

回答

1

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

+0

我使用clusterworx来管理群集节点。对于要与clusterworx一起使用的映像,当执行“file vmlinuz”时,应该得到如下所示的内容:“vmlinuz:Linux/x86内核,安装程序版本0x20a,bzImage,版本2.6.37,版本2.6.37-40,RO-rootFS ,root_dev 0x301,swap_dev 0x4,Normal VGA“,但我得到的是:”vmlinuz:ELF 64位LSB共享对象,AMD x86-64,版本1,剥离“。 – Trixl 2011-02-26 16:24:43

+1

那么,在编译内核之后,内核映像不是您最终获得的内核源代码目录中的vmlinuz文件。这是文件arch/$ {YOUR_ARCHITECTURE}/boot/bzImage – datenwolf 2011-02-26 17:18:48

+0

不幸的是,我可以在源代码树(vmlinuz,bzImage等)中找到的所有候选文件文件都报告为ELF ... – Trixl 2011-02-27 10:31:05

1

1.Modify生成文件,并添加-O二进制到objcopy把CMD,例如如下:

在linux-3.7.4

/拱/ 86 /引导/压缩/生成文件:

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

    $(obj)/vmlinux.bin: vmlinux FORCE 

     $(call if_changed,objcopy) 

2.Comment parse_elf,例如如下:

在linux-3.7.4

/拱/ 86 /引导/压缩/ misc.c

asmlinkage void decompress_kernel(...) 

{ 

    ... 

    decompress(input_data, input_len, ...); 

    /* parse_elf(output); */ 

    ... 

} 
+0

你的代码似乎有点格式不正确,也许你可能会尝试改善它。 – Samoth 2013-10-28 08:51:43