2

皆さん、こんばんは。iMac デュアルブート OS-X と Ubuntu のブート プロセスを可能な限り短縮しようとしています。これまでのところ、AppleのEFIブートマネージャーから直接grub(およびその後Ubuntu)を起動できました。AppleのファームウェアがOsX自体を起動するために期待するものとして、grubバイナリを(ハードリンク、エイリアス、フォルダのツリーなどを介して)マスカレードすることでこれを達成しました。(例:

$>sudo ln EFI/ubuntu/grubx64.efi System/Library/CoreServices/boot.efi

)
今、私はさらに一歩進んで、GRUB を排除しようとしています。最新の Linux ディストリビューションには EFI スタブがカーネルに組み込まれていることを知っています。そのため、原則として、GRUB2 などの (セカンダリ) ブート マネージャーを必要とせずに (EFI/UEFI ファームウェアを介して) カーネルを直接起動できます。 、 例えば。(このような:

$>sudo ln vmlinuz System/Library/CoreSerivces/boot.efi

) Apple の問題は、それが「独特な」EFI 実装であることです。Linux カーネルの EFI スタブが機能するためには、パラメーターを渡すことができる必要があります (ルート パス、初期 RAM ディスクなど)。これは、セカンダリ ブート マネージャー (GRUB、rEFInd、ELILO など) を使用して簡単に実現できます。彼らはコマンドライン文字列をEFIバイナリに渡します)が、これはまさに私がバイパスしたいものです。Apple の EFI ファームウェアによってロードされた任意の EFI バイナリにパラメータを渡す方法はありますか? (私は com.apple.Boot.plist で試しましたが、役に立ちませんでした。) または、代わりに、ブートプロセス中にコマンドラインなしで (おそらくテキストファイルを介して) Linux カーネルにパラメータを渡す方法はありますか?

4

2 に答える 2

3

ビンゴ!!!!Apple の EFI は機能しており、ソリューションは予想よりも簡単です。複雑なフォルダ階層は必要ありません。単純に小さな HFS+ パーティションを作成し、そこに Linux カーネルの efi スタブ (例: vmlinuz-3.13.0-46-generic.efi.signed) をコピーし、.efi で終わるようにファイルの名前を変更します(Apple の EFI は、 .efi 拡張子で終わらない) vmlinuz.efi のように、初期 RAM ディスクもコピーし (例: initrd.img-3.13.0-46-generic)、おそらく initrd.img のようなより単純なものに名前を変更してから、efibootmgr を使用して次のように新しいブート エントリを作成します (X は HFS+ パーティションを作成したハード ドライブであり、Y はパーティション自体の番号であると仮定します)。

efibootmgr -d /dev/sdX -p Y -c -L "Ubuntu (EFI-Stub)" -l /vmlinuz.efi -u "root=UUID=b0c4efb9-95b0-4e5d-98e1-8beb43f413c2 ro rootflags=subvol=@  quiet splash initrd=\initrd.img"

オプションで、「alt」キーを押しながらシステムの電源を入れたときに表示されるアイコンとラベルを作成することもできます。それはうまく機能しており、努力する価値もあります。ディスプレイドライバーは EFI によって直接構成され、GRUB 経由で起動する場合は表示されない詳細が表示されます!!!

アップデート

16.10 までの Ubuntu バージョンでは、どういうわけか動作しなくなりました。X は KMS 設定を検出できなかったため、起動時に失敗しました。幸いなことに、Ubuntu 17.04 では、再び機能しています。組み込みのブート マネージャーに表示されるアイコンについては、次のようにします。

1) OSX を起動します。

2) Linux ブート ローダー (この例では vmlinuz.efi) が存在する HFS+ パーティションを任意の方法でマウントします。

3) Web から .icns 形式の Ubuntu ロゴを取得し (サイズは 512x512 ピクセルを超えないように注意してください)、ブートローダーが配置されているフォルダーとまったく同じフォルダーに配置します。.VolumeIcon.icns という名前にする必要があります

4) 次のようにブートローダーを bless します:

sudo bless --folder /Volumes/<MyBootPartitionMountPoint> --file /Volumes/<MyBootPartitionMountPoint>/vmlinuz.efi --label 'Ubuntu 17.10' 

終了した。

これで、マシンの電源を入れるときに Alt キーを押したままにすると、組み込みの EFI ブート マネージャーが開始され、Apple の横に素敵な Ubuntu ロゴが表示されます。

最後に 2 つ。

1) 組み込みのブート マネージャーのアイコンを設定するプロセスは、実際にはオプションです。あまり使いません。実際、ブート マネージャー画面で Ubuntu アイコンをクリックして Ubuntu を起動しようとすると、関連する EFI ブート変数が読み取られないため、Linux は起動しません。プリティーアイキャンディーのみです。

2) 重要: root=UUID=blahblah を/ Linux パーティションの実際のUUIDに置き換えることを忘れないでください。サンプル コードのこれは単なる例です。

楽しみ

于 2015-05-06T11:27:37.400 に答える