Error: selected processor does not support `cpsid i’ in ARM mode
这个问题是由于编译器版本太高导致的,安装方法如下
各版本gcc下载地址
以gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz为例
解压下载的软件包
tar -jxf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz
将解压出来的软件包(gcc-arm-none-eabi-10.3-2021.10)移动到 Ubuntu 根目录下的 opt 文件夹中;
sudo mv gcc-arm-none-eabi-10.3-2021.10 /opt
至此你的/opt目录下就有你刚下载的编译器了。
我的ubuntu上安装了好几个版本的gcc。解决非常简单,我找到低版本的2017发布的那个然后修改一下makefile的路径。修改如下
CC_PATH = /opt/gcc-arm-none-eabi-6-2017-q2-update/bin
ifeq ($(ARCH),x86)
CC = gcc
else
##CC = arm-linux-gnueabihf-gcc
CC = ${CC_PATH}/arm-none-eabi-gcc
LD = ${CC_PATH}/arm-none-eabi-ld
OBJCOPY = ${CC_PATH}/arm-none-eabi-objcopy
endif
CC_PATH就是你电脑上你想要使用的编译器存放的路径。
arm-none-eabi-ld: cannot find -lgcc
这个问题是由于找不到libgcc.a这个静态库导致的。与上面方法一样
修改makefile中LIBPATH := -lgcc -static -L/usr/lib/gcc/arm-none-eabi/6.3.1
这一行为你的编译器存放目录。比如我用是gcc-arm-none-eabi-6-2017-q2-update
这一版编译器,那么我的修改如下
LIBPATH := -lgcc -static -L/opt/gcc-arm-none-eabi-6-2017-q2-update/lib/gcc/arm-none-eabi/6.3.1
然后再编译即可解决问题
我修改后的完整makefile如下
CC_PATH = /opt/gcc-arm-none-eabi-6-2017-q2-update/bin
ifeq ($(ARCH),x86)
CC = gcc
else
##CC = arm-linux-gnueabihf-gcc
CC = ${CC_PATH}/arm-none-eabi-gcc
LD = ${CC_PATH}/arm-none-eabi-ld
OBJCOPY = ${CC_PATH}/arm-none-eabi-objcopy
endif
TARGET = uart
#OBJS=main.o mp3.o
BUILD_DIR = build
SRC_DIR = sources/project \
sources/common \
sources/irq \
sources/led \
sources/button \
sources/clock \
sources/uart
INC_DIR = include \
sources/button \
sources/common \
sources/irq \
sources/led \
sources/clock \
sources/uart
CFLAGS = $(patsubst %, -I%, $(INC_DIR))
INCLUDES = $(foreach dir,$(INC_DIR),$(wildcard $(dir)/*.h))
LIBPATH := -lgcc -static -L/opt/gcc-arm-none-eabi-6-2017-q2-update/lib/gcc/arm-none-eabi/6.3.1
#源文件要加上汇编文件
SOURCES_c= $(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.c))
SOURCES_s= $(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.s))
OBJS = $(patsubst %.c, $(BUILD_DIR)/%.o, $(notdir $(SOURCES_c)))
OBJS += $(patsubst %.s, $(BUILD_DIR)/%.o, $(notdir $(SOURCES_s)))
VPATH=$(SRC_DIR)
$(BUILD_DIR)/$(TARGET).bin: $(OBJS)
$(LD) -Tscript.lds -o $(BUILD_DIR)/$(TARGET).elf $^ $(LIBPATH)
$(OBJCOPY) -O binary $(BUILD_DIR)/$(TARGET).elf $@
$(BUILD_DIR)/%.o : %.c $(INCLUDES) | create_build
$(CC) -c $< -o $@ $(CFLAGS)
#编译汇编文件
$(BUILD_DIR)/%.o : %.s $(INCLUDES) | create_build
$(CC) -c $< -o $@ $(CFLAGS)
.PHONY:clean create_build burn
clean:
rm -r $(BUILD_DIR)
create_build:
mkdir -p $(BUILD_DIR)
burn:
cp $(BUILD_DIR)/$(TARGET).bin /home/embedfire/bare_mental/part_1/download_tool
cd /home/embedfire/bare_mental/part_1/download_tool && ./mkimage.sh $(TARGET).bin
注意CC_PATH和LIBPATH后面的路径一定要按照你编译器实际存放目录修改