我正在使用 MX Linux 操作系统。我正在尝试使用 stm32f103c8t6 MCU。从 Warren gay 的用户手册《Beginning STM32》中,我按照手册成功安装了 stm32f103c8t6、libopencm3 和 FreeRTOS 的 git 克隆。
当我下载并解压 ARM CROSS Compiler 时,文件保存在 /opt/gcc-arm 文件夹下。
输入 arm-none-eabi-gcc --version 后,显示命令未找到错误。
进一步探测并输入 $ ls -l /opt/gcc-arm/bin 后,它会以以下格式以绿色列出arm-none-eabi-gcc
-rwxr-xr-x 2 1001 1001 1296976 2020年11月24日arm-none-eabi-gcc
类似地,“type gcc”命令给出的输出为“gcc is /usr/bin/gcc”,而不是“arm-none-eabi-gcc is hashed (/opt/gcc-arm/bin/gcc)”,正如用户手册中提到的那样。
并且“type arm-none-eabi-gcc”命令给出的输出为“未找到”
据我了解,文件的绿色意味着文件是可执行的,但我无法解释为什么计算机无法识别该命令。
最后一个 make 命令得到了以下响应。
user@mx:~/stm32f103c8t6
$ make
make -C libopencm3 TARGETS=stm32/f1
make[1]: Entering directory '/home/user/stm32f103c8t6/libopencm3'
BUILD lib/stm32/f1
CC adc.c
make[2]: arm-none-eabi-gcc: Command not found
make[2]: *** [../../Makefile.include:41: adc.o] Error 127
Failure building: lib/stm32/f1: code: 2
make[1]: *** [Makefile:79: lib] Error 1
make[1]: Leaving directory '/home/user/stm32f103c8t6/libopencm3'
make: *** [Makefile:38: libopencm3/lib/libopencm3_stm32f1.a] Error 2
答案1
[这应该是一条评论,但我没有这样的声誉]
看起来编译器的路径不在您的$PATH
环境变量中。
为了确保一切正常,您应该使用绝对路径,或者:
/opt/gcc-arm/bin/arm-none-eabi-gcc
或者
cd /opt/gcc-arm/bin/
./arm-none-eabi-gcc #the ./ is necessary to execute from the current directory
如果有效(没有更多命令未找到错误),问题很容易解决:添加到你的(在你的主文件夹中,我假设你使用 bash 作为 shell,如果文件不是,.bashrc
则发布命令的输出echo $SHELL
不在那里):
PATH+=':/opt/gcc-arm/bin/'
然后. ~/.bashrc
从当前 shell 执行(运行新编辑的文件)或简单地打开一个新终端,您现在应该能够找到该命令。
笔记
我假设您正在从 intel/AMD 机器进行交叉编译(架构应该是x86_64
,您可以使用命令uname -m
或更多信息找到它uname -a
)。在这种情况下,您可以使用交叉编译器在 x86 机器上进行构建,并生成 ARM 可执行文件以在 stm32 机器上运行。
万一我做出了错误的假设并且您正在尝试运行交叉编译器从stm32的话就不用了。交叉编译器的优点是,如果您想编译,可以在更强大的机器上完成繁重的工作,然后在小型嵌入式系统上运行它在stm32无需依赖另一台计算机(即无需交叉编译)并且您在那里运行linux,然后只需使用本地gcc进行编译并在那里运行可执行文件即可。
笔记2
编译器臂-没有任何-eabi-gcc 旨在编译裸机代码(例如直接在嵌入式系统上运行的固件,而不是在 Linux 上运行),而 linux 的 gcc (或交叉编译器arm-操作系统-gnueabihf-gcc,例如)正在构建在 Linux 上运行的程序。