今回は、別件(お遊び)で、32bitUEFIのみ対応しているが、64bitアーキテクチャに対応しているハードウェア(※以下、本ハード)に対してのブート用に、ブートローダをmakeしたので、その際のメモを作成しました。
作業前提について
今回は、インストール用USBを作成する前提で記載しています。
32bitUEFIブートローダ入り、64bit版インストールUSBの作成手順
カンタンに手順を纏めると、以下が必要になります。
- 64bit版のインストーラを用意する
- 32bit版のブートローダを用意する ※Ubuntu系は必要。CentOS系は不要。
- grub.cfgを書き換える
64bit版のインストーラの用意
各種、任意のLinux(ディストリビュージョン)のインストーラを用意します。
ここでは、仮に「Ubuntu」を例に記載します。
※実際にメインで検証したのは「Lubuntu 20.04 LTS」となります。
インストールISOイメージをダウンロードし、USBメモリに書き込みます。
Windows から書き込みには「Rufus」等のソフトウェアを使えば書き込みできます。
Linux系なら、ddコマンドで書き込めます。
32bit版のブートローダを用意
UEFI32bitでブートするために「bootia32.efi」が必要です。
ここでは、ソースコードからmakeする際の手順を纏めています。
※なお、「CentOS」系の場合は不要です。(インストーラに「bootia32.efi」が組み込まれています)
ブートローダ( 「bootia32.elf」 )作成手順
まず、Linux環境を用意してください。
今回は、仮想環境にインストール済の「Lubuntu 20.04 LTS」を使用しました。
※インストール方法は、以下の記事に記載しています。
以下、ターミナルで以下を実行していく。
※インストール(apt-get)しているパッケージについては、試行錯誤してたので、不要なパッケージが含まれているかもしれません。(不要だと判断できる方は、適時判断してください。)
$ mkdir tmp_efi32bit
$ cd ./tmp_efi32bit
$ sudo apt-get update -y
$ sudo apt-get install -y git build-essential
$ sudo apt-get install -y bison libopts25 libselinux1-dev autogen m4 autoconf help2man libopts25-dev flex libfont-freetype-perl automake autotools-dev libfreetype6-dev texinfo
$ sudo apt-get install -y autoconf automake libtool autoconf-doc libtool-doc shtool pkg-config
$ git clone git://git.savannah.gnu.org/grub.git
$ cd grub
$ ./bootstrap
$ ./autogen.sh
$ ./configure --with-platform=efi --target=i386 --program-prefix=''
$ make
$ cd grub-core/
$ sudo ../grub-mkimage -d . -o bootia32.efi -O i386-efi -p /boot/grub/ ntfs hfs appleldr boot cat efi_gop efi_uga elf fat hfsplus iso9660 linux keylayouts memdisk minicmd part_apple ext2 extcmd xfs xnu part_bsd part_gpt search search_fs_file chain btrfs loadbios loadenv lvm minix minix2 reiserfs memrw mmap msdospart scsi loopback normal configfile gzio all_video efi_gop efi_uga gfxterm gettext echo boot chain eval
$ ls -l bootia32.efi
-rw-r--r-- 1 root root 737280 11月 14 19:05 bootia32.efi
$
USBメモリに「 bootia32.elf 」を配置
コピペが終わったら、32bitのブートイメージ「bootia32.efi」を「EFI/BOOT」配下にコピーします。
「grub.cfg」の書き換え
インストール対象のCPUによって、カーネル起動オプションを変更する必要がある。
※「Bay-Trail」など、フレームバッファに関する問題があり、カーネルモードセッティング(KMS)を無効化する必要がある様子。(i915.modeset=0を追加する)
menuentry "Ubuntu (safe graphics)" {
set gfxpayload=keep
linux /casper/vmlinuz file=/cdrom/preseed/ubuntu.seed maybe-ubiquity quiet splash nomodeset i915.modeset=0---
initrd /casper/initrd
}
デバッグ出力
なお、デバッグ出力する際は「grub.cfg」に以下を追加します。
# デバッグログを1ページ単位で表示(moreコマンドと同等)
set pager=1
# デバッグ出力を有効化する
set debug=all
まとめ
調査した限りの内容を纏めてみましたが、カーネル起動に失敗するハードウェア(Q584/H等)もあり、そして、その原因は明確に分からない事が多いと感じています。
(デバッグ出力したとしても、ソースコード上の特定行で止まったとしても、その根本原因は不明等、カーネルに関する詳細知識が無いと、歯が立たない印象)
コメント