ARM objcopy приводит к пустому двоичному файлу

Как заставить arm-none-eabi-objcopy скопировать/перевести мой .axf файл в .bin подходящий для прошивки на устройство с lm4tools?

У меня есть файл ~20 КБ .axf, скомпилированный и связанный с arm-none-eabi-*. Кому интересно, это Stellaris Launchpad.

Я пытаюсь изменить пример, предоставленный с проектом stellaris-launchpad-template-gcc, для компиляции с код С++. Мне удалось заставить его создать файл .axf в формате elf32-littlearm (согласно файлу .lst), однако, когда я пытаюсь сделать

arm-none-eabi-objcopy -v -O binary main.axf foo.bin

чтобы перевести его в программируемый файл, выходной файл .bin имеет размер 0 байт. Этот вопрос описывает аналогичную проблему. Я уверен, что файл .axf готов, так почему же мой файл .bin ничем не заполняется? Если я уберу -O binary, файл скопируется нормально. Каталог доступен для записи, и все разрешения в порядке. Я пытался искать как в SO, так и в остальной части Интернета с различными терминами, но все они не принесли никакой пользы. Вроде ни у кого раньше не было такой проблемы.

Запуск arm-none-eabi-objdump -D main.axf дает дамп файла на ассемблере:

main.axf:     file format elf32-littlearm


Disassembly of section .debug_info:

00000000 <_end_text>:
       0:   00000082    andeq   r0, r0, r2, lsl #1
       4:   00000002    andeq   r0, r0, r2
       8:   01040000    mrseq   r0, (UNDEF: 4)
       c:   00000057    andeq   r0, r0, r7, asr r0
      10:   00000c04    andeq   r0, r0, r4, lsl #24
      14:   00002300    andeq   r2, r0, r0, lsl #6
    ...
      28:   08010200    stmdaeq r1, {r9}
      2c:   00000015    andeq   r0, r0, r5, lsl r0
      30:   00410103    subeq   r0, r1, r3, lsl #2
      34:   32010000    andcc   r0, r1, #0
      38:   00000048    andeq   r0, r0, r8, asr #32
    ...
      48:   69050404    stmdbvs r5, {r2, sl}
      4c:   0500746e    streq   r7, [r0, #-1134]    ; 0x46e
      50:   00000001    andeq   r0, r0, r1
      54:   46430100    strbmi  r0, [r3], -r0, lsl #2
    ...

Это правильно, или я даже неправильно компилирую, потому что это какой-то ассемблер?

Немного информации о файле .axf:

ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           ARM
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          20372 (bytes into file)
  Flags:                             0x5000000, Version5 EABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         0
  Size of section headers:           40 (bytes)
  Number of section headers:         14
  Section header string table index: 11

После запуска arm-none-eabi-readelf -lS main.axf заголовки программ не возвращаются:

There are 14 section headers, starting at offset 0x4f94:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .debug_info       PROGBITS        00000000 000034 0019a6 00      0   0  1
  [ 2] .debug_abbrev     PROGBITS        00000000 0019da 0005ad 00      0   0  1
  [ 3] .debug_loc        PROGBITS        00000000 001f87 001796 00      0   0  1
  [ 4] .debug_aranges    PROGBITS        00000000 003720 000088 00      0   0  8
  [ 5] .debug_ranges     PROGBITS        00000000 0037a8 000130 00      0   0  1
  [ 6] .debug_line       PROGBITS        00000000 0038d8 00077d 00      0   0  1
  [ 7] .debug_str        PROGBITS        00000000 004055 000aa8 01  MS  0   0  1
  [ 8] .comment          PROGBITS        00000000 004afd 00003a 01  MS  0   0  1
  [ 9] .ARM.attributes   ARM_ATTRIBUTES  00000000 004b37 000039 00      0   0  1
  [10] .debug_frame      PROGBITS        00000000 004b70 000388 00      0   0  4
  [11] .shstrtab         STRTAB          00000000 004ef8 00009a 00      0   0  1
  [12] .symtab           SYMTAB          00000000 0051c4 000200 10     13  18  4
  [13] .strtab           STRTAB          00000000 0053c4 0000e0 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

There are no program headers in this file.

person Bojangles    schedule 23.11.2012    source источник
comment
@dwelch Это для чипа ARM, поэтому я очень сомневаюсь, что он станет файлом размером в несколько ГБ, и открытие файла в vim дает пустой файл.   -  person Bojangles    schedule 24.11.2012
comment
Нет ни заголовков программ, ни секций текста или данных, так что objcopy в порядке, файл .axf построен неправильно.   -  person chill    schedule 24.11.2012
comment
@chill Это очевидно. Спасибо за подсказки. Я думаю, что открою новый вопрос, поскольку создание файла .axf выходит за рамки этого.   -  person Bojangles    schedule 24.11.2012
comment
Вы используете этот скрипт компоновщика? github.com/scompo/stellaris-launchpad-template- gcc/блоб/мастер/   -  person chill    schedule 24.11.2012
comment
Да, но я изменил пару битов в Makefile для поддержки файлов C++. Должен ли я опубликовать Makefile здесь?   -  person Bojangles    schedule 24.11.2012
comment
Нет нужды. Этот скрипт компоновщика использует такие имена, как .text.something, .data.something для разделов ввода, которые пропускают разделы .text, .data, .rodata, .bss.   -  person chill    schedule 24.11.2012
comment
Попробуйте этот ideone.com/HLfMG3   -  person chill    schedule 24.11.2012
comment
Вы уверены, что это правильная ссылка? Ничего не изменилось по сравнению со сценарием компоновщика, который я сейчас использую.   -  person Bojangles    schedule 24.11.2012
comment
Да, это правильно, я просто удалил некоторые ., например. *(.text.*) стал *(.text).   -  person chill    schedule 24.11.2012
comment
Упс, я этого не видел. Спасибо за ваши усилия, однако файл .axf по-прежнему не содержит заголовков программ. Я действительно в недоумении, что теперь делать.   -  person Bojangles    schedule 24.11.2012
comment
Но теперь в файле .axf есть .text и т. д. разделов, а objcopy создает непустой бинарник, верно? Если нет, то других идей нет :)   -  person chill    schedule 24.11.2012
comment
К сожалению, бинарный файл все еще пуст. Я открою еще один вопрос о том, что скрипт компоновщика не работает. Большое спасибо за ваши усилия, @chill!   -  person Bojangles    schedule 25.11.2012