我正在为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内核中的东西吗?