Ubuntu Weekly Recipe

第524回 Hades Canyon/Kaby Lake GのdGPUを有効化する

この記事を読むのに必要な時間:およそ 10 分

Radeon RX Vega Mになんとかして対応する

組み込みのドライバーもAMDGPU-PROも対応していないRadeon RX Vega Mですが,ドライバーが開発されていないわけではありません。むしろ現在絶賛対応中です。おそらくカーネルドライバーは4.18あたりで対応することになるでしょう。カーネル対応と同じくらいのタイミングでファームウェアも正式に提供されるはずです。ユーザランドドライバーは5月半ばにリリースされたMesa 18.1で対応したことになっています。

実はカーネル・ファームウェア・Mesaの開発中のコードはすでに公開されています。そこで今回はこれらを個別にビルドして取り込むことにします。ちなみにこれから説明する方法は,他の新しいデバイスに対してもある程度は有効です。ただし次の点には注意してください。

  • 一部開発中のコードを使うため,普段よりも動作が不安定になる可能性があります。
  • コードをチェックアウト・ビルドしたタイミングによってはPCが起動できなくなる可能性があります。
  • セキュリティアップデートは提供されません。各自で適宜ビルド・インストールしなおしてください。
  • 独自ビルドのカーネルを使うためセキュアブートはオフにしてください。

起動できなくなったとしてもPCが壊れることは稀です。大抵の場合はGRUBから「以前にうまく起動した」カーネルを選択し,CLIからユーザーランドドライバーをダウングレードすれば復旧はできます。当然のことながらプロダクション用途には向きません。本格的に運用する予定であれば,おとなしく新しいカーネル・ユーザーランドドライバーがリリースされるのを待ちましょう。

主な手順は次のとおりです。

  1. ファームウェアをインストールする
  2. 新しい開発中のカーネルをビルド&インストールする
  3. 新しいユーザーランドドライバーをビルド&インストールする

ファームウェアをインストールする

ファームウェアはデバイスを動かすために必要な小さなバイナリブロブです。この言葉が示す範囲は文脈によって多少増減しますが,Linuxの場合はデバイスドライバーがロードするバイナリファイルだと思えばいいでしょう。NICやGPUのような性能要件が厳しいデバイスは,ファームウェアをかんたんに更新できるようにファイルの形で提供されることが増えています。

Ubuntuの場合は,カーネルチームが管理しているlinux-firmwareパッケージ経由でファームウェアが提供されています。このパッケージの大元はkernel.orgのlinux-firmwareリポジトリです。残念ながら6月上旬の時点で,どちらのリポジトリにもVega Mのファームウェアは存在しません。

しかしながらAMDのAlex Deucher(agd5f)ファームウェアを公開してくれているので,それを使うことにします。

$ mkdir ~/firmware && cd $_
$ wget -mnp https://people.freedesktop.org/~agd5f/radeon_ucode/vegam/ -R "index.html*"
(中略)
ダウンロード完了: 20 ファイル,1.2M バイトを 17s で取得 (77.5 KB/s)
$ sudo cp people.freedesktop.org/~agd5f/radeon_ucode/vegam/*.bin /lib/firmware/amdgpu
$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-4.15.0-23-generic
update-initramfs: Generating /boot/initrd.img-4.15.0-22-generic

これでファームウェアのインストールは完了です。

新しい開発中のカーネルをビルド&インストールする

次期カーネル向けのGPUドライバーの開発はfreedesktop.orgのdrmリポジトリで行われます。5月半ばにdrmリポジトリにVega M対応が取り込まれ6月頭にdrmリポジトリの成果がカーネルのリポジトリに取り込まれました。よって現時点でも開発中のカーネルを使えば,Vega M対応コードが有効になっているのです。

さて開発中のカーネルを利用する方法はいくつか存在します。

  • カーネルのソースコードに用意されているdeb-pkgターゲットを用いてビルドする
  • UbuntuのKernel Teamが提供するメインラインビルドを利用する

最近のカーネルは,カーネルソースコードをチェックアウトするだけでカーネルのdebパッケージファイルを作ることができます。最新のカーネルを「そのまま」使いたいのであればこのdeb-pkgターゲットを利用する方法がお手軽です。ただしUbuntu固有のパッチは適用されません。また作られるパッケージそのものも,Ubuntuで使っているカーネルパッケージと様相が異なります。異なるとは言え,作られたカーネルが使えないわけではありません。デバッグ・開発目的で最新のカーネルを使いたい場合は,十分に役にたってくれるでしょう。

パッケージの構成やカーネルコンフィグをUbuntuのカーネルパッケージのそれにある程度揃えたい場合は,後者のメインラインビルドを使います。メインラインビルドの利点のひとつは,既にビルド済みのバイナリが用意されている点です。Kernel Teamは毎日Linusリポジトリの最新版ならびに各バージョンの最新版をそれぞれUbuntuのパッケージと同じ構成でビルドしています。よって,⁠とりあえずビルド済みのバイナリパッケージが欲しい」場合に有用です。

今回は既にVaga M対応がカーネルに取り込まれているので,メインラインビルドのバイナリを使用します※5⁠。方法は最新のビルド結果から必要なdebパッケージファイルをダウンロードしてインストールする,ただそれだけです。

※5
Ubuntu上での最新カーネルのビルド手順は,また近いうちにどこかの機会で。と言ってもとりわけ特別なことをするわけでもないため,記事としての執筆優先度が低くなっていただけです。
$ mkdir ~/kernel && cd $_
$ wget -mnp -erobots=off http://kernel.ubuntu.com/~kernel-ppa/mainline/daily/current/ -R "*lowlatency*" -A "*_all.deb" -A "*_amd64.deb"
(中略)
ダウンロード完了: 14 ファイル,61M バイトを 1m 20s で取得 (785 KB/s)
$ sudo apt install ./kernel.ubuntu.com/~kernel-ppa/mainline/daily/current/*.deb

メインラインビルドでは,Ubuntuのサポートアーキテクチャー(amd64,i386,armhf,arm64,ppc64el,s390x)とフレーバー(generic,lowlatency,generic-lpae,snapdragon)をすべてビルドしています。そこで上記のコマンドでは,allアーキテクチャーとamd64のgenericフレーバーだけダウンロードしています。

なおメインラインビルドはあくまで不具合追求やテスト目的で提供されています。実運用環境で使うことは想定されていないので注意してください。特にセキュリティアップデートに関しては,適用済みのリビジョンを探しだし,そのリビジョンが含まれる日以降のメインラインビルドを自分でダウンロードしインストールし直す必要があります。繰り返しになりますが,実運用環境でVega Mを使いたい場合は,少なくとも18.04向けHWEが有効化されるまで待ったほうが良いでしょう。

新しいユーザーランドドライバーをビルド&インストールする

Vega Mを正しく認識してくれるカーネルとファームウェアを準備できたので,次にユーザーランドドライバー(Mesa)をインストールします。Ubuntuリポジトリの最新版がMesa 18.0(のリリース候補,まもなく18.0.5に更新予定)なので,少なくとも18.1以上に上げる必要があります※6⁠。

※6
コミットログを見る限りMesa 18.1でVega Mに対応しているようなのですが,18.1.0のリリースノートには何も書いていません。もしかすると正式には18.2以降でサポート扱いとするのかもしれません。

Mesaのリリース前の最新版を入手したい場合は,⁠Padoka PPA」として有名なPaulo DiasのPPAを利用します。最新リリース版を提供するPdoka Stable PPAも存在します。また,UbuntuのHWEのテスト用PPAにて,将来的なポイントリリースに向けてのアーリプレビューのような扱いとして,18.1のパッケージが6月13日に公開されました※7⁠。

※7
UbuntuのLTS版では,定期的にアップデート適用済みのインストーラーイメージを提供するポイントリリースを行っています。18.04の最初のポイントリリースである18.04.1は7月ごろを予定しています。さらに10月の18.10リリース後には2回目のポイントリリースである18.04.2が予定されています。18.04.2以降は直近の最新リリースのカーネルやMesaもHWEとして提供される予定です。このためおそらく18.04.2ではさらに新しいMesa 18.2が使われるものと思われます。

Vega M対応を目的とするのであれば,どのPPAを使ってもかまいません。Padoka PPAは安定性は除外し,常に最新を追いかけたい場合に便利です。Ubuntuリポジトリより新しいMesaが欲しいけどより安定していてほしいならPadoka Stable PPAを選ぶことになるでしょう。HWE用PPAは常に最新のMesaがあるとは限りませんが,HWE対応ポイントリリースで採用される予定のMesaをテストしたい場合に便利です。

今回は比較的汎用性の高い,Padoka Stable PPAを使いましょう。いつものPPAの使い方と同じなので至極シンプルです。

$ sudo add-apt-repository ppa:paulo-miguel-dias/pkppa
$ sudo apt full-upgrade
(中略)
以下のパッケージはアップグレードされます:
  libegl-mesa0 libegl1-mesa libegl1-mesa-dev libgbm1 libgl1-mesa-dev libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libgles2-mesa-dev
  libglx-mesa0 libwayland-egl1-mesa libxatracker2 mesa-common-dev mesa-va-drivers mesa-vdpau-drivers
アップグレード: 15 個,新規インストール: 0 個,削除: 0 個,保留: 0 個。
(後略)
$ apt policy libgl1-mesa-dri
libgl1-mesa-dri:
  インストールされているバージョン: 18.1.1-0~b~padoka0
  候補:               18.1.1-0~b~padoka0
  バージョンテーブル:
 *** 18.1.1-0~b~padoka0 500
        500 http://ppa.launchpad.net/paulo-miguel-dias/pkppa/ubuntu bionic/main amd64 Packages
        100 /var/lib/dpkg/status
     18.0.0~rc5-1ubuntu1 500
        500 http://jp.archive.ubuntu.com/ubuntu bionic/main amd64 Packages

何かをインストールするのではなく,既存のパッケージを更新するだけです。最後のコマンドによりMesa 18.1がインストールされていることがわかります。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。