UEFIの使い方を考える

注記:文中で参照しているELILOはItanium(IA-64)用の古いブートローダーで、既にメンテナンスされていません。実際の環境ではBootmgrやGRUBが使われています。
3
(change of )*state @TuvianNavy

世の中に公開されてる星の数ほどのswagger spec、どこかで誰かはcurlでそれを叩いてるはずだけど、秀和システムの解析マニュアルみたいな本になぜかならないっていう。。

2020-06-28 12:31:37
(change of )*state @TuvianNavy

UEFI Chronology gist.github.com/TuvianNavy/854… 今年の後半はこれをもうちょっと読み応えのあるものに成長させようかなあ

2020-06-28 13:17:24
(change of )*state @TuvianNavy

UEFIはなんかターミノロジーがいけてないんだよ、EFIかUEFIかはっきりしろって感じだしGPTは肝機能かよって思うしESPは謎の金色のシール貼るおまじないとかIPsecとか思うし極めつけはプロトコル、あれはコールバック関数のインタフェース登録スロットなんだからもうちょっとそれを示してほしい

2020-06-29 21:02:16
(change of )*state @TuvianNavy

rx2600かzx6000(広く入手可能な最初のEFI採用機器、Itanium2)を買わないと試せないことがあってこれコスパ的に無理すぎる。。

2020-06-28 13:22:24
(change of )*state @TuvianNavy

品薄で中古価格も安くない(たまにシリアスな維持管理案件用に買う人がいるんだと思う)、そのうえOSはどれもこれも入手困難ときている

2020-06-28 13:23:38
(change of )*state @TuvianNavy

Itanium2なSuperDomeは2度くらい目にしたことがあるから、2010年代にちゃんと社内で計算機のわかる会社なら金融機関以外でも買ったとこはあるはずなんだけど、SuperDomeは使い終わったからって中古市場に流せる代物じゃないし、

2020-06-28 13:26:25
eliloのソースをざっと眺める
(change of )*state @TuvianNavy

eliloの動作がよくわかんないんだよね、もしLILOと基本思想が同じなら、GUID Partition Tableを読んで得たPartitionの先頭位置に自分自身を書き込む動作をすると思うんだけど、これはEFIの設計思想ガン無視だよね

2020-06-28 13:51:19
(change of )*state @TuvianNavy

rx2600/zx6000のファームウェアがそんな動作をするブートローダを想定しているわけがないと思うんだけど、上述の理由で実機で試すのが絶望的 とりあえず読むか

2020-06-28 13:53:08
(change of )*state @TuvianNavy

普通に「eliloはEFIバイナリで」(つまりMBRへの書き込みに相当するのは単にEFI System Partitionへのコピー)ESPから見える.confを読んでEFIが認識するパーティションまたはnetからブートするだけだった twitter.com/TuvianNavy/sta…

2020-06-28 19:29:03
(change of )*state @TuvianNavy

linuxユーティリティーとしてのelilo(GUID Partition Tableを操作しEFI System Partitionを作ってFATでフォーマットし、elilo.efiをコピーし、efibootmgrでeliloをBootXXXXに、という一連の操作をするもの)は別にあったのね launchpad.net/ubuntu/precise…

2020-06-29 15:07:50
(change of )*state @TuvianNavy

efibootmgr(1)はそもそもDellの人が書いたんだけど、現在のupstreamはRedHatっぽい、 github.com/rhboot/efiboot…

2020-07-17 03:29:47
(change of )*state @TuvianNavy

elilo、ChangeLog読む限り少なくとも2000年3月にはHP(旧Compaq)社内に存在していたし、最初期のコードを書いてたStephane Eranian氏は今Googlerぽい

2020-06-28 14:00:37
(change of )*state @TuvianNavy

David Mosberger氏も最初期の貢献者、いまどこ? Mosberger-Eranianは界隈の基礎文献ぽい amazon.co.jp/IA-64-Linux-Ke…

2020-06-28 14:02:53
(change of )*state @TuvianNavy

流れを把握するためにやったこと:grep getopt

2020-06-28 19:31:31
(change of )*state @TuvianNavy

処理すっとばすのにgoto多用してたり無限ループに入るので/* NOT REACHED */だったり(これはローダだから)

2020-06-28 19:42:59
(change of )*state @TuvianNavy

MakefileみるとRH9のgcc-3.xが壊れたEFIバイナリを生成するとかコメントに書いてある gcc2用の設定をする部分はあるのに別のところでgcc2を弾いてたり、いろいろ時代を感じる

2020-06-28 19:48:58
(change of )*state @TuvianNavy

デフォルトのビルド設定だとext2(!)サポートが潰されてるのでESP(fat)またはネットブートしかできない ext2を潰したのはext3対応の工数を割けなかったっぽい、まあ

2020-06-28 20:00:09
(change of )*state @TuvianNavy

基本的にこれ20年前のコードだもんなあ。。

2020-06-28 19:55:14
(change of )*state @TuvianNavy

libc、使ったことがないのでよくわからないのだが、elilo/ia32とかelilo/ia64を見るとmemcpyとかmemsetはアセンブラで実装されている strlenaはどこなんだろう、gnu-efiの中か?

2020-06-28 20:51:37
(change of )*state @TuvianNavy

で、EFIプロトコルを呼ぶときに必ず必要になるグローバルポインタBSとはなんぞや?おそらくこれはgnu-efiの中でefi.hとかで定義されているやつ

2020-06-28 20:27:45

まあ誰でもすぐわかるけどBootServicesの略

(change of )*state @TuvianNavy

localfs(ESP=FATサポート)はもともとEFIファームウェアの中に実装があるはずなので大したことは書いてない それ以外のファイルシステムへのアクセスの面白い点は基本的に実装をコールバック関数の形にしてEFIに登録すること、そしてファイルシステムへのアクセスコードを本編からは直接呼ばない

2020-06-28 20:13:09