
2025/12/18 9:08
**Go‑Boot:ベアメタル用 Go で書かれた UEFI ブートマネージャ** UEFI ファームウェア上で直接動作する軽量な純粋 Go 実装のブートローダです。UEFI の設定を解析し、カーネルイメージをロードして制御を渡す機能を備えており、開発と移植性を重視してすべて Go で実装されています。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary
go‑boot は AMD64 マシン向けに UEFI シェルと OS ローダーを提供する軽量 Go ユニカーネルです。 EFI アプリケーション、Linux カーネル(UAPI エントリ経由)、および Windows UEFI ブートマネージャイメージを起動できます。
Core features
、cat
、cpuid
、efivar
、dns
、linux/l
、memmap
、net
、peek
等、多数の組み込みコマンド付きインタラクティブ UEFI シェルを提供します。protocol- デフォルト動作ではシェルが表示されます。Enter キー(または
/l
と入力)でコンパイル時デフォルトの UAPI エントリ(linux
)が起動します。\loader\entries\arch.conf
Building and configuration
go-boot.efi をビルドするには、以下の環境変数を設定します:
| Variable | Purpose | Default |
|---|---|---|
(hex) | バイナリのベースアドレス | 必須 |
| デフォルト EFI イメージへのパス | |
| デフォルト Linux エントリへのパス | |
| コンソールタイプ( または ) | |
| ネットワーク有効化(SNP/go‑net) | |
以下でビルドします:
make efi IMAGE_BASE=10000000 CONSOLE=text # ネットワークを有効にする場合は NET=1 を追加
Running locally or in emulation
- UEFI boot manager – バイナリを
配下(例:/boot/loader/entries/go-boot.conf
)に置きます。efi /EFI/Linux/go-boot.efi - QEMU + OVMF –
を使用します。ネットワークを有効にした場合は TAP インターフェース(make qemu OVMFCODE=<path>
)を設定し、tap0
で GDB をmake qemu-gdb
経由でアタッチします。target remote 127.0.0.1:1234 - ネットワークコマンド (
、net
) は設定済み IP アドレス上でデバッグサーバー(HTTP pprof、SSH)を起動します。dns
Documentation & licensing
プロジェクトは wiki 上にハードウェア互換性リスト(HCL)を維持しており、コンパイル用のテスト
IMAGE_BASE 値が掲載されています。go‑boot は BSD スタイルライセンス(https://github.com/usbarmory/go-boot)でオープンソース化されており、コピーレフト制限なしに商業利用できます。
Cloud example
Google Compute Engine デプロイメント例が提供されており(抜粋では詳細は省略)、go‑boot がクラウド VM 環境でも動作可能であることを示しています。
この要約はすべての主要ポイントを網羅し、非サポート推論を削除し、読者に対して技術的な詳細を明確化します。
本文
はじめに
go‑boot プロジェクトは、TamaGo ユニカーネルであり、AMD64 用の UEFI Shell と OS ローダーを実装しています。UEFI API との対話やオペレーティングシステムのロードが可能です。
OS ローディング機能では以下を起動できます:
- EFI アプリケーションイメージ
- Linux カーネル(Linux ユーザー空間 API (UAPI) のブートローダーエントリから構成情報を解析)
- Windows UEFI ブートマネージャ
将来のリリースではブート透明性サポートが計画されています。
作者
Andrea Barisani – andrea@inversepath.com
操作方法
デフォルトの操作は UEFI Shell とヘルプを表示します。
⏎ ショートカット(l または linux と同等)は、コンパイル時に設定されたデフォルト UAPI エントリセットをブートします(ビルド方法 を参照)。
Shell> go-boot.efi initializing EFI services initializing console (text) go-boot • tamago/amd64 (go1.24.1) • UEFI x64 <path> # EFI イメージをロードして起動 build # ビルド情報 cat <path> # ファイル内容表示 clear # 画面クリア cpuid <leaf> <subleaf> # CPU 能力表示 date (time in RFC339 format)? # 実行時日時を表示/変更 efivar (verbose)? # UEFI 変数一覧 dns <host> # ドメイン解決 exit,quit # アプリケーション終了 halt,shutdown # システムシャットダウン info # 実行時情報 linux,l (loader entry path)? # Linux カーネルイメージをブート linux,l,\r # `l \loader\entries\arch.conf` log # 実行時ログ表示 ls (path)? # ディレクトリ内容一覧 lspci # PCI デバイス一覧 memmap (e820)? # UEFI メモリマップ表示 mode <mode> # 画面モード設定 net <ip> <mac> <gw> (debug)? # UEFI ネットワーク開始 peek <hex offset> <size> # メモリ閲覧(注意) poke <hex offset> <hex value> # メモリ書き込み(注意) protocol <registry format GUID> # UEFI プロトコル検索 reset (cold|warm)? # システム再起動 stack # 現在のゴルーチンスタックトレース stackall # すべてのゴルーチンスタックトレース stat <path> # ファイル情報表示 uefi # UEFI 情報 uptime # システム稼働時間 windows,win,w # Windows UEFI ブートマネージャ起動
例
> uefi UEFI Revision ......: 2.70 Firmware Vendor ....: Lenovo Firmware Revision ..: 0x1560 Runtime Services ..: 0x90e2eb98 Boot Services ......: 0x6bd17690 Frame Buffer .......: 1920x1200 @ 0x4000000000 Configuration Tables: 0x8f426018 ee4e5898-3914-4259-9d6e-dc7bd79403cf (0x8db6dc98) dcfa911d-26eb-469f-a220-38b7dc461220 (0x8b037018) > memmap Type Start End Pages Attributes 02 0000000090000000 0000000090000fff 0000000000000001 000000000000000f > linux \loader\entries\arch.conf loading boot loader entry \loader\entries\arch.conf go-boot exiting EFI boot services and jumping to kernel Linux version 6.13.6-arch1-1 (linux@archlinux) (gcc (GCC) 14.2.1 20250207, GNU ld (GNU Binutils) 2.44)
パッケージドキュメント
ハードウェア互換性リスト
サポート対象ハードウェアはプロジェクト Wiki の HCL に記載されています。コンパイル時に渡すべき
IMAGE_BASE 値(テスト済み)が掲載されています。
ビルド方法
TamaGo コンパイラをビルドするか、最新バイナリを使用します。
wget https://github.com/usbarmory/tamago-go/archive/refs/tags/latest.zip unzip latest.zip cd tamago-go-latest/src && ./all.bash cd ../bin && export TAMAGO=`pwd`/go
環境変数(
go-boot.efi 用):
| 変数 | 目的 |
|---|---|
| IMAGE_BASE | ターゲット UEFI 環境で利用可能なメモリ領域内に設定する必要があります。HCL または コマンドで取得できます。空の場合は共通デフォルトが使用されます。 |
| DEFAULT_EFI_ENTRY | EFI イメージロード用の ショートカットエントリパス(デフォルト:)。 |
| DEFAULT_LINUX_ENTRY | Linux カーネル起動用ショートカットローダーエントリパス(デフォルト:)。 |
| CONSOLE | または (デフォルト)で出力コンソールを制御。 |
| NET | 0(デフォルト)または 1 で UEFI ネットワークサポートを有効化。 |
実行ファイルをビルド:
git clone https://github.com/usbarmory/go-boot && cd go-boot make efi IMAGE_BASE=10000000 CONSOLE=text
UEFI アプリケーションとして実行
UEFI Shell またはブートマネージャから
go-boot.efi をロードします。
systemd‑boot エントリ例
# /boot/loader/entries/go-boot.conf title Go Boot efi /EFI/Linux/go-boot.efi
EFIBootmgr 例
efibootmgr -C -L "go-boot" -d $DISK -p $PART -l '\EFI\go-boot.efi'
UEFI ネットワーク
NET=1 の場合、Simple Network Protocol (SNP) と go-net によりネットワークサポートが組み込まれます。net と dns コマンドが利用可能になります。
> net 10.0.0.1/24 : 10.0.0.2 debug starting debug servers: http://10.0.0.1:80/debug/pprof ssh://10.0.0.1:22 network initialized (10.0.0.1/24 da:e7:ac:e2:5e:05) > dns golang.org [142.251.209.17 2a00:1450:4002:410::2011]
QEMU エミュレーション
make qemu OVMFCODE=<path to OVMF_CODE.fd>
NET=1 の場合、Linux 例ではタップインターフェースを設定します:
ip tuntap add dev tap0 mode tap group <your user group> ip addr add 10.0.0.2/24 dev tap0 ip link set tap0 up
GDB デバッグ
make qemu-gdb # QEMU が GDB 接続を待機 gdb -ex "target remote 127.0.0.1:1234"
通常通りブレークポイントを設定してください。
クラウドデプロイメント
例として、Google Compute Engine 等のクラウド環境向けに UEFI ブート可能なイメージを作成・展開する手順が示されています。
ライセンス
go-boot – https://github.com/usbarmory/go-boot
著作権 © go‑boot 作者全員 All Rights Reserved.
本ソースファイルは
LICENSE ファイルに記載されている BSD スタイルのライセンスの下で配布されています。