不久之前,AMD发布了给Linux发布了最新的22.20驱动,并且明确写了支持Ubuntu 22.04。
但是,这个包质量十分糟糕,依赖Ubuntu 22.04上并不存在的python
包,还依赖旧版的libstdc++-dev
和libgcc-dev
包,导致实际上无法安装。下面就来解决这个问题。
解决方案来自ROCm fails to install from APT repository in 22.04 #1713下面的 @jacodt ,感激不尽。
- 在AMD官网下载并安装deb包。这个包只是安装工具,并没有依赖问题。
-
安装好之后运行
sudo amdgpu-install
就会出现依赖无法满足的错误提示。dpkg: 依赖关系问题使得 rocm-llvm 的配置工作不能继续: rocm-llvm 依赖于 python;然而: 未安装软件包 python。 rocm-llvm 依赖于 libstdc++-5-dev | libstdc++-7-dev;然而: 未安装软件包 libstdc++-5-dev。 未安装软件包 libstdc++-7-dev。 rocm-llvm 依赖于 libgcc-5-dev | libgcc-7-dev;然而: 未安装软件包 libgcc-5-dev。 未安装软件包 libgcc-7-dev。 rocm-llvm 依赖于 rocm-core;然而: 未安装软件包 rocm-core。 dpkg: 处理软件包 rocm-llvm (--install)时出错: 依赖关系问题 - 仍未被配置 在处理时有错误发生: rocm-llvm
可以见到是
rocm-llvm
这个包出问题,所以接下来我们就要处理它。 -
最好新建一个目录在其中操作。首先,将
rocm-llvm
下载下来。执行如下命令:apt download rocm-llvm
- 将上一步下载的包解包出来:
ar x rocm-llvm_14.0.0.22204.50200-65_amd64.deb
- 将其中的control.tzr.xz解包:
tar xf control.tar.xz
- 用你喜欢的编辑器编辑解包出来的
control
文件。如:vim control
找到如下一行:
Depends: python, libc6, libstdc++6|libstdc++8, libstdc++-5-dev|libstdc++-7-dev, libgcc-5-dev|libgcc-7-dev, rocm-core
改为如下内容:
Depends: python3, libc6, libstdc++6|libstdc++8, libstdc++-5-dev|libstdc++-7-dev|libstdc++-10-dev, libgcc-5-dev|libgcc-7-dev|libgcc-10-dev, rocm-core
其中
python
改为python3
,并增加了|libstdc++-10-dev
和|libgcc-10-dev
两处内容。修改完之后保存。 -
重新打包
control.tar.xz
:tar c postinst prerm control | xz -c > control.tar.xz
- 重新打包为deb文件,文件名可自定,后面各文件顺序不能变:
ar rcs rocm-llvm.deb debian-binary control.tar.xz data.tar.xz
- 前面已经修改完了,接下来是安装了。先安装各依赖:
sudo apt install libstdc++-10-dev libgcc-10-dev rocm-core
- 安装我们修改好的软件包:
sudo dpkg -i rocm-llvm.deb
- 继续官方工具安装:
sudo amdgpu-install
到这里应该正常安装完了。
警告!!!以下步骤可能会破坏你的系统,如果你不知道怎么修复,请不要操作!
当然,还有可能出现提示缺少firmware,可以克隆linux-firmware
的git仓库,然后将缺少的文件放到对应的目录下。
git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
至此AMD显卡驱动就搞定了。