2011-02-25 82 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