从linux交叉编译到ARM-ELF(armv5tejl)

从linux交叉编译到ARM-ELF(armv5tejl),arm,embedded-linux,elf,Arm,Embedded Linux,Elf,到目前为止,我已经在我的ubuntu系统上安装了所有的交叉编译包,但是我遇到了一个问题,需要一些帮助 Linux 2.6.28.7 #1 CST 2012 armv5tejl unknown $ cat /proc/cpuinfo Processor : ARM926EJ-S rev 5 (v5l) BogoMIPS : 199.47 Features : swp half fastmult edsp java CPU implementer : 0x

到目前为止,我已经在我的ubuntu系统上安装了所有的交叉编译包,但是我遇到了一个问题,需要一些帮助

Linux 2.6.28.7 #1  CST 2012 armv5tejl unknown

$ cat /proc/cpuinfo
Processor       : ARM926EJ-S rev 5 (v5l)
BogoMIPS        : 199.47
Features        : swp half fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 5

Hardware        : ServerEngines PILOT3
Revision        : 0000
Serial          : 0000000000000000


user@ubuntu:~/code$ arm-linux-gnueabi-readelf -h xxx.bin 
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:               0xa27c
  Start of program headers:          52 (bytes into file)
  Start of section headers:          128752 (bytes into file)
  Flags:                             0x2, GNU EABI, <unknown>
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         6
  Size of section headers:           40 (bytes)
  Number of section headers:         25
  Section header string table index: 24
运行simplev5或simple926时,显示:

Segmentation fault
按照@Steven p advice,我检查了文件格式,如下所示:

user@ubuntu:~/code$ file simplev5
simplev5: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=f0607da1d809a7d98636d76ee0e538fc828e3b65, not stripped
user@ubuntu:~/code$ file simple926 
simple926: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=ed1e6fdade02c0d2c985a503dafb6efadd13522f, not stripped

您很可能拥有正确的编译,否则您将得到一个关于无效格式的错误。您可以通过以下方式确认文件格式是否正确:

file simple926
尝试一个更简单的程序:

int main() { return 123; }
然后,您可以在运行结果代码时检查它,以确认它是否执行了某些操作

./simple926
echo $?

要解决分段错误,您可能需要取出gdb并检查堆栈(回溯)。

可能重复的可能重复的。。。这个“Linux2.6.28.7”相当古老,最新的Ubuntu cross arm可能是为更新的Linux配置的。即使'-static'成功,您仍然有可能无法映射的
swi
调用。可能会有帮助。可能很有用,但它至少支持较旧的GCC版本,也可能支持Linux版本。通常情况下,需要一些小补丁来让编译器生成过时的依赖项。可能也会有帮助。您可以使用示例“独立”来查看它是否与您的ARM Ubuntu编译器配合使用,以至少消除ELF容器问题。此外,gdb不存在,无法安装在目标计算机中。我的测试代码和你的类似。对不起,我不能在帖子上发表评论,否则我不会回答。但是,根据artless noise的评论,您应该确保使用与您安装的版本相匹配的工具链进行构建。尽可能地匹配内核版本。你成功了吗?尝试不使用march或mcpu选项。
./simple926
echo $?