Ubuntu安装XRT报错问题解决
在使用官方XRT deb进行安装时(https://xilinx.github.io/Alveo-Cards/master/debugging/build/html/docs/common-steps.html#determine-linux-release):
wget https://www.xilinx.com/bin/public/openDownload?filename=xrt_202310.2.15.225_22.04-amd64-xrt.deb
发生报错:
正在设置 xrt (2.15.225) ... Unloading old XRT Linux kernel modules rmmod: ERROR: Module xocl is not currently loaded rmmod: ERROR: Module xclmgmt is not currently loaded Invoking DKMS common.postinst for xrt Loading new xrt-2.15.225 DKMS files... Building for 6.8.0-60-generic Building initial module for 6.8.0-60-generic Error! Build of xocl.ko failed for: 6.8.0-60-generic (x86_64) Make sure the name of the generated module is correct and at the root of the build directory, or consult make.log in the build directory /var/lib/dkms/xrt/2.15.225/build/ for more information. • DKMS failed to install XRT drivers. • Please check if kernel development headers are installed for OS variant used. * • Check build logs in /var/lib/dkms/xrt/2.15.225 Installing MSD / MPD daemons | Components | Status | |------------------------------|--------------------| | XOCL & XCLMGMT Kernel Driver | Failed. Check build log : /var/lib/dkms/xrt/2.15.225/build/make.log | XRT USERSPACE | Success | | MPD/MSD | Success | 正在处理用于 sgml-base (1.30) 的触发器 ... 正在设置 x11proto-dev (2021.5-1) ... 正在设置 libxau-dev:amd64 (1:1.0.9-1build5) ... 正在处理用于 libc-bin (2.35-0ubuntu3.6) 的触发器 ... 正在处理用于 man-db (2.10.2-1) 的触发器 ... 正在设置 libxdmcp-dev:amd64 (1:1.1.3-0ubuntu5) ... 正在设置 libxcb1-dev:amd64 (1.14-3ubuntu3) ... 正在设置 libx11-dev:amd64 (2:1.7.5-1ubuntu0.3) ... 正在设置 libglx-dev:amd64 (1.4.0-1) ... 正在设置 libgl-dev:amd64 (1.4.0-1) ... 正在设置 libegl-dev:amd64 (1.4.0-1) ... 正在设置 libgles-dev:amd64 (1.4.0-1) ... 正在设置 libglvnd-dev:amd64 (1.4.0-1) ... 正在设置 libgl1-mesa-dev:amd64 (23.2.1-1ubuntu3.1~22.04.3) ... N: 由于文件'/home/chanra1n/openDownload?filename=xrt_202310.2.15.225_22.04-amd64-xrt.deb'无法被用户'_apt'访问,已脱离沙盒并提权为根用户来进行下载。 - pkgAcquire::Run (13: 权限不够) chanra1n@Server-7Z57A03BCN:~$ cat cat ^C chanra1n@Server-7Z57A03BCN:~$ cat /var/lib/dkms/xrt/2.15.225/build/make.log DKMS make.log for xrt-2.15.225 for kernel 6.8.0-60-generic (x86_64) 2025年 06月 08日 星期日 00:08:50 CST cd userpf; make all make[1]: 进入目录“/var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf” /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf make -C /lib/modules/6.8.0-60-generic/build M=/var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf modules make[2]: 进入目录“/usr/src/linux-headers-6.8.0-60-generic” warning: the compiler differs from the one used to build the kernel The kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0 You are using: gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0 CC [M] /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_subdev.o /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_subdev.c: In function ‘__xocl_subdev_destroy’: /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_subdev.c:415:25: warning: this statement may fall through [-Wimplicit-fallthrough=] 415 | device_release_driver(&pldev->dev); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_subdev.c:417:17: note: here 417 | case XOCL_SUBDEV_STATE_ADDED: | ^~~~ In file included from ./include/linux/string.h:292, from ./include/linux/uuid.h:11, from ./include/linux/mod_devicetable.h:14, from ./include/linux/pci.h:27, from /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_subdev.c:17: /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_subdev.c: In function ‘xocl_subdev_create_vsec_devs’: ./include/linux/fortify-string.h:70:33: warning: this statement may fall through [-Wimplicit-fallthrough=] 70 | #define __underlying_memcpy __builtin_memcpy | ^ ./include/linux/fortify-string.h:607:9: note: in expansion of macro ‘__underlying_memcpy’ 607 | __underlying_##op(p, q, __fortify_size); \ | ^~~~~~~~~~~~~ ./include/linux/fortify-string.h:652:26: note: in expansion of macro ‘__fortify_memcpy_chk’ 652 | #define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \ | ^~~~~~~~~~~~~~~~~~~~ /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_subdev.c:1684:25: note: in expansion of macro ‘memcpy’ 1684 | memcpy(((struct xocl_flash_privdata *) | ^~~~~~ /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_subdev.c:1689:17: note: here 1689 | case XOCL_VSEC_FLASH_TYPE_SPI_IP: | ^~~~ CC [M] /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_ctx.o CC [M] /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_thread.o CC [M] /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_fdt.o CC [M] /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_xclbin.o CC [M] /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_debug.o CC [M] /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../xocl_xgq.o CC [M] /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../subdev/xdma.o /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../subdev/xdma.c: In function ‘xdma_isr’: /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../subdev/xdma.c:297:17: error: too many arguments to function ‘eventfd_signal’ 297 | eventfd_signal(irq_entry->event_ctx, 1); | ^~~~~~~~~~~~~~ In file included from /var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../subdev/xdma.c:21: ./include/linux/eventfd.h:87:20: note: declared here 87 | static inline void eventfd_signal(struct eventfd_ctx *ctx) | ^~~~~~~~~~~~~~ make[4]: *** [scripts/Makefile.build:243:/var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf/../subdev/xdma.o] 错误 1 make[3]: *** [/usr/src/linux-headers-6.8.0-60-generic/Makefile:1925:/var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf] 错误 2 make[2]: *** [Makefile:240:__sub-make] 错误 2 make[2]: 离开目录“/usr/src/linux-headers-6.8.0-60-generic” make[1]: *** [Makefile:137:all] 错误 2 make[1]: 离开目录“/var/lib/dkms/xrt/2.15.225/build/driver/xocl/userpf” make: *** [Makefile:2:all] 错误 2 chanra1n@Server-7Z57A03BCN:~
解决方法:
# 1. 安装 Ubuntu 22.04 默认内核 sudo apt update sudo apt install linux-image-5.15.0-107-generic linux-headers-5.15.0-107-generic # 2. 更新 GRUB 并重启 sudo update-grub sudo reboot # 3. 重启后确认内核版本 uname -r # 应输出 5.15.0-107-generic # 4. 彻底重装 XRT sudo apt purge xrt sudo dpkg -i xrt_202310.2.15.225_22.04-amd64-xrt.deb sudo apt install -f sudo apt-mark hold linux-image-generic linux-headers-generic
如果不希望更换内核,可以手动编译
# 1. 安装依赖 sudo apt install build-essential cmake git # 2. 获取源码 (替换为实际仓库地址) git clone https://github.com/Xilinx/XRT.git cd XRT # 3. 切换到对应版本分支 git checkout 202310.2.15.225 # 4. 编译安装 ./build.sh cd build/Release make sudo make install