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

LM-iG430XN4-SH2にUbuntuをインストールした時のメモ.
起きたこと
LM-iG430XN4-SH2 (仕様はこちら) にUbuntuをインストールした.ひとつ問題に直面したのでメモ.どうやら原因はNVIDIAのグラフィックボードにあるようだ.問題とは具体的には,GNU GRUBで
Try Ubuntu without installing
をしてもインストールできないという問題.黒い画面に
Ignoring BGRT: failed to map image memory
という表示が出て,そこから先に進まない.
解決策
これで一応インストールできた.
- GNU GRUBの画面で
e
キーを押して,起動コマンドを編集する画面を開く. - 起動コマンドの
quiet splash
の箇所をnomodeset
に書き換える Ctrl+x
またはF10
で起動

具体的には,元々入力されていた起動コマンドが:
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モードを使用するように指示します。デフォルトの “
[SOLVED] How to set NOMODESET and other kernel boot options in grub2nouveau
”ドライバを使用する場合、nVidiaカードにはこのオプションが必要な場合があることに注意してください。独自のnvidiaドライバをインストールすると、通常このオプションは必要なくなります。したがって、nvidiaドライバをインストールするまで、このオプションを永続的にする必要はありません。
またこんな記述も別のサイトにあった.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 ドライバのリバースエンジニアリングの結果を元に開発しているフリーなドライバーが使われている。nouveau
はmode setting
をサポートしている(むしろnomodeset
では動かない)という触れ込みなのだが、事実として、nomodeset
でなければ動かない。まったく釈然としない。追記:
本の虫: nomodesetとLinuxにおけるGPUドライバーの問題kernel mode setting
を無効にすると、フォールバックとして nVidia がかつて最低限のサポートのために公開していたオープンソースのドライバー、-nv
が使われるらしい。
僕は分かったような,分かってないようなです笑.この2つの記事は矛盾していて,カーネルパラメータに nomodeset
を指定すると,前者は nouveau
が起動するとし,後者は nv
が起動するとしている.どっちなんだ?
NVIDIAドライバとして nouveau
と nv
があるみたい.nv
は2010年に開発が停止して,2017年現在は nouveau
だけが開発されているようだ.(2017年2月28日現在,nouveau
の最新版はv1.0.13で,2016年10月1日リリース).この辺の「開発してる.してない」が関係して,情報が錯綜してそうな気がする.
解決策は何をしているのか?
最後に,カーネルパラメータ(「起動オプション」と同じ意味らしい)の意味を確認する.
カーネルパラメータというのは、カーネルの個々の機能やドライバが解釈して、 それぞれの振る舞いを変更できるようにするためのものです。
カーネルパラメータ自体は、1つの文字列です。
具体的には、機能などを表す「パラメータ名」だけか、 「パラメータ名=値」で値を指定したものを、スペースで連結した形式になります。
Linuxのカーネルパラメータをいじくってみる – いますぐ実践! Linuxシステム管理 / Vol.237
linux
かkernel
で始まる行に、カーネルとそのパラメータが記述されています。
とあるので,先述の
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
に置き換える前の quiet
と splash
の意味は分かりやすい.
パラメータ | 概要 |
---|---|
root=デバイス等 | ルートファイルシステムの指定 |
init=プログラム | 最初に起動されるプログラムの指定(init の代わり) |
quiet | メッセージの出力を抑制する |
debug | メッセージの出力を冗長にする(デバッグ用) |
vt.handoff=値 | 仮想ターミナルを指定した値に切り替える |
single | シングルユーザモードで起動する |
splash | スプラッシュ画面を表示する |
text | テキストモードで起動する |
この記事のおかげで、無事にインストールできました。
本当に助かりました。
ありがとうございました!
y_y さん
コメントありがとうございます〜!お役に立てて幸いです!
Ubuntuのノウハウはみんなで共有できて面白いですね.