🕍
UEFIから起動するイメージの先頭が"MZ"である歴史的理由
RISC-Vのカーネルイメージのエントリーポイント
kernelvmのrisc-vのチャネルで「riscv環境におけるlinuxのカーネルがロードされた直後からどう動くのかを知りたい。どこのコードから読めばよいか」という質問があり、あれこれ調べるうちにここだということが判明しました。
#ifdef CONFIG_EFI
/*
* This instruction decodes to "MZ" ASCII required by UEFI.
*/
c.li s4,-13
j _start_kernel
どうもEFIで起動するイメージの先頭はASCIIコードで"MZ"となっている必要があるようです。
"EFI MZ" でいろいろ検索
どうやら、EFIで起動するイメージは(EFI Application)はPE(Portable Executable)というWindowsの実行形式と同じヘッダフォーマットである必要があるようです。
"MZ"の起源はMS-DOSの実行ファイルにまでさかのぼるようです。
"MZ" are the initials of Mark Zbikowski, one of the leading developers of MS-DOS.
"MZ"は開発者の名前のイニシャルでした。
私は組み込み畑にいて、Windowsの実行ファイルのことは全く知らなかったので新鮮でした。
RISC-VでWindowsを動かすわけでもないのに、こんなふうに歴史的な痕跡が残っているのですね。
補足
Discordで教えてもらったオブジェクトフォーマットの系譜の図のtweetをこちらにも貼っておきますね。
ELFなども含んだもの
関連
Discussion