You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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版本:

  1. 安装HWE内核:
sudo apt install --install-recommends linux-generic-hwe-20.04
  1. 重启系统,确认内核版本:
uname -r

输出应该是5.15.x-generic系列
3. 重新安装amdgpu-dkms:

sudo apt install amdgpu-dkms

方案2:降级amdgpu-dkms到兼容5.4内核的版本

如果你不想升级内核,可以安装适配5.4内核的旧版amdgpu-dkms:

  1. 先卸载当前有问题的包:
sudo apt purge amdgpu-dkms dkms dctrl-tools
sudo apt autoremove --purge
  1. 安装兼容5.4内核的旧版本(比如5.15.x系列的驱动,经测试适配5.4内核):
sudo apt install amdgpu-dkms=1:5.15.0-1029681.20.04
  1. 锁定版本避免自动升级:
sudo apt-mark hold amdgpu-dkms

方案3:手动修复编译问题(不推荐,适合有编译经验的用户)

如果你一定要用当前的驱动和内核版本,可以尝试手动修复编译错误:

  1. 解决C标准不匹配问题:
    编辑/var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/Makefile,找到设置C标准的行,将-std=gnu89替换为-std=gnu11
  2. 修复参数类型不兼容问题:
    找到报错的文件(比如/var/lib/dkms/amdgpu/6.2.4-1646729.20.04/build/amd/amdxcp/backport/include/kcl/kcl_drm_drv.h),调整函数参数的const修饰符,使其与内核API匹配
  3. 重新构建驱动:
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

火山引擎 最新活动