Кросс-компиляция для ARM926EJ-Sid

Моя конечная цель - скомпилировать rtorrent для моего NAS, который представляет собой Synology DS107+. Чтобы ознакомиться с кросс-компиляцией, я хотел скомпилировать helloworld. Это уже оказалось большим препятствием для новичка, как и я.

В результате выполнения программы возникает ошибка сегментации. Я использовал gcc-arm-none-eabi для компиляции в Ubuntu x84_64.

Какие инструменты мне нужны для компиляции программы для цели? Я также проконсультировался "Кросс-компиляция из linux в ARM-ELF (ARM926EJ-S/MT7108)" и нуждался в обходном пути, потому что gcc жаловался, что _exit не объявлен.

Ниже приводится более подробная информация:

/ Proc/ CPUInfo

Processor   : ARM926EJ-Sid(wb) rev 0 (v5l)
BogoMIPS    : 499.71
Features    : swp half thumb fastmult vfp edsp 
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part    : 0x926
CPU revision    : 0
Cache type  : write-back
Cache clean : cp15 c7 ops
Cache lockdown  : format C
Cache format    : Harvard
I size      : 32768
I assoc     : 1
I line length   : 32
I sets      : 1024
D size      : 32768
D assoc     : 4
D line length   : 32
D sets      : 256

Hardware    : MV-88fxx81
Revision    : 0000
Serial      : 0000000000000000

uname -a

Linux DiskStation 2.6.15 #1637 Sat May 4 05:59:19 CST 2013
armv5tejl GNU/Linux synology_88f5281_107+

dmesg (фрагменты из головы, которые кажутся мне информативными)

Linux version 2.6.15 (root@build2) (gcc version 3.4.3 (CSL 2005Q1B) (Marvell 2006Q3))
#1637 Sat May 4 05:59:19 CST 2013
CPU: ARM926EJ-Sid(wb) [41069260] revision 0 (ARMv5TEJ)
Machine: MV-88fxx81
...
Synology Hareware Version: DS107v20
Memory policy: ECC disabled, Data cache writeback
...
CPU0: D VIVT write-back cache
CPU0: I cache: 32768 bytes, associativity 1, 32 byte lines, 1024 sets
CPU0: D cache: 32768 bytes, associativity 4, 32 byte lines, 256 sets

readelf -h busybox (извлекается из устройства)

ELF Header:
Magic:   7f 45 4c 46 01 01 01 61 00 00 00 00 00 00 00 00 
Class:                             ELF32
Data:                              2's complement, little endian
Version:                           1 (current)
OS/ABI:                            ARM
ABI Version:                       0
Type:                              EXEC (Executable file)
Machine:                           ARM
Version:                           0x1
Entry point address:               0x8de0
Start of program headers:          52 (bytes into file)
Start of section headers:          1319468 (bytes into file)
Flags:                             0x602, has entry point, GNU EABI, software FP, VFP
Size of this header:               52 (bytes)
Size of program headers:           32 (bytes)
Number of program headers:         3
Size of section headers:           40 (bytes)
Number of section headers:         20
Section header string table index: 19

РЕДАКТИРОВАТЬ: Командная строка

Я использовал варианты -march=armv5te -mtune=arm926ej-s -mno-long-calls -msoft-float -static, Я также экспериментировал с опущенным маршем или заменой mtune на mcpu. Без статики это говорит не найдено. Также попробовал -mfpu=vfp и armel бинарные пакеты Debian. Например, busybox-static, который отлично работает на моем HTC Desire S (armv7l), также приводит к segfault.

С помощью:

  • arm-linux-gnueabi-gcc → Ошибка сегментации
  • arm-none-eabi-gcc → Ошибка сегментации (или Неверная инструкция, но редко, не могу сказать, когда)
  • Еще не пробовал CodeBench.

Код, который я пробовал:

# include <stdlib.h>

void _exit (int x) { while (1) {} } // only needed for arm-none-eabi-gcc

int main (int argc, char* argv[]) {
    return 47;
}

0 ответов

Другие вопросы по тегам