Ubuntu 20.04安装amdgpu-dkms时post-installation脚本执行失败求助
Ubuntu 20.04安装amdgpu-dkms时post-installation脚本执行失败求助
看起来你遇到的是amdgpu-dkms驱动包与当前Ubuntu 20.04内核版本不兼容导致的编译失败问题,我先帮你梳理下问题根源和可行的解决方案:
问题根源分析
从你提供的make.log可以看到几个关键错误:
- 本地C标准(
gnu89)与内核默认C标准(gnu11/gnu99)不匹配 - 函数参数类型不兼容(比如期望
struct drm_driver *但传入const struct drm_driver *) - 函数重复声明冲突
这些都是驱动代码与旧版本内核(你当前用的是5.4.0-166)的API不兼容导致的,你安装的amdgpu-dkms 1:6.2.4.50700是较新的驱动版本,对Ubuntu 20.04默认的5.4内核支持不佳。
解决方案(按推荐程度排序)
方案1:升级到HWE内核(最推荐,长期稳定)
Ubuntu 20.04提供了Hardware Enablement(HWE)内核(5.15版本),对新硬件和驱动的支持更好,完美适配你安装的amdgpu-dkms版本:
- 安装HWE内核:
sudo apt install --install-recommends linux-generic-hwe-20.04
- 重启系统,确认内核版本:
uname -r
输出应该是5.15.x-generic系列
3. 重新安装amdgpu-dkms:
sudo apt install amdgpu-dkms
方案2:降级amdgpu-dkms到兼容5.4内核的版本
如果你不想升级内核,可以安装适配5.4内核的旧版amdgpu-dkms:
- 先卸载当前有问题的包:
sudo apt purge amdgpu-dkms dkms dctrl-tools sudo apt autoremove --purge
- 安装兼容5.4内核的旧版本(比如5.15.x系列的驱动,经测试适配5.4内核):
sudo apt install amdgpu-dkms=1:5.15.0-1029681.20.04
- 锁定版本避免自动升级:
sudo apt-mark hold amdgpu-dkms
方案3:手动修复编译问题(不推荐,适合有编译经验的用户)
如果你一定要用当前的驱动和内核版本,可以尝试手动修复编译错误:
- 解决C标准不匹配问题:
编辑/var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/Makefile,找到设置C标准的行,将-std=gnu89替换为-std=gnu11 - 修复参数类型不兼容问题:
找到报错的文件(比如/var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/amd/amdxcp/backport/include/kcl/kcl_drm_drv.h),调整函数参数的const修饰符,使其与内核API匹配 - 重新构建驱动:
sudo dkms build -m amdgpu -v 6.2.4-1646729.20.04 sudo dkms install -m amdgpu -v 6.2.4-1646729.20.04
注意:手动修改驱动代码可能引入其他兼容性问题,风险较高。
你提供的原始日志参考
显卡硬件信息(lshw -C display)
root@gpt:/home# lshw -C display *-display description: VGA compatible controller product: Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] vendor: Advanced Micro Devices, Inc. [AMD/ATI] physical id: 0 bus info: pci@0000:01:00.0 version: c7 width: 64 bits clock: 33MHz capabilities: pm pciexpress msi vga_controller bus_master cap_list rom configuration: driver=amdgpu latency=0 resources: irq:41 memory:c0000000-cfffffff memory:d0000000-d01fffff ioport:e000(size=256) memory:fea00000-fea3ffff memory:c0000-dffff
显卡驱动信息(lspci -nnk | grep -i vga -A3)
root@gpt:/home# lspci -nnk | grep -i vga -A3 01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1002:67df] (rev c7) Subsystem: Gigabyte Technology Co., Ltd Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] [1458:22df] Kernel driver in use: amdgpu Kernel modules: amdgpu
安装amdgpu-dkms的报错日志
root@gpt:/home# apt install amdgpu-dkms Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: dctrl-tools dkms Suggested packages: debtags menu The following NEW packages will be installed: amdgpu-dkms dctrl-tools dkms 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 0 B/10.3 MB of archives. After this operation, 444 MB of additional disk space will be used. Do you want to continue? [Y/n] y Selecting previously unselected package dctrl-tools. (Reading database ... 90817 files and directories currently installed.) Preparing to unpack .../dctrl-tools_2.24-3_amd64.deb ... Unpacking dctrl-tools (2.24-3) ... Selecting previously unselected package dkms. Preparing to unpack .../dkms_2.8.1-5ubuntu2_all.deb ... Unpacking dkms (2.8.1-5ubuntu2) ... Selecting previously unselected package amdgpu-dkms. Preparing to unpack .../amdgpu-dkms_1%3a6.2.4.50700-1646729.20.04_all.deb ... Unpacking amdgpu-dkms (1:6.2.4.50700-1646729.20.04) ... Setting up dctrl-tools (2.24-3) ... Setting up dkms (2.8.1-5ubuntu2) ... Setting up amdgpu-dkms (1:6.2.4.50700-1646729.20.04) ... Loading new amdgpu-6.2.4-1646729.20.04 DKMS files... Building for 5.4.0-166-generic Building for architecture x86_64 Building initial module for 5.4.0-166-generic ERROR: Cannot create report: [Errno 17] File exists: '/var/crash/amdgpu-dkms.0.crash' Error! Bad return status for module build on kernel: 5.4.0-166-generic (x86_64) Consult /var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/make.log for more information. dpkg: error processing package amdgpu-dkms (--configure): installed amdgpu-dkms package post-installation script subprocess returned error exit status 10 Processing triggers for man-db (2.9.1-1) ... Errors were encountered while processing: amdgpu-dkms E: Sub-process /usr/bin/dpkg returned an error code (1) make[1]: *** [scripts/Makefile.build:520: /var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/amd/amdgpu] Error 2
make.log关键内容
root@gpt:/home# cat /var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/make.log DKMS make.log for amdgpu-6.2.4-1646729.20.04 for kernel 5.4.0-166-generic (x86_64) Tue 14 Nov 2023 11:58:15 PM UTC make: Entering directory '/usr/src/linux-headers-5.4.0-166-generic' /var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/Makefile:219: "The local C standard(gnu89) doesn't match kernel default C standard(gnu11/gnu99)" ... In file included from /var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/amd/amdxcp/backport/include/kcl/kcl_drm_drv.h:29, from /var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/amd/amdxcp/backport/backport.h:1, from <command-line>: ./include/drm/drm_drv.h:784:23: note: expected ‘struct drm_driver *’ but argument is of type ‘const struct drm_driver *’ 784 | struct drm_driver *driver, | ~~~~~~~~~~~~~~~~~~~^~~~~~ make[2]: *** [scripts/Makefile.build:270: /var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/amd/amdxcp/./backport/kcl_drm_drv.o] Error 1 make[2]: *** Waiting for unfinished jobs.... ... In file included from ./include/drm/drm_modes.h:33, from ./include/drm/drm_crtc.h:40, from /var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/include/kcl/kcl_drm_connector.h:25, from /var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/amd/amdkcl/kcl_drm_connector.c:22: ./include/drm/drm_connector.h:1526:5: note: previous declaration of ‘drm_mode_create_colorspace_property’ was here 1526 | int drm_mode_create_colorspace_property(struct drm_connector *connector); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ make[2]: *** [scripts/Makefile.build:270: /var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/amd/amdkcl/kcl_drm_connector.o] Error 1 ... make: *** [Makefile:1778: /var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build] Error 2 make: Leaving directory '/usr/src/linux-headers-5.4.0-166-generic'
备注:内容来源于stack exchange,提问作者played spades




