Rx480のためにUbuntu 16.04のカーネルを4.8(HWE)にアップデートした話


この記事では、Radeon Rx480をUbuntu16.04で動かすまでの経緯をまとめてある。



Windows側でゲームをするために、新しくRadeon Rx480を買った。
UbuntuとWin10をデュアルブートしているため、Ubuntu側でもRx480に対応している必要がある。

Rx480(460、470も含めたシリーズ)のためにカーネルをアップデートする記事がなかったので、書くことにした。
カーネルのアップデートは自己責任で行うこと。

▼環境

OS:Ubuntu 16.04.2 (64bit) LTS

▼目次


  1. - Rx480を購入。Ubuntuでの対応は?
  2. - 16.04でありながら、16.10のカーネルを利用できる仕組みとは
  3. - HWEカーネルを適用する方法
  4. - 【寄り道】OSがUEFIでインストールされているかどうかを確認する
  5. - 【番外】WindowsがUEFIでインストールされているか確認する方法
  6. - カーネルをアップデートし、Rx480を使ってみた


▼Rx480を購入。Ubuntuでの対応は?

Windowsでは対応したドライバが入っていれば、カードを差し替えるだけで済む。
OSやbitのバージョンが変わらないなら、一つのドライバで複数のカードに対応できるからだ。

しかし、Ubuntuではどうかが気になった。
調べてみると、2016年の6月末のRx480の発表を受けて、Linuxカーネルは1ヶ月後にバージョン4.7で対応した。



Ubuntu 16.04を利用していて、提供されているカーネルはバージョン4.4だった。
16.04がRx480の発表よりも前に公開されているのだから、未対応なのは明らかだ。

「カーネルのアップデートは不安定になると聞くし、何かいい方法はないだろうか」

▼16.04でありながら、16.10のカーネルを利用できる仕組みとは

実は、Rx480を利用する方法はもうひとつある。
AMDの提供するLinux向けのドライバを使うこと。
これはUbuntu16.04には間に合わなかったということを覚えていた。


新たなドライバ"AMDGPU-PRO Driver"はベータ版がリリースされているらしいが、現在はどこまで進んでいるのか、私は把握できてない。
日本語の資料があまりにも少ないからだ。


閑話休題。

そうして調べていると、ぴったりの仕組みを見つけることができた。
HWEというカーネルを適用すれば、16.04以降に登場したハードウェアに対応できるという。
以下のサイトが、とてもわかりやすく解説してくれている。



同じようにカーネルをアップデートした人の記事も紹介したい。


これだ!
これでカーネルのバージョンが4.8になれば、Rx480に対応できるだろう。

このHWEカーネルを適用するには、Ubuntuのバージョンが16.04.2である必要がある。

「16.04.2……? そんなアップデートあったかな。いろいろ調べないと」


▼HWEカーネルを適用する方法

バージョン番号の小数点以下が変わるようなマイナーアップデートは、それほど重要ではないと思っていた。
Ubuntuのバージョンを確認してみると、いつの間にか16.04.2になっていた(Fig1)。
最近のアップデートで適用されていたようだ。
コマンド:$lsb_release -d
Fig1.ターミナルでOSのバージョンを表示



「Ubuntu 16.04.2」はポイントリリースと呼ばれ、Windowsのサービスパックみたいなものです。
ポイントリリースは、LTSリリースの「Ubuntu」にのみ設定されるリリースです。

新規で16.04.2をインストールした場合は、HWEカーネルを受け取る準備ができているという。
このPCは2016年の5月に16.04を導入したため、手動でインストールする作業が必要になる。


インストールの手順は以下のページを参考にする。
(何から何までお世話になっている。すごい)


まずは、他のアップデートがないことを確認する(Fig2)。
Fig2.アップデートを確認
ちなみに、この時点でのカーネルのバージョンは「4.4.0-66-generic」である(Fig3)。
Ubuntuのアップデートを受け取っているだけなら、カーネルのバージョンは4.4でとどまっているハズだ。
Fig3.アップデート前のカーネルのバージョンを確認

コマンドを入力し、パスワードを認証する(Fig4)。
$sudo apt-get install --install-recommends xserver-xorg-hwe-16.04
Fig4.HWEカーネルのインストールが完了
途中でダウンロードを認証し、いろいろとインストール。

さて、ここでちょっとつまづいた。
UbuntuをUEFIでインストールしている場合、追加のインストールが必要になるとのこと。

「……UEFI BIOSだけど、それとは違うのか? UEFIでインストールするってなんだ?」


▼【寄り道】OSがUEFIでインストールされているかどうかを確認する

完璧主義の私は、失敗しないために安全を確保したい性格だ。

必要な追加インストールをしなかったら、どうなってしまうのか?
また、必要ないのに追加のインストールをしてしまったら、どうなるのか?
それが、とても気になる。

先に進むためには、このPCのUbuntuがUEFIでインストールされているかどうかを確かめなくてはならない。


私の中では、UEFIとは「きれいなBIOS」だ。
カラフルで見やすく、マウスが使えて、絵が動くグラフィカルなBIOSだとしか思っていなかった。
だからググる。

「セキュアブート」とか「Linuxが起動できない場合がある」とか、なんとなくわかった。
よくわかったのは、Windowsに関する記事ばかりということ。
それに、UbuntuがUEFIでインストールされているがどうかを確認する需要は、ほとんどないということだ。
(理解してインストールする方が一般的だろう)

UEFIはGPT形式、BIOSはMBR形式らしい。
MBRについては調べたことがあるから、ここで少し理解が深まった。



ようやくたどり着いた解法は、「特定のディレクトリが存在しているかどうか」だ。
efiディレクトリが存在すれば、UEFIでインストールされている証明になる(Fig5)。
場所は「/sys/firmware/」。
コマンド:$ls -al /sys/firmware/efi/

Fig5.ufiディレクトリは存在しなかった
確かにefiディレクトリは存在しない。
これなら、MBR形式でインストールされたと見ていいだろう。
まぁ、失敗しても起動時に過去のカーネルを選択できるらしいし、問題があればそれを使おうと思っていた。




「インストールは決行する。とりあえずやってみよう」


▼【番外】WindowsがUEFIでインストールされているか確認する方法

私には、ずっと引っかかっていたことがあった。
LinuxとWindowsをデュアルブートすれば、GRUBメニューから起動するOSが選べるハズだ。

だけど、このPCでは、Windows10が入ったSSDのドライブを指定しても起動に失敗する。
代わりに、UEFI BIOSのブートメニューから指定する必要がある。
もっと正確にいえば、Windowsの入ったドライブではなく、いつの間にか追加されていた「Windows Boot Manager」を選択しないと起動してくれない。

このいつもと違う挙動がUEFIでインストールされたものではないかと考えた。
そして、確認する方法を試すと、案の定UEFIでインストールされていた(Fig6)。
Fig6.デュアルブートしたWindows10はUEFIでインストールされていた


カーネルをアップデートし、Rx480を使ってみた

UbuntuがUEFIでインストールされていないことを確認したので、追加のインストールをせずに再起動した。
結果、カーネルのバージョンは無事に4.8になっていた(Fig7)。
Fig7.HWEカーネルを適用したあとのカーネルのバージョン

ついでにXserverのバージョンも確認してみる(Fig8)。
問題ないようだ。
Fig8.Xserverのバージョンを確認

そして、肝心のRx480はどうだろうか。
対応できていると信じて、換装して起動してみた。


画面は正常に表示できていた。
Ubuntu側ではゲームをしないので確認が不十分かもしれない。
が、普段使っているドローソフトのKritaが問題なく動いているので、OpenGLが正常に動いていると見ていいだろう。

システム情報ではRx480ではなく、型番が表示されているところがちょっと物足りない(Fig9)(Fig10)。
Fig9.HD7750はちゃんと名前が表示される
Fig10.Rx480は型番(?)で表示される
「Device67 df」はRx480を指す。
発売前のベンチマーク情報などを見ていた人なら、見たことのある文字列のハズだ。


結果として、不具合なくRx480に対応できてよかった。
不具合があれば、追記します。

UEFIに関しては、今度Ubuntuをインストールし直す機会にでも注意することにしよう。