I have a embedded device with MIPS arch working under OpenWRT
system type: MediaTek MT7628AN ver:1 eco:2
machine: WRTnode2P processor: 0
cpu model: MIPS 24KEc V5.5
I want to compile compile a small program in C through my computer (ubuntu)
#include <stdio.h>
int main(void){
printf("HelloWorld");
return 0;
}
To compile it I use mips-linux-gnu-gcc command
mips-linux-gnu-gcc -march=24kec -mabi=32 hello.c -o hello
I send hello program to my device and make a chmod 755
chmod 755 hello
When I try to execute it I have an error
root@openWrt:/www# ./hello
./hello: line 1: syntax error: unexpected word (expecting ")")
I don't understand what's going on, I tried some others command to compile it like with argument: -EB or -EL or not, -static or not, -mabi=32 and not, but I have same problem.
Anyone to help me?
Thanks
[UPDATE]
I send a file command to existing file and this is result
fw3: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1, dynamically linked, interpreter /lib/ld., for GNU/Linux 3.2.0, stripped
so I compile my program with this command
mipsel-linux-gnu-gcc -march=24kec -mips32r2 -mips16 hello.c -o hello
now I have this file command result
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
Now I read ELF of my remote program
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
and this my hello program readelf command
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
There is two difference ABI version and in flags there is pic
If I try to launch my hello program I have this error
hello: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
I try to add -static argument but I have this error when I launch my hello program
Illegal instruction
I'm always stuck with this problem.
Try build with mipsle
GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build
I have a similar issue and fixed it by setting architect to mipsle. I'm using Go to build binary for linux/mips on this device,
system type : MediaTek MT7620A ver:2 eco:6
cpu model : MIPS 24KEc V5.0
isa : mips1 mips2 mips32r1 mips32r2
ASEs implemented : mips16 dsp
It fails on the first time,
macbook:# cat main.go
package main
import (
"fmt"
)
func main() {
fmt.Println("hello, mips")
}
#### Setting GOARCH=mips
macbook:# GOOS=linux GOARCH=mips GOMIPS=softfloat go build -o hello-mips
openwrt:# ./hello-mips
./hello-mips: line 1: syntax error: unexpected "("
Then I realized the CPU arch is Little-Endian, not the default Big-Endian. So I changed the build parameter and it successes now.
#### Setting GOARCH=mipsle
macbook:# GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build -o hello
openwrt:# ./hello
hello, mips
Your CPU model is same as mine and only differs in the revision MIPS 24KEc V5.5, it must also be mipsle (mipsel). Hope it helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With