交叉编译驱动和应用出现警告提示错误“cc1:all warnings being treated as errors”解决方法

本文讲述了作者在使用rk3588开发板时遇到的编译警告问题,由于Linux内核5.15后默认启用-Werror,导致未使用的变量警告被视为错误。作者提供了取消全局-Werror和在驱动makefile中添加特定CFLAGS的解决方法。
摘要由CSDN通过智能技术生成

最近新玩的rk3588的板子,编译驱动时出现了警告提示错误“cc1:all warnings being treated as errors”,导致编译失败,仔细看了一下,就是内部出现了一个警告,一个未使用的变量出现的警告,导致了驱动编译失败,但是如果这样其他驱动会不会也这样,然后就写了一个printk的demo驱动,在注册函数加了一个未使用的变量,结果也是编译不过,如下:
在这里插入图片描述查看资料:linux内核从5.15之后构建将默认启用“-Werror”编译器标记,编译时warning被当作error处理
问题找到了就好解决了
解决办法如下:
首先将内核最顶层makefile的“-Werror”全部取消
在这里插入图片描述当然还有其他的
在这里插入图片描述注意:是全部“-Werror”都要取消,上面的只是简单举例
此外还要在编译驱动的makefile中加入下面两句

CFLAGS = -Wall -Wpointer-arith -Wno-unused
KBUILD_CFLAGS += -w

这两句非常关键,就是为了避免内核继续将警告提示错误导致的编译失败
下面就是此次编译的makefile

obj-m := ch36x.o

#直接在本系统编译自己需要的驱动,指定的内核位置
#KERNELDIR := /lib/modules/$(shell uname -r)/build

#交叉编译需要指定内核在ubuntu的位置,内核源代码路径
KERNELDIR= /home/ht/rk3588/nvr_v1.3/kernel_rk_demo


#cc1: all warnings being treated as errors解决办法
CFLAGS = -Wall -Wpointer-arith -Wno-unused
KBUILD_CFLAGS += -w


#交叉编译器路径
CROSS_PATH = /opt/rk_linux/rv1126_1109/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-


#驱动模块源代码路径
PWD	:= $(shell pwd)

#直接在本系统编译自己需要的驱动
#modules:
#	$(MAKE) -C $(KERNELDIR) M=$(PWD)

#交叉编译
modules:
	$(MAKE) ARCH=arm64 $(CFLAGS) LOCALVERSION="sun50iw6" CROSS_COMPILE=$(CROSS_PATH) -C $(KERNELDIR) M=$(PWD) modules
clean:
	rm -rf *.o *~ core .depend .*.cmd *.mod *.mod.c .tmp_versions modules.order Module.symvers Module.markers built-in.o ch36x.ko *.ko.*
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值