にほんブログ村 IT技術ブログへ
にほんブログ村

Linux ブログランキングへ

2018年09月23日

世界の全ての機器を制覇するOS NetBSD8.0 UEFI Windowsタブレット T100TAインストール その25 #NetBSD


NetBSD8.0.jpg


今回はWindowsタブレットのT100TAをモデルに
リリースされているNetBSD8.0をUEFIで動かしてみました。
UEFI関係はまだ手動インストールなので、
作業は必要ですがUEFI32bit、64bit両対応なので
だいたい殆どの機種で動くはずです。
勉強を兼ねて是非試してみましょう。



●NetBSD8.0とUEFI
UEFIの動作には複数の条件が必要です。
ここで対象となる機種はWindows8以降のPCです。
CoreiシリーズはLegacyBIOSでも動作しますが、
AtomなどWindowsタブレットはUEFI動作が必須です。
NetBSDは公式でUEFI32bitとUEFI64bitに両方対応しています。
UEFIのROM領域に書き込みが必要になります。
詳しくはこちらの資料をご一読を。



必要条件として

・ストレージにEFIパーティション(FAT32)が必要
・EFIパーティションに/EFI/bootフォルダを作成し、
 ディスクブートローダーのbootx64.efiかbootia32.efiが必要
・ディスクブートローダーのbootx64.efiかbootia32.efiから
 設定ファイルのデータが必要。標準では/boot.cfgがあります。
・efibootmgrなどでUEFIのNVRAMフラッシュROM領域に
 ディスクブートローダーとディスク名のPathを書き込む必要
・例外としてUSBメモリなど外部ストレージはNVRAMに書き込み不要
 外部ディスク単体を識別する仕組み

が必要です。
UEFI関係のインストールは手作業が必要です。
標準イメージが対応しているのは、ブートと既存パーティションへの書き込みです。
手作業で簡単に出来ますので問題ないかと。
課題はストレージのWindowsなどを消さないよう自己責任注意w


●インストールUEFIイメージの書き込みと起動
まずはNetBSD公式HPから8.0のUEFIイメージをダウンロード。
ddコマンドかRawrite32でUSBメモリに焼き込みます。

焼いたらUSBメモリをHUBかなにか使いつつ本体と接続して起動
まずはT100TAをESCかF2を押してUEFI(BIOS)を起動させて
セキュアブートをOFFにします。
その後一番右端のタブに移動してUSBメモリをOverrideから起動。

NetBSDのブートしたらそのまま起動。
ただしT100TAを含むBay-Trail機種では
GPUが切り替わるタイミングでBlackscreenになるので
画面が表示出来なくなります。
i915のGPUをOFFにします。
4)を選択しコマンドラインから

userconf disable i915drmkms
boot

と入力して起動すると画面が表示されるはずです。
タイポ注意。
boot.cfgに追記しておくと楽です。


ブートローダーが起動しましたら英語を選択し
Xを押してターミナルに落ちます。
ここからは公式HPどおりにEFIパーティションを作成し、
bootx64.efiとbootia32.eifファイルを/EFI/boot/にコピーします。

https://wiki.netbsd.org/Installation_on_UEFI_systems/


まず既存のディスクからNetBSDのパーティションを作る必要があります。

sysctl hw.disknames

調べると、
ld0:SSDディスク
wd0:HDDディスク
sd0:USBディスク
と出てくるはずです。
コレを消して作り直します。

dk0とdk1、dk2はディスク内パーティションです。

dkctl ld0 listwedges

とするとld0、SSD内部のパーティションを表示します。
消さないようにご注意を。
パーティションサイズの変更などは多分出来ないので、
UbuntuなどからGpartedで編集してからインストール作業しましょう。
自己責任で。
覚悟が決まったらパーティションを削除します。
勿論元には戻せません。

gpt destroy ld0

新しくパーティションを作成し直します。
ここでディスク名とパーティション名に注意

gpt create ld0
gpt add -a 2m -l "EFI system" -t efi -s 128m ld0
gpt add -a 2m -l NetBSD -t ffs -s 21g ld0
gpt add -a 2m -l swap -t swap ld0

作成されるパーティションの容量は各自好きな容量を設定しましょう。
基本では21gになっていますが、28gくらいは大丈夫かと。
作成したパーティションを確認。

gpt show ld0
パーティションが表示されます。
1:dk0
2:dk1
3:dk2
です。紛らわしいですw
ついでにrdk0もdk0と同じです・・・
他のパーティションを残してあるとこの数値が変わります。
ご注意を。

EFIファイルシステム設定(FAT32)

newfs_msdos /dev/rdk0

HDDをマウント(起動ディスクとルートフォルダはUSB)

mount -t msdos /dev/dk0 /mnt
mkdir -p /mnt/EFI/boot

ブートローダー bootx64.efiとbootia32.efiをコピー

cp /usr/mdec/*.efi /mnt/EFI/boot

アンマウント

umount /mnt

Swap作成

newfs -O 2 dk2

インストール画面に戻る

exit


ここまでで一連のEFIパーティション作成です。
後は通常インストールに戻ってNetBBSDパーティションに
ファイルをインストールしましょう。
ただご注意なのが、UEFIエントリのNVRAMにまだ書き込んでいません。
当然、SSDからブートしませんのでご注意を。
外部USBメモリに書き込んだ場合はOKですけど。


●UEFIのNVRAMに焼き込み。efibootmgr
作成したパーティションの情報をUEFIエントリに書き込む場合、
efibootmgrが必要ですが、まだNetBSDにポートされていません。
UbuntuなどのLiveイメージに入っていますので
そちらを起動して使用します。
Ubuntuの場合はレスキューディスクの機能もあって
ほぼ、efibootmgrが入っています。
今回はlubuntu17.10のISOイメージを
rufusで焼いて使用しました。
UEFI32bitタブレットの場合は更にbootia32.efiを
/EFI/boot/にコピーする必要があります。
勿論、UbuntuにもBlackscreenバグありますのでご注意。
grubのオプションで「E」を押して編集画面になったら、
quietの前にnomodesetかi915.modeset=0を追記してGPUをOFFにしましょう。

まずUbuntuのイメージをISOに焼いたら
USBから起動します。
Blackscreenになる場合は、
grubオプションを開いてquietの前にnomodesetを追加して
F10で起動させます。
まあ端末さえ起動できれば問題ないです。
端末から

findmnt

パーティション名を調べましょう。
Gpartedを使っても良いです。

sudo su
efibootmgr -c -d /dev/mmcblk2p1 -p 1 -L “NetBSD 8.0” -l “\EFI\boot\bootx64.efi”

\マークはLive起動が英語モードでは表示されないので
バックスラッシュに置き換えましょう。
efibootmgrはこんな感じ

・efibootmgrの概略説明 
 -c 書き込み
 -d /dev/mmcblk2p1 ←Ubuntuから見たSSD
 -p 1 ←パーティション名数(dk0の事)1つ目のパーティション
 -L “NetBSD 8.0” ←BIOS表示名
 -l “\EFI\boot\Bootx64.efi” 
  ←NetBSDブートローダーUEFI64bit版
  UEFI32bit版はbootia32.efiを指定
  カタログOSがWindows10(32bitか64bit)の表示で識別します。

-p 1に注意。1つ目のEFIパーティションの事です。
-Lは好きな名前で。
まあ間違えたら消して書き直せば良いんです。
そんなに大きな問題はありませんはい。
僕は-p 1が分からなくて5回位書き直しましたw
これが正しく焼かれるとUEFIの画面でエントリが表示されます。

NetBSD8.0 efibootmgr.jpg

●再起動
これらが無事終了すると
UEFIエントリ画面にNetBSDが表示されます。
選択するとそのままブートして起動します。
もしBlackscreenになる時はまたオプションを追加しましょう。

●まとめ
UEFI32bit、64bitのWindowsタブレットで
NetBSD8.0が無事起動しました。
他のUEFIマシンも同じはずです。
まあバグが出るかもしれませんが報告して、と。
是非使ってみましょう。

posted by kapper at 20:56 | Comment(0) | NetBSD
にほんブログ村 IT技術ブログへ
にほんブログ村

Linux ブログランキングへ