Bootstrap

xilinx pci驱动编译问题

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

 

;