LINUX.ORG.RU

Не получается слинковать arm объектник в бинарный файл

 , ,


0

1

Линкую вот так

arm-linux-gnueabihf-ld -T ldscript  --oformat binary --strip-all sh.o -o sh.bin
Получаю ошибку
arm-linux-gnueabihf-ld: error: Cannot change output format whilst linking ARM binaries.

ldscript:

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
  .text 0x0 : AT ( 0 ) {
    *(.text)
    *(.text*)
  }
}

Объектный файл получаю через

arm-linux-gnueabihf-as sh.S -o sh.o

Код на ассемблере (на всякий случай)

.globl _start

.text

_start:
.rept  10
    nop
.endr

Обычным способом через arm-linux-gnueabihf-ld sh.o -o sh.elf оно вполне линкуется, но я хочу линковать в бинарник своим скриптом. Я конечно могу воспользоваться objcopy, но хочется сделать через ld

★★★★★

Ответ на: комментарий от alexru

1. Используй arm-linux-gnueabihf-gcc как линкер.

Зачем? Что мне это даст?

2. Получай бинарник как все - с помощью objcopy.

А если мне надо свой особый формат бинарника сделать, вручную закодировать свой собственный заголовок, отличный от ELF и прочих, которые умеет делать ld?

SZT ★★★★★ ()
Ответ на: комментарий от SZT

Зачем? Что мне это даст?

Проще в использовании на больших проектах с библиотеками.

А если мне надо свой особый формат бинарника сделать, вручную закодировать свой собственный заголовок, отличный от ELF и прочих, которые умеет делать ld?

Пиши в ELF свой формат, а потом objcopy сделает из него бинарник, обрезав заголовки и не нужные секции.

alexru ★★★★ ()
Ответ на: комментарий от alexru

Например:

$ cat hdr.s
.section .hdr;.long 0xe5fbff //http://mpgedit.org/mpgedit/mpeg_format/MP3Format.html
.text;.globl _start;_start:.rept 4;.long 4+.-_start;.endr
$ cat hdr.lds
SECTIONS{.text 0:AT(0){*(.hdr);*(.text*)}}
$ arm-none-eabi-as hdr.s -o hdr.o;arm-none-eabi-ld -Thdr.lds hdr.o -o hdr;arm-none-eabi-objcopy -O binary hdr
$ file hdr
hdr: MPEG ADTS, layer III, v1, 320 kbps, 48 kHz, Stereo
$ arm-none-eabi-objdump -marm -bbinary -D hdr

hdr:     file format binary


Disassembly of section .data:

00000000 <.data>:
   0:   00e5fbff        strdeq  pc, [r5], #191  ; 0xbf  ; <UNPREDICTABLE>
   4:   00000004        andeq   r0, r0, r4
   8:   00000008        andeq   r0, r0, r8
   c:   0000000c        andeq   r0, r0, ip
  10:   00000010        andeq   r0, r0, r0, lsl r0
htop ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.