AMDGPU
AMDGPU 是 AMD Radeon 显卡的开源图形驱动,自 Graphics Core Next 系列开始。
选择正确的驱动
根据您拥有的显卡,在 Xorg#AMD 中找到正确的驱动。此驱动支持 Southern Islands (GCN 1,发布于 2012 年) 及更高版本的显卡。AMD 没有计划支持 GCN 之前的 GPU。
不支持的 GPU 的所有者可以使用开源 ATI 驱动。
安装
安装 mesa 软件包,它同时提供了用于 3D 加速的 DRI 驱动和用于 加速视频解码 的 VA-API/VDPAU 驱动。
- 为了支持 32 位应用程序,还需要从 multilib 仓库安装 lib32-mesa 软件包。
- 对于 DDX 驱动(在 Xorg 中提供 2D 加速),安装 xf86-video-amdgpu 软件包。
- 对于 Vulkan 支持
- 首先仅测试 vulkan-radeon:尽管它没有作为 vulkan-driver 的第一个提供者出现(由于其 字母顺序),但它避免了一些关于 amdvlk 的重复 报告 的问题。
- 当安装 amdvlk 软件包时,它会将自身设置为默认的 Vulkan 驱动:如果 您需要安装两个驱动程序(例如,当 vulkan-radeon 出现 问题 时),请参阅 Vulkan#通过环境变量选择。
- 可选地,为了支持 32 位应用程序,安装 lib32-vulkan-radeon 或 lib32-amdvlk 软件包以匹配已安装的本地软件包。
实验性
对于某些用户来说,使用 mesa 的上游实验性构建可能是有价值的。
安装 mesa-gitAUR 软件包,它提供了用于 3D 加速的 DRI 驱动。
- 为了支持 32 位应用程序,还需要从 mesa-git 仓库或 AUR 安装 lib32-mesa-gitAUR 软件包。
- 对于 DDX 驱动(在 Xorg 中提供 2D 加速),安装 xf86-video-amdgpu-gitAUR 软件包。
- 对于使用 mesa-git 仓库的 Vulkan 支持,安装 vulkan-radeon-git 软件包。可选地,安装 lib32-vulkan-radeon-git 软件包以支持 32 位应用程序。如果从 AUR 构建 mesa-gitAUR,则不需要这样做。
启用 Southern Islands (SI) 和 Sea Islands (CIK) 支持
官方支持的内核 启用了 AMDGPU 对 Southern Islands (GCN 1,发布于 2012 年) 和 Sea Islands (GCN 2,发布于 2013 年) 显卡的支持。amdgpu
内核驱动需要在 radeon 驱动之前加载。您可以通过运行 lspci -k
来检查加载了哪个内核驱动。它应该像这样
$ lspci -k -d ::03xx
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Curacao PRO [Radeon R7 370 / R9 270/370 OEM] Subsystem: Gigabyte Technology Co., Ltd Device 226c Kernel driver in use: amdgpu Kernel modules: radeon, amdgpu
如果未使用 amdgpu
驱动,请按照下一节中的说明操作。
加载 amdgpu 驱动
amdgpu
和 radeon
模块的 模块参数 均为 cik_support=
和 si_support=
。
它们需要设置为内核参数或在 modprobe 配置文件中,并取决于显卡的 GCN 版本。
如果您不确定您拥有哪个内核显卡,可以使用这两个参数。
[..] amdgpu 0000:01:00.0: Use radeon.cik_support=0 amdgpu.cik_support=1 to override
。在内核命令行中设置模块参数
设置以下 内核参数 之一
- Southern Islands (SI):
radeon.si_support=0 amdgpu.si_support=1
- Sea Islands (CIK):
radeon.cik_support=0 amdgpu.cik_support=1
指定正确的模块顺序
确保 amdgpu
已在 Mkinitcpio#MODULES 数组中设置为第一个模块,例如 MODULES=(amdgpu radeon)
。
设置内核模块参数
对于 Southern Islands (SI),使用 si_support=1
内核模块参数,对于 Sea Islands (CIK),使用 cik_support=1
/etc/modprobe.d/amdgpu.conf
options amdgpu si_support=1 options amdgpu cik_support=1
/etc/modprobe.d/radeon.conf
options radeon si_support=0 options radeon cik_support=0
确保 modconf
在 /etc/mkinitcpio.conf
中的 HOOKS
数组中,并重新生成 initramfs。
编译支持 amdgpu 驱动的内核
在构建或编译 内核 时,应在配置中设置 CONFIG_DRM_AMDGPU_SI=Y
和/或 CONFIG_DRM_AMDGPU_CIK=Y
。
ACO 编译器
ACO 编译器 是 Valve Corporation 创建和开发的开源着色器编译器,旨在直接与 LLVM 编译器、AMDVLK 驱动 以及 Windows 10 竞争。与 LLVM 和 AMDVLK 相比,它提供了更短的编译时间,并且在游戏时性能更好。
一些基准测试可以在 GitHub 和 Phoronix 上看到 (1) (2) (3)。
自 mesa 版本 20.2 起,ACO 是默认的着色器编译器。
加载
amdgpu
内核模块应该在系统启动时自动加载。
如果它没有加载
- 请确保在需要时 #启用 Southern Islands (SI) 和 Sea Islands (CIK) 支持。
- 确保您已安装最新的 linux-firmware 软件包。此驱动程序需要每个型号的最新固件才能成功启动。
- 确保您没有将
nomodeset
或vga=
作为 内核参数,因为amdgpu
需要 KMS。 - 检查您是否没有使用任何 内核模块黑名单 禁用
amdgpu
。
可能是它加载了,但加载较晚,在 X 服务器需要它之后。在这种情况下,请参阅 内核模式设置#提前 KMS 启动。
Xorg 配置
Xorg 将自动加载驱动程序,并将使用您显示器的 EDID 来设置原生分辨率。配置仅在调整驱动程序时才需要。
如果您想要手动配置,请创建 /etc/X11/xorg.conf.d/20-amdgpu.conf
,并添加以下内容
/etc/X11/xorg.conf.d/20-amdgpu.conf
Section "OutputClass" Identifier "AMD" MatchDriver "amdgpu" Driver "amdgpu" EndSection
使用此部分,您可以启用功能并调整驱动程序设置,在设置驱动程序选项之前,请先参阅 amdgpu(4)。
无撕裂渲染
TearFree 控制使用硬件页面翻转机制来防止撕裂。默认情况下,TearFree 将对旋转的输出、应用了 RandR 转换的输出以及 RandR 1.4 从属输出启用,而对其余所有内容禁用。或者,您可以分别使用 true
或 false
将其配置为始终启用或始终禁用。
Option "TearFree" "true"
您还可以使用 xrandr 临时启用 TearFree
$ xrandr --output output --set TearFree on
其中 output
应该看起来像 DisplayPort-0
或 HDMI-A-0
,并且可以通过运行 xrandr -q
来获取。
DRI 级别
DRI 设置要启用的最大 DRI 级别。有效值为 2 表示 DRI2 或 3 表示 DRI3。如果 Xorg 版本 >= 1.18.3,则默认值为 3 表示 DRI3,否则使用 DRI2
Option "DRI" "3"
可变刷新率
请参阅 可变刷新率。
10 位色彩
较新的 AMD 显卡支持 10bpc 色彩,但默认设置为 24 位色彩,并且必须显式启用 30 位色彩。如果应用程序也支持,启用它可以减少渐变中的可见条带/伪影。要检查您的显示器是否支持它,请在您的 Xorg 日志文件(例如 /var/log/Xorg.0.log
或 ~/.local/share/xorg/Xorg.0.log
)中搜索“EDID”
[ 336.695] (II) AMDGPU(0): EDID for output DisplayPort-0 [ 336.695] (II) AMDGPU(0): EDID for output DisplayPort-1 [ 336.695] (II) AMDGPU(0): Manufacturer: DEL Model: a0ec Serial#: 123456789 [ 336.695] (II) AMDGPU(0): Year: 2018 Week: 23 [ 336.695] (II) AMDGPU(0): EDID Version: 1.4 [ 336.695] (II) AMDGPU(0): Digital Display Input [ 336.695] (II) AMDGPU(0): 10 bits per channel
要检查当前是否已启用,请搜索“Depth”)
[ 336.618] (**) AMDGPU(0): Depth 30, (--) framebuffer bpp 32 [ 336.618] (II) AMDGPU(0): Pixel depth = 30 bits stored in 4 bytes (32 bpp pixmaps)
使用默认配置,它将改为指示深度为 24,其中 4 字节存储 24 位。
要检查 10 位是否有效,请退出 Xorg(如果正在运行),然后运行 Xorg -retro
,这将显示一个黑白网格,然后按 Ctrl-Alt-F1
和 Ctrl-C
退出 X,并运行 Xorg -depth 30 -retro
。如果这运行良好,则 10 位色彩有效。
要通过 startx
以 10 位色彩启动,请使用 startx -- -depth 30
。要永久启用它,请创建或添加到
/etc/X11/xorg.conf.d/20-amdgpu.conf
Section "Screen" Identifier "asdf" DefaultDepth 30 EndSection
减少输出延迟
如果您想最大程度地减少延迟,可以禁用页面翻转和无撕裂
/etc/X11/xorg.conf.d/20-amdgpu.conf
Section "OutputClass" Identifier "AMD" MatchDriver "amdgpu" Driver "amdgpu" Option "EnablePageFlip" "off" Option "TearFree" "false" EndSection
请参阅 游戏#减少 DRI 延迟 以进一步减少延迟。
特性
视频加速
请参阅 硬件视频加速#AMD/ATI。
监控
监控您的 GPU 通常用于检查温度以及 GPU 的 P 状态。
CLI
- amdgpu_top — 用于显示 AMDGPU 使用率的工具
- nvtop — 用于 AMD、Intel 和 NVIDIA 的 GPU 进程监控
- radeontop — GPU 利用率查看器,用于查看总活动百分比和各个模块
GUI
- amdgpu_top — 用于显示 AMDGPU 使用率的工具
- AmdGuid — 一个完全用 Rust 编写的基本风扇控制 GUI。
- TuxClocker — 一个 Qt5 监控和超频工具。
手动
要检查您的 GPU 的 P 状态,请执行
$ cat /sys/class/drm/card0/device/pp_od_clk_voltage
要监控您的 GPU,请执行
# watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info
要检查您的 GPU 利用率,请执行
$ cat /sys/class/drm/card0/device/gpu_busy_percent
要检查您的 GPU 频率,请执行
$ cat /sys/class/drm/card0/device/pp_dpm_sclk
要检查您的 GPU 温度,请执行
$ cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input
要检查您的 VRAM 频率,请执行
$ cat /sys/class/drm/card0/device/pp_dpm_mclk
要检查您的 VRAM 使用量,请执行
$ cat /sys/class/drm/card0/device/mem_info_vram_used
要检查您的 VRAM 大小,请执行
$ cat /sys/class/drm/card0/device/mem_info_vram_total
超频
自 Linux 4.17 起,一旦您启用了下面的启动功能,就可以通过 /sys/class/drm/card0/device/pp_od_clk_voltage
调整显卡的时钟和电压。
启动参数
需要通过附加 内核参数 amdgpu.ppfeaturemask=0xffffffff
来解锁对 sysfs 中调整时钟和电压的访问。
并非所有位都已定义,并且可能会随着时间的推移添加新功能。设置所有 32 位可能会启用不稳定的功能,从而导致屏幕闪烁或从挂起状态恢复后损坏等问题。将 PP_OVERDRIVE_MASK 位 0x4000 与默认 ppfeaturemask 结合使用应该就足够了。要为您的系统计算合理的参数,请执行
$ printf 'amdgpu.ppfeaturemask=0x%x\n' "$(($(cat /sys/module/amdgpu/parameters/ppfeaturemask) | 0x4000))"
手动(默认)
/sys/class/drm/...
这样的路径只是符号链接,并且可能在重启之间发生更改。持久位置可以在 /sys/devices/
中找到,例如 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/
。相应地调整命令以获得可靠的结果。有关所有可能选项的深入信息,请阅读有关 amdgpu 散热控制 的内核文档。
要将例如 Polaris GPU 上的最大 P 状态 7 的 GPU 时钟设置为 1209MHz 和 900mV 电压,请运行
# echo "s 7 1209 900" > /sys/class/drm/card0/device/pp_od_clk_voltage
相同的过程可以应用于 VRAM,例如 Polaris 5xx 系列显卡上的最大 P 状态 2
# echo "m 2 1850 850" > /sys/class/drm/card0/device/pp_od_clk_voltage
要应用,请运行
# echo "c" > /sys/class/drm/card0/device/pp_od_clk_voltage
要检查是否成功,请在 3D 负载下读取时钟和电压
# watch -n 0.5 cat /sys/kernel/debug/dri/0/amdgpu_pm_info
您可以使用以下命令重置为默认值
# echo "r" > /sys/class/drm/card0/device/pp_od_clk_voltage
还可以禁止驱动程序切换到某些 P 状态,例如,解决深度节能 P 状态的问题,例如闪烁伪影或卡顿。要在显卡上强制使用最高的 VRAM P 状态,同时仍然允许 GPU 本身以较低的时钟速度运行,首先找到最高的可能 P 状态,然后设置它
$ cat /sys/class/drm/card0/device/pp_dpm_mclk
0: 96Mhz * 1: 456Mhz 2: 675Mhz 3: 1000Mhz
# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level # echo "3" > /sys/class/drm/card0/device/pp_dpm_mclk
仅允许最高的三个 GPU P 状态
# echo "5 6 7" > /sys/class/drm/card0/device/pp_dpm_sclk
要将 GPU 的允许最大功耗设置为例如 50 瓦,请运行
# echo 50000000 > /sys/class/drm/card0/device/hwmon/hwmon0/power1_cap
辅助
如果您不倾向于完全手动超频您的 GPU,社区提供了一些超频工具来帮助您超频和监控您的 AMD GPU。
CLI 工具
- amdgpu-clocks — 一个脚本,可用于监控和设置 AMD GPU 的自定义电源状态。它还提供了一个 Systemd 服务,以便在启动时自动应用设置。
GUI 工具
- TuxClocker — 一个 Qt5 监控和超频工具。
- CoreCtrl — 一个具有类似 WattMan UI 的 GUI 超频工具,支持按应用程序配置文件。
- LACT — 一个 GTK 工具,用于查看信息和控制您的 AMD GPU。
启动时启动
一种方法是使用 systemd 单元,如果您希望您的设置在启动时自动应用,请考虑查看此 Reddit 线程 来配置并在启动时应用您的设置。
另一种方法是对某些值使用 udev 规则,例如,设置低性能级别以节省能源
/etc/udev/rules.d/30-amdgpu-low-power.rules
ACTION=="add", SUBSYSTEM=="drm", DRIVERS=="amdgpu", ATTR{device/power_dpm_force_performance_level}="low"
性能级别
AMDGPU 提供了几个性能级别,文件 power_dpm_force_performance_level 用于此目的,可以在这些级别之间进行选择
- auto:在驱动程序中动态选择当前条件下的最佳电源配置文件。
- low:时钟被强制设置为最低功耗状态。
- high:时钟被强制设置为最高功耗状态。
- manual:用户可以手动调整为每个时钟域启用的电源状态(用于设置 #电源配置文件)
- profile_standard、profile_min_sclk、profile_min_mclk、profile_peak:时钟和电源门控被禁用,并且时钟设置为不同的配置文件情况。建议将此模式用于分析特定的工作负载
要将 AMDGPU 设备设置为使用低性能级别,可以执行以下命令
# echo "low" > /sys/class/drm/card0/device/power_dpm_force_performance_level
电源配置文件
AMDGPU 通过电源配置文件提供了一些优化,其中最常用的是用于 OpenCL 密集型应用程序的计算模式。可以使用以下命令列出可用的电源配置文件
$ cat /sys/class/drm/card0/device/pp_power_profile_mode
NUM MODE_NAME SCLK_UP_HYST SCLK_DOWN_HYST SCLK_ACTIVE_LEVEL MCLK_UP_HYST MCLK_DOWN_HYST MCLK_ACTIVE_LEVEL 0 BOOTUP_DEFAULT: - - - - - - 1 3D_FULL_SCREEN: 0 100 30 0 100 10 2 POWER_SAVING: 10 0 30 - - - 3 VIDEO: - - - 10 16 31 4 VR: 0 11 50 0 100 10 5 COMPUTE *: 0 5 30 10 60 25 6 CUSTOM: - - - - - -
card0
标识您机器中的特定 GPU,如果有多块 GPU,请确保寻址正确的 GPU。要使用特定的电源配置文件,您应该首先使用以下命令启用对其的手动控制
# echo "manual" > /sys/class/drm/card0/device/power_dpm_force_performance_level
然后通过写入与其关联的 NUM 字段来选择电源配置文件,例如,要启用 COMPUTE,请运行
# echo "5" > /sys/class/drm/card0/device/pp_power_profile_mode
启用 GPU 显示缩放
为了避免使用显示器内置的缩放器,而是在不使用显示器的原生分辨率时使用 GPU 自己的缩放器,请执行
$ xrandr --output output --set "scaling mode" scaling_mode
"scaling mode"
的可能值为:None
、Full
、Center
、Full aspect
。
- 要显示可用的输出和设置,请执行
$ xrandr --prop
- 要为每个可用输出设置
scaling mode = Full aspect
,请执行$ for output in $(xrandr --prop | grep -E -o -i "^[A-Z\-]+-[0-9]+"); do xrandr --output "$output" --set "scaling mode" "Full aspect"; done
故障排除
模块参数
amdgpu 模块在掩码中存储了几个配置参数 (modinfo amdgpu | grep mask
),这些掩码仅在 内核源代码 中记录。
Xorg 或应用程序无法启动
- 打开 glxgears 后出现“"(EE) AMDGPU(0): [DRI2] DRI2SwapBuffers: drawable has no back or front?"”错误,可以打开 Xorg 服务器,但 OpenGL 应用程序崩溃。
- “"(EE) AMDGPU(0): Given depth (32) is not supported by amdgpu driver"”错误,Xorg 将无法启动。
将 Xorg 下的屏幕深度设置为 16 或 32 将导致问题/崩溃。为了避免这种情况,您应该通过将此内容添加到您的“screen”部分来使用标准的屏幕深度 24
/etc/X11/xorg.conf.d/10-screen.conf
Section "Screen" Identifier "Screen" DefaultDepth 24 SubSection "Display" Depth 24 EndSubSection EndSection
屏幕伪影和频率问题
动态电源管理 可能会导致在以较高频率(高于 60Hz 的任何频率)显示到显示器时出现屏幕伪影,这是由于 GPU 时钟速度管理方式存在问题[1][2]。
一种解决方法 [3] 是将 high
或 low
保存在 /sys/class/drm/card0/device/power_dpm_force_performance_level
中。
为了使其持久,您可以创建一个 udev 规则
/etc/udev/rules.d/30-amdgpu-pm.rules
KERNEL=="card0", SUBSYSTEM=="drm", DRIVERS=="amdgpu", ATTR{device/power_dpm_force_performance_level}="high"
要确定 KERNEL
名称,请执行
$ find /sys/class/drm/ -regextype awk -regex '.+/card[0-9]+' -printf '%f\n'
还有一个 GUI 解决方案 [4],您可以在其中使用 radeon-profile-gitAUR 和 radeon-profile-daemon-gitAUR 管理 “power_dpm”。
更改内核版本也有助于解决此问题。例如,在 6.12.9 版本中似乎已修复。
Chromium 中的伪影
如果您在 Chromium 中看到伪影,强制启用基于 Vulkan 的后端可能会有所帮助。转到 chrome://flags
并启用 #ignore-gpu-blocklist
和 #enable-vulkan
。
R9 390 系列性能不佳和/或不稳定
如果您在使用 AMD R9 390 系列显卡时遇到问题 [5],请将 radeon.cik_support=0 radeon.si_support=0 amdgpu.cik_support=1 amdgpu.si_support=1 amdgpu.dc=1
设置为内核参数,以强制使用 amdgpu 驱动程序而不是 radeon。
如果仍然无效,禁用 DPM 可能会有所帮助,请将 radeon.cik_support=0 radeon.si_support=0 amdgpu.cik_support=1 amdgpu.si_support=1
添加到内核参数中。
“[drm] IP block:gmc_v8_0 is hung!”内核错误导致的冻结
如果您在 GPU 密集型任务期间遇到冻结和内核崩溃,并出现内核错误“[drm] IP block:gmc_v8_0 is hung!” [6],一种解决方法是将 amdgpu.vm_update_mode=3
设置为内核参数,以强制使用 CPU 完成 GPUVM 页表更新。缺点在此处列出 [7]。
屏幕闪烁白色/灰色
当您更改分辨率或连接到外部显示器时,如果屏幕闪烁或保持白色,请添加 amdgpu.sg_display=0
作为内核参数。
在 Vega 显卡上玩游戏时系统冻结或崩溃
动态电源管理可能会由于 GPU 时钟速度管理方式的问题,导致游戏时系统完全冻结。[8] 一种解决方法是禁用动态电源管理,请参阅 ATI#动态电源管理 了解详细信息。
WebRenderer (Firefox) 损坏
当用户强制启用 WebRenderer 时,可能会出现伪影和其他异常(例如,无法选择扩展选项)。解决方法是回退到 OpenGL 合成。
双倍速或“花栗鼠”音频,或者连接 4K@60Hz 设备时没有音频
这有时是由 AMDGPU 设备和通过 HDMI 连接的 4K 显示器之间的通信问题引起的。一种可能的解决方法是通过显示器的内置设置启用 HDR 或“Ultra HD Deep Color”。在许多基于 Android 的电视上,这意味着将其设置为“标准”而不是“最佳”。
独立 amdgpu 显卡的电源管理/动态重新激活问题
如果您遇到内核驱动程序已加载,但独立显卡仍然无法用于游戏或在使用过程中被禁用(类似于 [9]),您可以通过设置内核参数 amdgpu.runpm=0
来解决此问题,这可以防止 dGPU 在运行时动态断电。
kfd: amdgpu: TOPAZ 在 kfd 中不受支持
在系统日志或内核消息密钥环中,可能会出现严重级别错误消息
kfd: amdgpu: TOPAZ not supported in kfd
。如果您不打算使用 Radeon Open Compute,则可以安全地忽略此消息。TOPAZ 不支持它,因为它们是旧 GPU。[10] [11]
由于 MCLK 锁定在 MAX (1000MHz) 或 MIN (96MHz) 导致游戏性能低下(在 6.4 内核上)而导致的高空闲功耗
在高分辨率和刷新率下,MCLK(显存/内存时钟)可能会锁定在最高时钟速率 (1000MHz) [12] [13],从而导致更高的 GPU 空闲功耗。在 Linux 内核 6.4.x 上,MCLK 以最低 (96MHz) 时钟频率运行,导致游戏性能低下 [14] [15]。
这可能是由于显示器没有对受影响的分辨率和刷新率使用具有低 V-Blank 值的协调视频时序 (CVT) 导致的,请参阅 此 gist 以获得解决方法。
挂起到 RAM 失败
当系统进入 S3 时,amdgpu
内核模块尝试将 VRAM 缓冲到 RAM 中,以防止 VRAM 衰减导致的内存丢失,因为 VRAM 衰减没有得到充分刷新。
如果您使用大量 VRAM 并且可用 RAM 不足 这可能会失败,即使有足够的 SWAP 内存可用,因为 IO 子系统可能已在此之前被挂起。
您将看到类似以下内容
kernel: systemd-sleep: page allocation failure: order:0, mode:0x100c02(GFP_NOIO|__GFP_HIGHMEM|__GFP_HARDWALL), nodemask=(null),cpuset=/,mems_allowed=0 kernel: Call Trace: kernel: <TASK> kernel: dump_stack_lvl+0x47/0x60 kernel: warn_alloc+0x165/0x1e0 kernel: __alloc_pages_slowpath.constprop.0+0xd7d/0xde0 kernel: __alloc_pages+0x32d/0x350 kernel: ttm_pool_alloc+0x19f/0x600 [ttm 0bd92a9d9dccc3a4f19554535860aaeda76eb4f4]
作为一种解决方法,用户空间服务可以确保分配足够的 RAM 用于缓冲 VRAM,方法是在系统挂起之前换出足够的 RAM。
关机和挂起失败
hid_sensor_*_3d 内核模块组可能会导致系统在启动、关机和挂起时锁定。进程列表将显示 udev-worker
的多个实例,然后在系统睡眠时无法冻结。
您将看到类似以下内容
kernel: PM: suspend entry (deep) kernel: Filesystems sync: 0.002 seconds kernel: Freezing user space processes kernel: Freezing user space processes failed after 20.004 seconds (1 tasks refusing to freeze, wq_busy=0): kernel: task:(udev-worker) state:D stack:0 pid:479 tgid:479 ppid:422 flags:0x00004006 kernel: Call Trace: kernel: <TASK> kernel: __schedule+0x3db/0x1520 kernel: ? srso_alias_return_thunk+0x5/0xfbef5 kernel: ? __wake_up_common+0x78/0xa0 kernel: ? srso_alias_return_thunk+0x5/0xfbef5
要解决此问题,请通过创建例如 /etc/modprobe.d/blacklist-hid_sensors.conf
来拉黑有问题的模块
blacklist hid_sensor_accel_3d blacklist hid_sensor_gyro_3d blacklist hid_sensor_magn_3d