背景:
我给自己买了一个雷电 eGPU 外壳 (Razer Core),我想在 Linux 上将它与我的 AMD GPU (Rx480) 一起使用。我使用内核 5.0。在 PC 运行时插入 eGPU 似乎可行。
> DRI_PRIME=1 glxinfo | grep "OpenGL renderer"
OpenGL renderer string: AMD Radeon (TM) RX 480 Graphics (POLARIS10, DRM 3.27.0, 5.0.16-050016-generic, LLVM 7.0.0)
但是,拔下 GPU 会导致系统冻结。使用以下命令禁用 PCI 设备也会导致冻结:
> sudo sh -c 'echo 1 > /sys/bus/pci/devices/0000:06:04.0/remove'
显然,原因是显卡驱动程序 (amdgpu) 仍在使用该设备。因此,我尝试结束显卡驱动程序:
> sudo modprobe -r amdgpu
modprobe: FATAL: Module amdgpu is in use
使用驱动模块的应用程序是显示管理器(lightdm 1.26.0)。
有效的方法是切换到 Ctrl-Alt-F1 控制台之一并执行:
> sudo service lightdm stop
> sudo modprobe -r amdgpu
> sudo sh -c 'echo 1 > /sys/bus/pci/devices/0000:06:04.0/remove'
[Unpluging the eGPU]
> sudo service lightdm start
然后切换回桌面(Ctrl-Alt-F7)。但是,这样会丢失所有桌面应用程序。
问题:
我能否在不关闭 lightdm 的情况下删除 amdgpu 驱动程序?或者我可以重新启动 lightdm 而不会丢失所有桌面应用程序吗?
答案1
从技术上来说这是可行的。不过,AMD 并未在 Linux 上实现该功能。
static void
amdgpu_pci_remove(struct pci_dev *pdev)
{
struct drm_device *dev = pci_get_drvdata(pdev);
#ifdef MODULE
if (THIS_MODULE->state != MODULE_STATE_GOING)
#endif
DRM_ERROR("Hotplug removal is not supported\n");
drm_dev_unplug(dev);
amdgpu_driver_unload_kms(dev);
pci_disable_device(pdev);
pci_set_drvdata(pdev, NULL);
drm_dev_put(dev);
}
答案2
也许你会幸运地解除 GPU 绑定:
echo -n "0000:06:04.0" > /sys/bus/pci/drivers/amdgpu/unbind
然后删除。
根据这个错误: https://bugs.freedesktop.org/show_bug.cgi?id=111229 在内核 4.19 上可以解除绑定,并且已在内核 5.3 上修复。