背景:
Thunderbolt 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コンソールの1つに切り替えて、以下を実行することです。
> 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を再起動できますか?
技術的には可能です。ただし、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);
}