为 Cortex-m7 构建 Linux 交叉工具链

问题描述

我正在尝试在 STM32F746G-discovery 板上运行 Linux 环境。 U-boot 和 Linux 内核对这个特定目标的支持非常好,在我目前的阶段,我能够:

  • 启动U-boot;
  • 切换到 Linux 内核;
  • 在 MMC 上安装 rootfs;
  • 调用初始化脚本。

但是我的初始化脚本存在错误

正在启动 init: /sbin/init 存在但无法执行(错误 -8)

我决定进一步调查我的二进制文件,发现二进制文件和 glibc 是为错误的目标编译的。 Readelf 关于“libc.so.6”输出

File Attributes
Tag_cpu_name: "ARM10TDMI"
Tag_cpu_arch: v5T
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-1
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_rounding: Needed
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_user_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_align_preserved: 8-byte,except leaf SP
Tag_ABI_enum_size: int
Tag_ABI_optimization_goals: Aggressive Speed

所以我决定重建我的工具链。我在重建 Binutils 和 GCC 时没有遇到任何问题,但是当涉及到 glibc 时,我无法定义子架构。我尝试了以下方法

使用“--with-cpu=cortex-m7”运行configure:但脚本返回:configure:错误不支持arm的cortex-m7亚种。

使用 "--with-nonshared-cflags="-mcpu=cortex-m7"" 定义非共享 CFLAGS:configure 正常存在,但在构建 csu/subdir_lib 时出现错误

../sysdeps/arm/sysdep.h:144: Error: selected processor does not support ARM opcodes
../sysdeps/arm/crti.S:64: Error: attempt to use an ARM instruction on a Thumb-only processor -- `ldr r3,.LGOT'
../sysdeps/arm/crti.S:65: Error: attempt to use an ARM instruction on a Thumb-only processor -- `ldr r2,.LGOT+4'
../sysdeps/arm/crti.S:67: Error: attempt to use an ARM instruction on a Thumb-only processor -- `add r3,pc,r3'
../sysdeps/arm/crti.S:68: Error: attempt to use an ARM instruction on a Thumb-only processor -- `ldr r2,[r3,r2]'
../sysdeps/arm/crti.S:69: Error: attempt to use an ARM instruction on a Thumb-only processor -- `cmp r2,#0'
../sysdeps/arm/crti.S:70: Error: attempt to use an ARM instruction on a Thumb-only processor -- `bxeq lr'
../sysdeps/arm/crti.S:71: Error: attempt to use an ARM instruction on a Thumb-only processor -- `b __gmon_start__'
../sysdeps/arm/crti.S:84: Error: attempt to use an ARM instruction on a Thumb-only processor -- `push {r3,lr}'
../sysdeps/arm/crti.S:86: Error: attempt to use an ARM instruction on a Thumb-only processor -- `bl call_weak_fn'
../sysdeps/arm/crti.S:97: Error: attempt to use an ARM instruction on a Thumb-only processor -- `push {r3,lr}'

我的问题是 glibc 是否支持 Cortex-M 系列?如果是这样,我如何设置库以针对这些目标进行编译。

由于 glibc 不支持 M 系列,我必须在发现板上运行 Linux 应用程序。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)