header image

Ubuntu 22.04安装AMD显卡驱动

不久之前,AMD发布了给Linux发布了最新的22.20驱动,并且明确写了支持Ubuntu 22.04。

但是,这个包质量十分糟糕,依赖Ubuntu 22.04上并不存在的python包,还依赖旧版的libstdc++-devlibgcc-dev包,导致实际上无法安装。下面就来解决这个问题。

解决方案来自ROCm fails to install from APT repository in 22.04 #1713下面的 @jacodt ,感激不尽。

  1. 在AMD官网下载并安装deb包。这个包只是安装工具,并没有依赖问题。

  2. 安装好之后运行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这个包出问题,所以接下来我们就要处理它。

  3. 最好新建一个目录在其中操作。首先,将rocm-llvm下载下来。执行如下命令:

    apt download rocm-llvm
    
  4. 将上一步下载的包解包出来:
    ar x rocm-llvm_14.0.0.22204.50200-65_amd64.deb
    
  5. 将其中的control.tzr.xz解包:
    tar xf control.tar.xz
    
  6. 用你喜欢的编辑器编辑解包出来的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两处内容。修改完之后保存。

  7. 重新打包control.tar.xz

    tar c postinst prerm control | xz -c > control.tar.xz
    
  8. 重新打包为deb文件,文件名可自定,后面各文件顺序不能变:
    ar rcs rocm-llvm.deb debian-binary control.tar.xz data.tar.xz
    
  9. 前面已经修改完了,接下来是安装了。先安装各依赖:
    sudo apt install libstdc++-10-dev libgcc-10-dev rocm-core
    
  10. 安装我们修改好的软件包:
    sudo dpkg -i rocm-llvm.deb
    
  11. 继续官方工具安装:
    sudo amdgpu-install
    

    到这里应该正常安装完了。

警告!!!以下步骤可能会破坏你的系统,如果你不知道怎么修复,请不要操作!

当然,还有可能出现提示缺少firmware,可以克隆linux-firmware的git仓库,然后将缺少的文件放到对应的目录下。

git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git

至此AMD显卡驱动就搞定了。

可以从微软商店中获取的官方应用

权做记录,不定时更新。

一些许久未更新且功能过时的应用未记录(如:优酷视频 For Win10),一些系统自带应用未记录(如:Microsoft EdgeWindows计算器等),另微软自家应用有很多软件有Preview版亦未记录(如Visual Studio CodePowerShell等)。

未标注UWP的均为Win32应用。

标注安装包的应用仅下载安装包,安装后不会出现在商店应用列表中,也不会由商店检查安装更新,需要软件自己更新,或者在商店里再次点安装来更新。

更新记录

  • 2022/4/25:初版。
  • 2022/6/1:Steam++更名为Watt Toolkit。
  • 2022/8/15:增加一些软件。
  • 2023/2/19:免费的HEVC插件已下架,增加B站半官方客户端,爱奇艺已不是UWP。

微软自家应用

工具

生产力

开发

Windows 11新内置应用(Windows 10未内置)

非微软应用

工具

网络

社交

娱乐

  • 哔哩哔哩动画:视频平台、UWP

  • 22与33的奇妙冒险:视频平台、UWP
    注:虽非官方应用,却是原B站UWP客户端的开发者暗影吉他手从一个早期版本fork出来继续开发的,没有官方客户端的一些新的特性。算是半官方的客户端,使用请保持低调。

  • 爱奇艺:视频平台UWP
    注:已经不是UWP了。

  • 腾讯视频:视频平台

  • 网易云音乐UWP:音乐平台
    注:实际非UWP,曾经是UWP但后来替换成了Win32版本。

  • iTunes:苹果的音乐管理

  • Comics++:漫画阅读器

  • QQ音乐:音乐平台,安装包

  • OBS Studio:直播推流软件,安装包

生产力

  • Blender:3D建模

  • Python 3.10:最新的稳定版Python运行环境,此外商店中还有3.7、3.8、3.9以及3.11(RC)版

游戏

  • Watt Toolkit:Steam相关工具(原Steam++)

  • 寻空:原神游戏辅助工具,原神必备

其他

破解中国移动家庭网关GS3101

起因

众所周知,宽带运营商们送的光猫带无线路由器的性能十分差。要想发挥宽带的完全能力,必须配合独立的路由器,因此要把光猫改成桥接模式。为此,要使用超级账号。常见三大运营商的超级账号如下:

  • 中国电信
    • 用户名:telecomadmin
    • 密码:nE7jA%5m
  • 中国联通
    • 用户名:CUAdmin
    • 密码:CUAdmin
  • 中国移动
    • 用户名:CMCCAdmin
    • 密码:aDm8h%MdA

当然,凡事总有例外,比如标题中提到的这款中国移动GS3101。

动手

获取telnet权限

首先,准备好普通用户账号,这个一般可以在光猫的背面找到(如果你没改过的话)。

然后连接到光猫,为避免意外最好用有线连接。

用浏览器打开光猫的管理界面,你没改过的话是192.168.1.1。然后用上面准备好的普通账号登录。

登录进管理界面之后,访问一个地址:http://192.168.1.1/cgi-bin/getGateWay.cgi (如果你没改过)。

Family Gateway
Yes

有时会显示No,但不一定代表失败,可以再次访问看看会不会变成Yes,如果不行可以先接着尝试后续操作。

用telnet获取超级账号密码

首先我们要准备一个telnet客户端。这个选择就很多了。不过我还是偏好Putty这个能作多种用途的软件。

打开Putty,在主界面中的Host name一栏空中填入光猫的IP地址192.168.1.1。然后点下面Connection type选择Telnet,然后点最下方的的Open按钮开始连接。

然后就会打开命令行窗口,显示tc login提示输入用户名,使用下面的账号登录,输入之后回车。然后会出现Password提示输入密码,同样输入之后回车(注意输入密码时不会有任何符号显示,不要以为是没有输入进去)。

  • 用户名:admin
  • 密码:s2@We3%Dc#

登录成功之后,会出现命令行提示符#,表示你现在是root用户。

输入命令cat /tmp/ctromfile.cfg|grep passwd。不出意外的话,第一行就是我们要找的内容。

web_passwd="CMCCAdminHoVm1TQ0" display_mask="FF FF FF FF EF DF FF FF FF"
        <Entry1 Active="Yes" username="user" web_passwd="a99esmt*"
        <Entry2 Active="Yes" username="user3" web_passwd="1234"
telnet_passwd="s2@We3%Dc#" telnet_port="23" />
console_passwd="s2@We3%Dc#" />

第一行web_passwd=后面的引号内的内容就是超级账号的密码了。上面的例子中就是CMCCAdminHoVm1TQ0

我们还可以在这里获取宽带账号和密码。使用命令cat /tmp/ctromfile.cfg |grep USERNAME,然后可以看到如下内容:

CONNECTION="Connect_Keep_Alive" USERNAME="1234567" PASSWORD="13579"
CONNECTION="Connect_Keep_Alive" USERNAME="80025707493@VIDEO"
USERNAME="" PASSWORD="" WILDCARD="No" />

其中USENAME=后面的引号内就是宽带账号,PASSWORD=后面的引号内就是宽带密码(USERNAMEPASSWORD后面是空的那几行请忽略)。比如上面的例子里账号就是1234567,密码就是13579

修改光猫为桥接模式

还是使用浏览器访问光猫设置页面(182.168.1.1)。用户名是CMCCAdmin,密码就是上面我们获得的(上例中CMCCAdminHoVm1TQ0

登录后找到网络设置,在宽带设置下,在连接名称中选择带有INTERNET的项。将下面的模式改成Bridge即可。

设置路由器

这一步应该不用多介绍了,用自行准备的路由器的WAN口连接到光猫,然后在路由器上设置宽带模式为PPPoE,并使用上面获得的宽带账号来拨号。

最后

最后吐槽一下华为路由器,IPv6居然不支持穿透,只能支持PD。结果现在大多数运营商都不下发前缀,导致IPv6形同虚设。

在AMD CPU的Windows上使用官方安卓模拟器虚拟化加速

这篇文章讲述的是如何在使用官方的安卓模拟器时,在AMD CPU上打开虚拟化加速。

如果使用的是Intel CPU,虽然也可以使用本文的方法,但还是推荐直接安装使用Android SDK里用管理器就可以安装的的Intel HAXM。

安装Android SDK

首先你需要Android SDK,在SDK Manager中安装SDK Tools里的Android EmulatorAndroid Emulator Hypervisor Driver for AMD Processors (Installer)

启用Windows Hypervisor Platform

根据安卓官方文档的说法,你需要在Windows功能中安装Windows Hypervisor Platform。但是我在我的电脑上并没有找到这个选项,这就很尴尬了。

不过随着我找了一圈,还真找到了方法(https://blog.csdn.net/oldfish__/article/details/88641864),十分感谢。

把以下内容保存为.bat文件,然后右键、以管理员身份运行即可。

::%cd%代表的是执行文件的当前目录,强调bat是在哪里启动的     ->盘符展开后是可改变的
::%~dp0代表的是bat文件所在的文件目录,强调bat的文件位置     ->盘符展开后是不可改变的
pushd "%~dp0"
::通过通配符获取文件名到hypervisorplatform.txt
dir /b %SystemRoot%\servicing\Packages\*HypervisorPlatform*.mum >hypervisorplatform.txt
::循环+拼接安装命令
::/quiet表示静默安装,/norestart表示无需重启(这些参数可酌情使用)
for /f %%i in ('findstr /i . hypervisorplatform.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
::删除txt
del hypervisorplatform.txt
::启用
Dism /online /enable-feature /featurename:HypervisorPlatform /LimitAccess /ALL

pause

根据提示重启即可。

AVD Manager

然后我们用安卓SDK自带的AVD Manager添加虚拟机运行即可。

在Ubuntu上使用AMD Radeon RX 5700 XT显卡

由于Ubuntu 19.10锁定的内核版本太低,导致AMD最新的RDNA架构显卡无法在Ubuntu下使用。根据Ubuntu的更新规律,很可能要到下一大版本(20.04)才有可能使用新内核,所以只好自己动手了。

以下方法适用于Ubuntu 19.10及之前的Ubuntu版本(18.04 LTS可以安装AMD官方提供的驱动,所以可以不参考本文)。适用于AMD Navi 10显卡(Radeon RX 5700、Radeon RX 5700 XT及Radeon RX 5700 XT 50周年版),如果将来可以找到其他适用的固件,也可用于Navi 14等显卡。

废话不多说,下面就是具体步骤。

安装新Mesa驱动

理论上,我们需要自己编译。但幸运的是,已经有人编译好放到Launchpad上了,感谢!

用如下命令添加PPA源即可:

sudo add-apt-repository ppa:oibaf/graphics-drivers

根据提示完成添加,然后按照常规方法更新软件包即可。

安装新内核

Ubuntu的内核源码在https://kernel.ubuntu.com上,但我们也不用自己编译,已经有人提供了工具。

和上面一样,添加一个PPA源:

sudo add-apt-repository ppa:cappelikan/ppa

按照提示添加后,再安装我们需要的工具:

sudo apt-get install mainline

安装好后从软件菜单里找到Ubuntu Mainline Kernel Installer运行。加载可能有点慢,加载好之后左边就是现在可以使用的内核,Status可以看到是已安装Installed或者正在运行Running的内核。右边的按钮从上到下依次是:刷新Refresh、安装Install、删除Remove、彻底删除Purge、查看变更日志Changes、设置Settings。

我们在左边选中需要安装的内核版本(对于RDNA显卡需要5.3以上内核),然后点安装Install即可。

等待下载安装结束,就可以关闭软件了。

下载新固件

我们还需要固件才能让显卡正常工作。目前只有Navi 10的,对于新的Navi 14(或以后其他核心)还暂时没有。

固件在https://people.freedesktop.org/~agd5f/radeon_ucode/navi10/,访问之后将所有的bin文件下载回来即可,当然,也可以用一条命令搞定:

wget -nd -np -P navi10 -r 'https://people.freedesktop.org/~agd5f/radeon_ucode/navi10/' --accept-regex='.*\.bin$'

-P navi10表示下载到navi10这个目录下,-nd表示不创建子目录,-np表示不下载父目录,-r表示递归下载(自动识别页面内的链接并下载),--accept-regex='.*\.bin$'表示只递归下载bin文件。

下载好之后,我们将所有bin文件复制到/lib/firmware/amdgpu/目录下即可。

cd navi10
sudo cp navi10* /lib/firmware/amdgpu

最后一步

以上就完成了所有工作,重启即可。

因为非正式版的内核没有经过安全启动签名,所以会有可能无法启动(提示Invalid Signature),需要到UEFI设置中关闭安全启动才行。

重启之后,显卡就能正常工作了,如果有任何问题,欢迎留言探讨。

附:如何卸载

如果以后出新的Ubuntu了,我们要在更新之前卸载上面安装的文件。

对于固件,直接删除即可。

对于内核,只要用Ubuntu Mainline Kernel Installer删除最新的内核,重启之后就会自动用稳定版内核启动了(默认是使用最新的内核启动,只要稳定版内核是已安装的最新版内核即可)。

对于驱动,我们除了删除PPA源之外,还需要还原原版的软件包,这时候我们需要另一个工具ppa-purge

sudo apt-get install ppa-purge

然后卸载即可。

sudo ppa-purge ppa:oibaf/graphics-drivers

按照提示操作即可。