結論から言うとうまくいかない。
もう少し試してみたかったけど、ちょっとそういう気分ではないので、とりあえず書きかけの文を見直して投稿。

FreeBSDはGPTには対応しており、BIOS+GPTという組み合わせでは、例えば「FreeBSD GPT+ZFS boot on 9.0-CURRENT」のように成功例がいくつも記事として出ている。

但し、現在のFreeBSDのGPT対応はちょっと中途半端で、BIOSブートでは他のOSとのデュアルブートに対応していない。

現状のFreeBSDのブートシーケンスは下記の通り。

☆BIOSブート(MBR)
BIOS→boot0→(boot1→boot2)→/boot/loader→kernel

☆BIOSブート(GPT)
BIOS→pmbr→gptzfsboot→/boot/loader→kernel

GPTでBIOSブートの場合はboot0の変わりにpmbrが使われるが、これが普通のMBRブートと仕様が異なり、他のOSとの共存が出来ない。
#最も、boot0と仕様が同じならわざわざ別のプログラムを作ったりしないのではあるが。

通常のMBRブートはパーティションの先頭1ブロック(上図ではboot1)を読み込んでそこに制御を渡す。しかしpmbrはGPT上でタイプが"freebsd-boot"のパーティションを見つけると、その内容64KB(上図ではgptzfsboot)を一気にディスクから読み込んで制御を渡す仕様となっている。

従って、選択したパーティションのboot1(PBR)に動作を渡す、いわゆるチェインローダ機能を用いて複数OSの起動を行うMBRブートローダをpmbrの代わりに導入すると、FreeBSDの起動は行えなくなる。

GPTを使い、他のOSとFreeBSDのマルチブートを行うには、上記pmbrとgptzfsbootを使わず、grubのFreeBSDブート機能を用いることで可能となる。本方式は「QuadBoot」に解説されている。

#余談になるが、欧米ではgrubの派生にburgと付ける等、ソフトウェアの名前の付け方に「遊び」が多いような気がする。

前置きが長くなったが、今回は上記QuadBoot方式を用いてEFIでFreeBSDを起動できないかを試してみた。

環境としては前回の記事で構築したgrub-efi+Ubuntuを用い、ディスクの空き領域にFreeBSDをインストールする形となる。

1.PC-BSDをトライ
先日FreeBSD Install 泥縄記録で書いたように、いい加減sysinstallにも飽きたので、PC-BSDを試してみる。
ディスクのフォーマット画面の所で、既存のGPTパーティションをきちんと認識して表示してくれるのだが、何故か新たにGPTパーティションを追加することが出来ず、GPTでは既存のパーティションを破棄して新たにHDD全体をGPT用にフォーマットし直す今年か出来ないようなので、結局PC-BSD利用は断念。
#現状のOS側のGPTサポート状況を考えれば、止む無しか。

2.FreeBSDのインストーラを使う
結局おなじみの手順に戻る(T_T)

(1)
fixitに入ってgpartを使い、freebsd-swapとfreebsd-ufsを追加して、freebsd-ufsをnewfsを使いフォーマット。
この際、bootcode/partcodeをHDDに書かない事。

(2)
先ほど作ったfreebsd-ufsパーティションを/mntにマウントし、
baseとkernelsをインストール。

(3)
/etc/fstabを作成

(4)
#以下はUbuntu側の設定。
ubuntuをbootし、/etc/default/grubを編集。
ここでは
GRUB_HIDDEN_TIMEOUT
GRUB_HIDDEN_TIMEOUT_QUIET
をコメントアウト
(5)
grubのFreeBSD用エントリを作成
/etc/grub.d/のカスタムエントリにFreeBSDの記述を追記。
(以下は一例)
menuentry "Boot FreeBSD" --class freebsd {
insmod ufs2
 
set root=(hd0,gpt7)
  kfreebsd
/boot/loader
}

(6)
update-grubを実行し、作成されたgrub.cfgの内容を確認。

これで設定は完了。

マシンをリブートしてGrubメニューの表示からFreeBSDを選択。
……しようとしたが、grubメニューにFreeBSDが表示されない。
何度か設定を見直したものの原因不明。
仕方が無いのでgrubのコマンドラインに入り、上記FreeBSD起動関連のコマンドを手動で行い、ブートを試みる。

冒頭に書いたように起動は失敗。現象としては、画面上に何らかのパターンが表示され、FreeBSD側に処理が移ったように見えるが、その後無反応。


考えて見れば、EFI環境下ではキー入力、画面表示共にEFI関数を利用して行う必要があり、そうした処理を持たないFreeBSDの/boot/loaderがまともに動かないのはある意味当然ではある。
QuadBoot」の記事がうまくいったのは、AppleのEFIにBIOSエミュレーション機能があるためと推測される。

……当初はこの後Mac miniへのインストールも試すつもりだったが、とりあえず出来たところまでを投稿。