小编Rim*_*mio的帖子

运行针对我的CPU的ARM代码时出现"非法指令"

我正在为ARM编译一个相当大的项目.我正在使用AT91SAM9G25-EK作为运行Debian ARM映像的开发板.图像中的所有库和可执行文件似乎都是为armv4t指令集编译的.

我的CPU是ARM926EJ-S,它应该运行armv5tej代码.

我正在使用GCC来交叉编译我的电路板.我的CXX标志如下所示:

set(CMAKE_CXX_FLAGS "--signed-char --sysroot=${SYSROOT} -mcpu=arm926ej-s -mtune=arm926ej-s -mfloat-abi=softfp" CACHE STRING "" FORCE)

如果我尝试在我的主板上运行它,我会SIGILL在初始化其中一个依赖项(使用armv4t)时收到非法指令信号().

如果我启用拇指模式(-mthumb -mthumb-interwork)它可以工作,但使用Thumb代表所有代码,在我的情况下运行较慢(我正在做一些严重的数字运算).

在这种情况下,如果我指定一个要为ARM模式编译的函数(使用__attribute__((target("arm")))),它将运行正常,直到调用该函数,然后退出SIGILL.

我迷路了.是不是我使用armv4t链接库?我误解了ARM模式的工作方式吗?它是Linux内核中的东西吗?

linux gcc arm cross-compiling

2
推荐指数
1
解决办法
864
查看次数

标签 统计

arm ×1

cross-compiling ×1

gcc ×1

linux ×1