1. 程式人生 > 其它 >【分享】PetaLinux除錯技巧2篇

【分享】PetaLinux除錯技巧2篇

作者: 付漢傑 [email protected] [email protected]
測試環境: 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