Rim*_*mio 2 linux gcc arm cross-compiling
我正在为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内核中的东西吗?
什么softfp
意思是使用函数之间的软浮点调用约定,但仍然使用其中的硬件FPU.假设您的交叉编译器配置了默认-mfpu
选项而不是"none"(运行arm-whatever-gcc -v
并寻找--with-fpu=
检查),那么您就遇到了问题,因为据我所知,从Atmel数据表中可以看出,SAM9G25没有一个FPU.
我的第一直觉就是在那里拍GDB,捕获信号并反汇编违规指令以确保,但Thumb代码工作正常的事实已经是赠品(ARMv6T2之前的Thumb不包含任何协处理器指令,因此可以不使用FPU.
简而言之,用于-mfloat-abi=soft
确保ARM代码实际使用软件浮点并避免戳不存在的FPU.如果"严重的数字运算"涉及很多浮点,也许可以考虑使用不同的MCU ......
归档时间: |
|
查看次数: |
864 次 |
最近记录: |