IMX6ULL野火例程编译出错解决

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后面的路径一定要按照你编译器实际存放目录修改

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值