作者: 付汉杰 hankf@xilinx.com hankf@amd.com,文章来源:博客园
测试环境: Vivado/PetaLinux 2021.2, Linux 5.10.0
禁止Petalinux的recipes增加的驱动
Petalinux工程,通过meta-user\recipes-kernel\linux\linux-xlnx中的patch文件,给Linux kernel增加了驱动,并使能为module形式编译。
再在Petalinux-config -c kernel中disable。编译Petalinux工程后,文件系统里,还是有对应的驱动。
在编译后,把linux kernel的代码复制出来,再修改其中对应驱动程序的makefile,在makefile里删除驱动的“.o”文件。之后再编译,文件系统里,对应的驱动消失了,达到了目的。
编译时,Linux内核驱动程序中的__DATE__和__TIME__ 被报告错误
调试时,为了保证使用的内核驱动程序是最新版本,再驱动里增加了__DATE__和__TIME__的打印。编译时,得到下列错误。
hankf@XSZGS4:kernel-source-patch$ make -j 64
CALL scripts/atomic/check-atomics.sh
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
CC [M] drivers/media/i2c/avt_multi_sensor_fmc/max9296_serdes.o
CC [M] drivers/media/i2c/avt_multi_sensor_fmc/max9295_serdes.o
drivers/media/i2c/avt_multi_sensor_fmc/max9295_serdes.c: In function 'max9295_serdes_probe':
drivers/media/i2c/avt_multi_sensor_fmc/max9295_serdes.c:58:93: error: macro "__DATE__" might prevent reproducible builds [-Werror=date-time]
58 | printk(KERN_INFO "%s:%d, MAX9295 driver, compilation time: %s, %s.\n", __func__, __LINE__, __DATE__, __TIME__ );
| ^~~~~~~~
drivers/media/i2c/avt_multi_sensor_fmc/max9295_serdes.c:58:103: error: macro "__TIME__" might prevent reproducible builds [-Werror=date-time]
58 | printk(KERN_INFO "%s:%d, MAX9295 driver, compilation time: %s, %s.\n", __func__, __LINE__, __DATE__, __TIME__ );
| ^~~~~~~~
cc1.real: some warnings being treated as errors
根据网上文章,在驱动的Makefile里,如下添加CFLAGS或者EXTRA_FLAGS,可以去掉这个错误。实际测试,没有作用。
CFLAGS += -Wno-error=date-time -Wno-date-time
EXTRA_FLAGS += -Wno-error=date-time -Wno-date-time
后来研究后,在驱动的Makefile里增加“ccflags-y”,可以去掉这个错误。
ccflags-y += -Wno-error=date-time -Wno-date-time
后来能编译成功。
hankf@XSZGS4:kernel-source-patch$ make
CALL scripts/checksyscalls.sh
CALL scripts/atomic/check-atomics.sh
CHK include/generated/compile.h
CC [M] drivers/media/i2c/avt_multi_sensor_fmc/max9286_serdes.o