作者: 付漢傑 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