OpenWrt的编写和编译程序 [英] Writing and Compiling Program For OpenWrt

查看:492
本文介绍了OpenWrt的编写和编译程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一台具有MIPS架构的嵌入式设备,可在OpenWRT下工作

I have a embedded device with MIPS arch working under OpenWRT


系统类型:联发科技MT7628AN ver:1 eco:2

机器:WRTnode2P
处理器:0

cpu型号:MIPS 24KEc V5.5

system type: MediaTek MT7628AN ver:1 eco:2
machine: WRTnode2P processor: 0
cpu model: MIPS 24KEc V5.5

我想通过计算机(ubuntu)编译C语言中的一个小程序。

I want to compile compile a small program in C through my computer (ubuntu)

#include <stdio.h>

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

要编译它,我使用了mips-linux-gnu-gcc命令

To compile it I use mips-linux-gnu-gcc command

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

我向您的设备发送hello程序并生成chmod 755

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 ")")

我不知道发生了什么,我尝试了一些其他命令来进行编译就像带有参数:-EB或-EL与否,-static与否,-mabi = 32与否一样,但是我有同样的问题。

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.

任何人都可以帮助我?

谢谢

[更新]

我向现有文件发送文件命令,结果是

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

现在我读了我的远程程序的ELF

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

这是我的hello程序readelf命令

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

ABI版本有两个不同,并且在标记中有图片

There is two difference ABI version and in flags there is pic

如果我尝试启动我的hello程序,但出现此错误

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

我尝试添加-static参数,但是我有启动hello程序时出现错误

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.

推荐答案

我也有类似的问题并通过将Architect设置为 mipsle 来解决此问题。我正在使用Go在此设备上为linux / mips构建二进制文件,

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

第一次失败,

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 "("

然后我意识到CPU架构是 Little-Endian ,不是默认设置大Endia 。因此,我更改了build参数,现在它成功了。

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

您的CPU模型与我的相同只是版本 MIPS 24KEc V5.5 不同,它还必须是杂项(mipsel)。希望对您有所帮助。

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.

这篇关于OpenWrt的编写和编译程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆