NVIDIA搭載機にUbuntuをインストールできない問題の解決

最終更新日

LM-iG430XN4-SH2にUbuntuをインストールした時のメモ.

起きたこと

LM-iG430XN4-SH2 (仕様はこちら) にUbuntuをインストールした.ひとつ問題に直面したのでメモ.どうやら原因はNVIDIAのグラフィックボードにあるようだ.問題とは具体的には,GNU GRUBで

Try Ubuntu without installing

をしてもインストールできないという問題.黒い画面に

Ignoring BGRT: failed to map image memory

という表示が出て,そこから先に進まない.

解決策

これで一応インストールできた.

  1. GNU GRUBの画面で e キーを押して,起動コマンドを編集する画面を開く.
  2. 起動コマンドの quiet splashの箇所を nomodeset に書き換える
  3. Ctrl+x または F10 で起動
nomodeset
緑で示した場所!

具体的には,元々入力されていた起動コマンドが:

setparams ‘Try Ubuntu without installing’
 set gfxpayload=keep
 linux /casper/vmlinuz.efi file=/cdrom/pressed/ubuntu.seed boot=casper quiet splash — debian-installer/language=ja keyboard-configuration/layoutcode?=ja keyboard-configuration/modelcode?=jp106
 initrd /casper/initrd.lz

これを編集して

setparams ‘Try Ubuntu without installing’
 set gfxpayload=keep
 linux /casper/vmlinuz.efi file=/cdrom/pressed/ubuntu.seed boot=casper nomodeset — debian-installer/language=ja keyboard-configuration/layoutcode?=ja keyboard-configuration/modelcode?=jp106
 initrd /casper/initrd.lz

とするだけ.これで何故うまく行くのか分かってない…笑.

原因はNVIDIAドライバ

本件はNVIDIAのグラフィックドライバが関係する問題だそうだ.コマンド nomodeset は何を意味しているのか?それに対する回答がここ(英語)にある.2010年の記事だから古い.ざっくりと機械翻訳するとこんな感じ.

nomodeset

最新のカーネルはビデオモードの設定をカーネルに移しました。したがって、ハードウェア固有のクロックレートとレジスタのビデオカード上のすべてのプログラミングは、Xサーバが起動したときにXドライバではなくカーネルで行われます。これにより、高解像度の見栄えのよいスプラッシュ(起動)画面とフリッカーブートスプラッシュからログイン画面への自由な移行。残念なことに、いくつかのカードでは、これは正しく動作しませんし、あなたは黒い画面で終わる。 nomodeset パラメータを追加すると、カーネルはビデオドライバをロードせず、XがロードされるまでBIOSモードを使用するように指示します。

デフォルトの “nouveau”ドライバを使用する場合、nVidiaカードにはこのオプションが必要な場合があることに注意してください。独自のnvidiaドライバをインストールすると、通常このオプションは必要なくなります。したがって、nvidiaドライバをインストールするまで、このオプションを永続的にする必要はありません。

[SOLVED] How to set NOMODESET and other kernel boot options in grub2

またこんな記述も別のサイトにあった.2012年の記事だから少し古いけど,たぶん2017年でも通用する.

nomodeset は何をしているのかというと、kernel mode setting を無効にする。mode settingとは、画面の解像度やビット数を変更するための規格である。これは、カーネルスペース (Linux) で行うこともできるし、ユーザースペース (X) で行うこともできる。カーネルスペースで行う利点は、パフォーマンスやフリッカーのない変更などの様々な利点をもたらすし、セキュリティ上も、ユーザースペースで動くコードに不必要な権限を与える必要がないという点で優れている。Linux カーネルは 2.6.28 で Intel から GEM を提供されて、カーネルスペースでのmode settingに移行した。

ところが、Intel や ATI の GPU はそれなりにサポートされているのだが、 nVidia は相変わらずのバイナリブロブでドライバーを提供しており、この変更にも追従していない。結果として、ブートに失敗する。私は nVidia の GPU を使用しているので、これは問題になる。

しかしよくわからないのだが、Ubuntu の Live CD には nVidia のプロプライエタリなバイナリブロブは含まれていない。nouveauという、nVidia ドライバのリバースエンジニアリングの結果を元に開発しているフリーなドライバーが使われている。nouveaumode setting をサポートしている(むしろ nomodeset では動かない)という触れ込みなのだが、事実として、 nomodeset でなければ動かない。まったく釈然としない。

追記:kernel mode setting を無効にすると、フォールバックとして nVidia がかつて最低限のサポートのために公開していたオープンソースのドライバー、 -nv が使われるらしい。

本の虫: nomodesetとLinuxにおけるGPUドライバーの問題

僕は分かったような,分かってないようなです笑.この2つの記事は矛盾していて,カーネルパラメータに nomodeset を指定すると,前者は nouveau が起動するとし,後者は nv が起動するとしている.どっちなんだ?

NVIDIAドライバとして nouveaunv があるみたい.nv は2010年に開発が停止して,2017年現在は nouveau だけが開発されているようだ.(2017年2月28日現在,nouveau の最新版はv1.0.13で,2016年10月1日リリース).この辺の「開発してる.してない」が関係して,情報が錯綜してそうな気がする.

解決策は何をしているのか?

最後に,カーネルパラメータ(「起動オプション」と同じ意味らしい)の意味を確認する.

カーネルパラメータというのは、カーネルの個々の機能やドライバが解釈して、 それぞれの振る舞いを変更できるようにするためのものです。

カーネルパラメータ自体は、1つの文字列です。

具体的には、機能などを表す「パラメータ名」だけか、 「パラメータ名=値」で値を指定したものを、スペースで連結した形式になります。

linuxkernel で始まる行に、カーネルとそのパラメータが記述されています。

Linuxのカーネルパラメータをいじくってみる – いますぐ実践! Linuxシステム管理 / Vol.237

とあるので,先述の

linux /casper/vmlinuz.efi file=/cdrom/pressed/ubuntu.seed boot=casper nomodeset — debian-installer/language=ja keyboard-configuration/layoutcode?=ja keyboard-configuration/modelcode?=jp106

のすべてがカーネルパラメータを指定するコマンドでしょうね.具体的には以下の6つがカーネルパラメータの指定かな?

  • file=/cdrom/pressed/ubuntu.seed
  • boot=casper
  • nomodeset
  • debian-installer/language=ja
  • keyboard-configuration/layoutcode?=ja
  • keyboard-configuration/modelcode?=jp106

全ての意味は分からないけど, nomodeset に置き換える前の quietsplash の意味は分かりやすい.

パラメータ概要
root=デバイス等ルートファイルシステムの指定
init=プログラム最初に起動されるプログラムの指定(initの代わり)
quietメッセージの出力を抑制する
debugメッセージの出力を冗長にする(デバッグ用)
vt.handoff=値仮想ターミナルを指定した値に切り替える
singleシングルユーザモードで起動する
splashスプラッシュ画面を表示する
textテキストモードで起動する
こんな感じ.

2件のフィードバック

  1. この記事のおかげで、無事にインストールできました。
    本当に助かりました。
    ありがとうございました!

  2. y_y さん
    コメントありがとうございます〜!お役に立てて幸いです!
    Ubuntuのノウハウはみんなで共有できて面白いですね.

コメントを残す

%d人のブロガーが「いいね」をつけました。