1. XDMA: Kernel module does not compile correctly for Linux Kernel versions >= 5.0
When trying to make
xdma on a system that has a Kernel version 5.0, the compile fails twice with error messages like:
xdma_drv_linux/xdma/cdev_ctrl.c: In function ‘char_ctrl_ioctl’:
xdma_drv_linux/xdma/cdev_ctrl.c:138:19: error: macro "access_ok" passed 3 arguments, but takes just 2
_IOC_SIZE(cmd));
^
I think this is because kernel 5.0 and onwards have dropped the first argument in the access_ok
macro. So I think lines like:
result = !access_ok(VERIFY_READ, (void __user *)arg,
should be changed to:
result = !access_ok((void __user *)arg,
If I change the two offending lines in this way, make succeeds, as does the load_driver.sh script.
2. implicit declaration of function "mmiowb()"
Solved it by commenting out the mmiowb() functions in libxdma.c and cdev_xvc.c.
3.XDMA: xdma.ko build failed on kernel 5.7 or newer
xdma_driver/XDMA/linux-kernel/xdma $ make all Makefile:14: XVC_FLAGS: . make -C /lib/modules/5.7.10-1.el7.elrepo.x86_64/build M=/xdma_driver/XDMA/linux-kernel/xdma modules make[1]: Entering directory '/usr/src/kernels/5.7.10-1.el7.elrepo.x86_64' /xdma_driver/XDMA/linux-kernel/xdma/Makefile:14: XVC_FLAGS:. CC [M] /xdma_driver/XDMA/linux-kernel/xdma/libxdma.o CC [M] /xdma_driver/XDMA/linux-kernel/xdma/xdma_cdev.o CC [M] /xdma_driver/XDMA/linux-kernel/xdma/cdev_ctrl.o CC [M] /xdma_driver/XDMA/linux-kernel/xdma/cdev_events.o CC [M] /xdma_driver/XDMA/linux-kernel/xdma/cdev_sgdma.o CC [M] /xdma_driver/XDMA/linux-kernel/xdma/cdev_xvc.o CC [M] /xdma_driver/XDMA/linux-kernel/xdma/cdev_bypass.o CC [M] /xdma_driver/XDMA/linux-kernel/xdma/xdma_mod.o /home/user/proj/2020/xilinx_xdma_driver/XDMA/linux-kernel/xdma/xdma_mod.c: In function ‘xdma_error_resume’: /home/user/proj/2020/xilinx_xdma_driver/XDMA/linux-kernel/xdma/xdma_mod.c:293:2: error: implicit declaration of function ‘pci_cleanup_aer_uncorrect_error_status’ [-Werror=implicit-function-declaration] pci_cleanup_aer_uncorrect_error_status(pdev); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors make[2]: *** [scripts/Makefile.build:267: /xdma_driver/XDMA/linux-kernel/xdma/xdma_mod.o] Error 1 make[1]: *** [Makefile:1732: /hxdma_driver/XDMA/linux-kernel/xdma] Error 2 make[1]: Leaving directory '/usr/src/kernels/5.7.10-1.el7.elrepo.x86_64' make: *** [Makefile:32: all] Error 2
xdma_mod: fix build with kernel 5.7 or newer
pci_cleanup_aer_uncorrect_error_status replaced by pci_aer_clear_nonfatal_status
XDMA/linux-kernel/xdma/xdma_mod.c
@@ -285,7 +285,11 @@ static void xdma_error_resume(struct pci_dev *pdev)
struct xdma_pci_dev *xpdev = dev_get_drvdata(&pdev->dev);
pr_info("dev 0x%p,0x%p.\n", pdev, xpdev);
#if KERNEL_VERSION(5, 7, 0) <= LINUX_VERSION_CODE
pci_aer_clear_nonfatal_status(pdev);
#else
pci_cleanup_aer_uncorrect_error_status(pdev);
#endif
}
更多查看:https://github.com/Xilinx/dma_ip_drivers/pull/69