0

我使用 objcopy 从二进制文件创建了一个目标文件,如下所示:

objcopy -I binary -O elf32-little --rename-section .data=.text file.bin file.o

在链接器脚本部分之一中,我包含以下内容以将该文件放入该部分:

file.o (.text)

但我收到以下错误:

skipping incompatible file.o when searching for file.o

error: ld returned 1 exit status

我正在为 arm 微控制器开发,所以我相信文件格式“elf32-little”是正确的。

任何帮助深表感谢。

################################################# ################### 按照 INCBIN 路径更新:

我尝试了一种新方法,虽然我已经取得了一些进展,但还没有完全实现。

这是我的汇编文件:

            .section .text.audio_binary
            .global audio_start
    audio_start:
            .incbin "AudioData.bin"

            .global audio_start
    audio_end:
            .byte 0

        .global audio_size
audio_size:
        .int audio_start - audio_start

这是我得到的目标文件:

raw_audio_binary.o:     file format elf32-little

SYMBOL TABLE:
00000000 l    d  .text  00000000 .text
00000000 l    d  .data  00000000 .data
00000000 l    d  .bss   00000000 .bss
00000000 l    d  .text.audio_binary 00000000 .text.audio_binary
00069a78 l       .text.audio_binary 00000000 audio_end
00000000 l       .text.audio_binary 00000000 $d
00000000 l    d  .ARM.attributes    00000000 .ARM.attributes
00000000 g       .text.audio_binary 00000000 audio_start
00069a79 g       .text.audio_binary 00000000 audio_size

这是我的链接器脚本中的部分:

    .text_Flash3 : ALIGN(4)
    {
       FILL(0xff)
        *(.text.$Flash3*)
        *(.text.$AUDIO*)        *(.rodata.$Flash3*)
        *(.text.audio_binary*) /* audio binary */      
        *(.rodata.$AUDIO*)    } > AUDIO

出于某种原因,链接器不会将数据放在此部分(或任何部分)中。

有什么想法有什么问题吗?

如果这里有什么问题,我提前道歉,我是链接器脚本的新手,所以仍然理解它们......

4

1 回答 1

1

如果您有足够新的 GAS 版本,您可以使用它从二进制输入文件中使用.incbin指令创建目标文件:

        .section .rodata
        .globl input_wav
input_wav:
        .incbin "input.wav"
        .globl input_wav_size
input_wav_size:
        .long . - input_wav
于 2018-07-19T12:06:06.107 回答