首页 文章

如何将Linux内核Bin转换为ELF格式

提问于
浏览
3

我们有一个没有ELF头的Linux内核二进制文件,我们的引导加载程序将根据来自ELF头的计算加载内核映像(早期的QNX内核映像有ELF头),但由于我们的Linux内核映像没有一个ELF头,我们的引导加载程序拒绝将此内核映像加载到内存中 .

由于某些原因,我们没有更改引导加载程序代码的选项,因此我们唯一的选择是将ELF标头插入具有特定入口点的Linux BIN文件中 .

实现它的方法是什么?

1 回答

  • 11

    objcopy 命令能够使用适当的ELF头包装二进制文件 . 例如,以下命令将二进制文件 input.in 转换为i386目标文件 output.o

    objcopy -I binary -O elf32-i386 --binary-architecture i386 input.bin output.o
    

    将在 output.o 中定义三个符号: _binary_input_bin_start_binary_input_bin_end_binary_input_bin_size . 此外,输入文件的数据将位于 .data 部分 .

    然后,您需要使用 ld 和链接描述文件来设置适当的加载/虚拟/物理地址和入口点 . 以下是最小脚本:

    ENTRY(_start);
    
    SECTIONS
    {
        _start = 0x12000;
        . = 0x10000;
        .data : {
            *(.data)
        }
    }
    

    但可能需要进行大量修改,具体取决于您的引导加载程序的工作原理,物理内存布局,内核所在的位置,架构等 . 一旦调整,它就可以用于生成最终的ELF文件,如下所示:

    ld -m elf_i386 output.o -T binary.ld -o output.elf
    

相关问题