Написание и компиляция программы для OpenWrt - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть встроенное устройство с MIPS arch, работающее под OpenWRT

Тип системы: MediaTek MT7628AN ver: 1 eco: 2
машина: WRTnode2P процессор: 0
Модель процессора: MIPS 24KEc V5.5

Я хочу скомпилировать небольшую программу на C через мой компьютер (Ubuntu)

#include <stdio.h>

int main(void){
    printf("HelloWorld");
    return 0;
}

Для компиляции я использую команду mips-linux-gnu-gcc

mips-linux-gnu-gcc -march=24kec -mabi=32 hello.c -o hello

Я отправляю привет программу на свое устройство и делаю chmod 755

chmod 755 hello

Когда я пытаюсь выполнить это, у меня появляется ошибка

root@openWrt:/www# ./hello
./hello: line 1: syntax error: unexpected word (expecting ")")

Я не понимаю, что происходит, я попробовал какую-то другую команду, чтобы скомпилировать это с аргументом: -EB или -EL или нет, -static или нет, -mabi = 32 и нет, но у меня та же проблема.

Кто-нибудь мне поможет?

Спасибо

[ОБНОВЛЕНИЕ]

Я посылаю команду файла в существующий файл, и это результат

fw3: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked, interpreter /lib/ld., for GNU/Linux 3.2.0, stripped

поэтому я скомпилирую свою программу с помощью этой команды

mipsel-linux-gnu-gcc -march=24kec -mips32r2  -mips16   hello.c -o hello

теперь у меня есть файл с результатом команды

hello: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld., for GNU/Linux 3.2.0, BuildID[sha1]=cd12319441c530606d52d96478719b06a7b215a7, not stripped

Теперь я читаю ELF моей удаленной программы

ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 01 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:                       1
  Type:                              EXEC (Executable file)
  Machine:                           MIPS R3000
  Version:                           0x1
  Entry point address:               0x402c40
  Start of program headers:          52 (bytes into file)
  Start of section headers:          78592 (bytes into file)
  Flags:                             0x74001005, noreorder, cpic, o32, mips16, mips32r2
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         10
  Size of section headers:           40 (bytes)
  Number of section headers:         31
  Section header string table index: 30

и это моя команда hello program readelf

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:                           MIPS R3000
  Version:                           0x1
  Entry point address:               0x4005c0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          6700 (bytes into file)
  Flags:                             0x74001007, noreorder, pic, cpic, o32, mips16, mips32r2
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         11
  Size of section headers:           40 (bytes)
  Number of section headers:         33
  Section header string table index: 30

Существует две версии ABI различий, а во флагах - рис.

Если я пытаюсь запустить программу hello, у меня появляется эта ошибка

hello: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory

Я пытаюсь добавить аргумент -static, но у меня появляется эта ошибка при запуске моей привет программы

Illegal instruction

Я всегда застрял с этой проблемой.

...