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

サムネイル:Rx480のパッケージ
NOTE:この記事は、2017年3月21日にBloggerに投稿したものを加筆・修正したものです。情報が古くなっている場合があります。

はじめに

今のPCは、UbuntuとWindows10をデュアルブートしています。
これまでは、HD7750という古いものを使ってきましたが、この度Radeon Rx480を購入しました。

Windows側ではRadeonのドライバを適用すればいいんだろうけど、Ubuntu(Linux)ではどうなるんだろう?
その疑問を解決するべく調査し、その課程もまとめました。

NOTE:手順の中には、カーネルのアップデートが含まれます。
バックアップなどを行い、自己責任で実行してください。

環境・パッケージのバージョンなど

OS:Ubuntu 16.04.2 Desktop (64bit)

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

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

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

【参考】
2016年7月26日 Radeon RX 480を早くもサポート ―Linux 4.7がリリース:Linux Daily Topics|gihyo.jp … 技術評論社

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

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

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

実は、Rx480を利用する方法はもうひとつあります。
それは、AMDの提供するLinux向けのドライバを使うこと。
Ubuntu16.04には間に合わなかったニュースを見た覚えがありました。

【参考】
2016年3月18日号 16.04でのfglrxの提供終了・UWN#458:Ubuntu Weekly Topics|gihyo.jp … 技術評論社

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

閑話休題。

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

【参考】
Ubuntu 16.04 その113 – ローリングLTS Enablement Stackモデルの採用へ – kledgeb

第278回 Ubuntuカーネルとの付き合い方:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

そして、HWEカーネルを適用したブログを見つけました。

【参考】
Ubuntuのベースバージョンを変えずにLinuxカーネルをアップグレードする方法 – iberianpigsty

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

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

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

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

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

Fig1.ターミナルでOSのバージョンを表示
Fig1.ターミナルでOSのバージョンを表示

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

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

インストールの手順は以下のページを参考にしました。
【参考】
Ubuntu 16.04 その131 – Ubuntu 16.04.2へアップデートするには・Ubuntu 16.04にUbuntu 16.10のLinux KernelとXスタックをインストールするには – kledgeb

手順1)アップデートの確認

まずは、他のアップデートがないことを確認します(Fig2)。

Fig2.アップデートを確認
Fig2.アップデートを確認

手順2)現在のカーネルのバージョンを確認

この時点でのカーネルのバージョンは「4.4.0-66-generic」でした(Fig3)。
Ubuntuのアップデートを受け取っているだけなら、カーネルのバージョンは4.4でとどまっているハズ。
【カーネルのバージョンを確認するコマンド】
$uname -r

Fig3.アップデート前のカーネルのバージョンを確認
Fig3.アップデート前のカーネルのバージョンを確認

手順3)HWEカーネルをインストールする

コマンドを入力し、パスワードを認証する(Fig4)。
【HWEカーネルをインストールするコマンド】
$sudo apt-get install --install-recommends xserver-xorg-hwe-16.04

Fig4.HWEカーネルのインストールが完了
Fig4.HWEカーネルのインストールが完了

インストールを認証し、処理が進みます。

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

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

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

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

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

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

私の中では、UEFIとは「きれいなBIOS」というイメージです。
カラフルで見やすく、マウスが使えて、絵が動くグラフィカルなBIOSだと思っています。

ググってみて、「セキュアブート」とか「Linuxが起動できない場合がある」とか、なんとなくわかった。
よくわかったのは、Windowsに関する記事ばかりということ。

それに、UbuntuがUEFIでインストールされているがどうかを確認する需要は、ほとんどないということです。
(理解してインストールする方が一般的だろうし)

UEFIはGPT形式、BIOSはMBR形式らしい。
MBRについては調べたことがあるから、ここで少し理解が深まった。
【参考】
BIOS _ UEFI の違い及び MBR _ GPTの違い

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

Fig5.ufiディレクトリは存在しなかった様子
Fig5.ufiディレクトリは存在しなかった

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

【参考】
UbuntuTips_Others_BootOptions – Ubuntu Japanese Wiki

本の虫_ Ubuntuのカーネルをアップデートしたらカーネルパニックが起きた時の解決方法

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

【寄り道】WindowsがUEFIでインストールされているか確認する方法

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

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

このいつもと違う挙動がUEFIでインストールされたものではないかと考えました。
そして、確認する方法を試すと、案の定UEFIでインストールされていました(Fig6)。
【参考】
Windowsシステムの GPTとMBRの見分け方 (UEFIと旧BIOSの見分け方) – ぼくんちのTV 別館

Fig6.デュアルブートしたWindows10はUEFIでインストールされていた
Fig6.デュアルブートしたWindows10はUEFIでインストールされていた

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

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

Fig7.HWEカーネルを適用したあとのカーネルのバージョン
Fig7.HWEカーネルを適用したあとのカーネルのバージョン

ついでにXserverのバージョンも確認してみます(Fig8)。
バージョン1.18になっているので、問題ないと思う。
【Xserverのバージョンを表示するコマンド】
$Xorg -version

Fig8.Xserverのバージョンを確認
Fig8.Xserverのバージョンを確認

そして、肝心のRx480について。
対応できていると信じて、換装して起動してみた。

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

システム情報ではRx480ではなく、型番が表示されているところがちょっと物足りないかな(Fig9)(Fig10)。

Fig9.HD7750はシステム情報に名前が表示される
Fig9.HD7750はシステム情報に名前が表示される
Fig10.Rx480は型番(?)がシステム情報に表示される
Fig10.Rx480は型番(?)がシステム情報に表示される

「Device67 df」はRx480を指しています。
発売前のベンチマーク情報などを見ていた人なら、見たことのある文字列のハズ。

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

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