我正在使用 Codesourcerys GCC arm EABI 编译器为 Beagleboard(ARM Cortex A8)编译裸机软件(无操作系统)。现在它编译成一个二进制或图像文件,我可以用 U-Boot 引导加载程序加载它。
问题是,我可以在运行时动态地将 hexdata 加载到内存中(以便我可以将其他图像文件加载到内存中)吗?我可以使用 gcc objcopy 生成软件的 hexdump。我可以使用这些信息并将其加载到适当的地址吗?.text .data .bss 部分的所有地址是否会按照链接描述文件中的说明正确加载?
生成的 hexdata 输出
$(OBJCOPY) build/$(EXE).elf -O binary build/$(EXE).bin
od -t x4 build/$(EXE).bin > build/$(EXE).bin.hex
看起来像这样:
0000000 e321f0d3 e3a00000 e59f1078 e59f2078
0000020 e4810004 e1510002 3afffffc e59f006c
0000040 e3c0001f e321f0d2 e1a0d000 e2400a01
0000060 e321f0d1 e1a0d000 e2400a01 e321f0d7
... 等等。
是否像将每行的 20 个字节加载到所需的内存地址一样简单,只需将 PC 分支到正确的地址,一切都会正常工作?我是不是忘记了什么?