Ami*_*mar 4 elf linux-kernel bootloader
我们有一个没有ELF头的Linux内核二进制文件,我们的引导加载程序将根据来自ELF头的计算加载内核映像(早期的QNX内核映像有ELF头),但由于我们的Linux内核映像没有一个ELF头,我们的引导加载程序拒绝将此内核映像加载到内存中.
由于某些原因,我们没有更改引导加载程序代码的选项,因此我们唯一的选择是将ELF标头插入具有特定入口点的Linux BIN文件中.
实现它的方法是什么?
dav*_*idg 13
该objcopy命令能够使用适当的ELF头包装二进制文件.例如,以下命令将二进制文件input.in转换为i386对象文件output.o:
objcopy -I binary -O elf32-i386 --binary-architecture i386 input.bin output.o
Run Code Online (Sandbox Code Playgroud)
三个符号将被定义output.o:_binary_input_bin_start,_binary_input_bin_end和_binary_input_bin_size.此外,输入文件的数据将在一个.data部分中.
然后,您需要使用ld链接描述文件来设置适当的加载/虚拟/物理地址和入口点.以下是最小脚本:
ENTRY(_start);
SECTIONS
{
_start = 0x12000;
. = 0x10000;
.data : {
*(.data)
}
}
Run Code Online (Sandbox Code Playgroud)
但可能需要进行大量修改,具体取决于您的引导加载程序的工作原理,物理内存布局,内核所在的位置,架构等.一旦调整,它就可以用于生成最终的ELF文件,如下所示:
ld -m elf_i386 output.o -T binary.ld -o output.elf
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11000 次 |
| 最近记录: |