アップデート一覧に戻る
New releaseJul 14, 2026

tamago v1.26.5

Framework for compiling and executing Go applications on bare metal processors, enabling secure firmware development with reduced attack surface through OS and C dependency removal. Goアプリケーションをベアメタルプロセッサ上でコンパイルおよび実行するためのフレームワーク。OSとCの依存関係を取り除くことで攻撃対象領域を減らし、セキュアなファームウェア開発を可能にします。

共有

TamaGo - ベアメタルGo

tamago | https://github.com/usbarmory/tamago

著作権所有 (c) TamaGo Authors. 無断複製・転載を禁じます。

TamaGo gopher

はじめに

TamaGo は、ベアメタルプロセッサ(AMD64、ARM、ARM64、RISCV64)上で、制約のない Go アプリケーションのコンパイルと実行を可能にするフレームワークです。

このプロジェクトは、C コードやオペレーティングシステムへの実行時依存性を排除することで、組み込みシステム ファームウェアの攻撃対象領域を削減したいという願いから生まれました。

TamaGo フレームワークは以下のコンポーネントで構成されています:

  • GOOS のサポートを tamago ターゲットに拡張する、修正版の Go ディストリビューションGOOSPKG によって設定される runtime/goos オーバーレイを通じてベアメタル実行を可能にします。

  • プロセッサ/SoC サポート用の Go パッケージ。

  • ボードサポート用の Go パッケージ。

変更は元の Go コンパイラ、ランタイム、およびターゲットアプリケーションに対して最小限であり(必要なインポートは1つ)、他のアーキテクチャから明確に分離されています。

標準 Go ランタイムに既に含まれている既存のアーキテクチャからのコード再利用に重点が置かれています。詳細は Internals を参照してください。

この変更により、完全な標準ライブラリのサポートが維持されます。

これらの側面は、組み込みシステム上で安全な Go ファームウェア開発を可能にするフレームワークを提供したいという願望に動機付けられています。

現在のリリース

以下のリンクは、対応する Go バージョンに GOOS=tamago サポートを追加する TamaGo 修正版 Go ディストリビューションと、TamaGo ライブラリの最新リリースです:

GitHub release Build Status
GitHub release

ドキュメント

Go Reference

主要なドキュメントは プロジェクト wiki にあります。

パッケージの API ドキュメントは pkg.go.dev にあります。

サポートされている AMD64 ターゲット

以下の表は、現在サポートされている x86-64 ターゲット(GOOS=tamago GOARCH=amd64)の概要です。

CPUプラットフォームCPU パッケージプラットフォーム パッケージ
AMD/Intel 64-bitCloud Hypervisoramd64cloud_hypervisor/vm
AMD/Intel 64-bitFirecracker microvmamd64firecracker/microvm
AMD/Intel 64-bitQEMU microvmamd64qemu/microvm
AMD/Intel 64-bitUEFIamd64uefi/x64
AMD/Intel 64-bitGoogle Compute Engineamd64google/gcp, uefi/x64

サポートされている ARM ターゲット

以下の表は、現在サポートされている ARM SoC とボード(GOOS=tamago GOARCH=arm)の概要です。

SoCボードSoC パッケージボード パッケージ
NXP i.MX6ULZ/i.MX6ULUSB armory Mk IIimx6ulusbarmory/mk2
NXP i.MX6ULL/i.MX6ULUSB armory Mk II LANimx6ulusbarmory/mk2
NXP i.MX6ULL/i.MX6ULZMCIMX6ULL-EVKimx6ulmx6ullevk
Broadcom BCM2835Raspberry Pi Zerobcm2835pi/pizero
Broadcom BCM2835Raspberry Pi 1 Model A+bcm2835pi/pi1
Broadcom BCM2835Raspberry Pi 1 Model B+bcm2835pi/pi1
Broadcom BCM2836Raspberry Pi 2 Model Bbcm2835pi/pi2
Nuvoton NUC980NuMaker-IIoT-NUC980G2nuc980nuc980iiot

サポートされている ARM64 ターゲット

以下の表は、現在サポートされている ARM64 SoC とボード(GOOS=tamago GOARCH=arm64)の概要です。

SoCボードSoC パッケージボード パッケージ
NXP i.MX8M Plus8MPLUSLPD4-EVKimx8mpimx8mpevk
Microchip LAN969xEVB-LAN9696-24portlan969xlan9696evb

サポートされている RISC-V ターゲット

以下の表は、現在サポートされている RISC-V SoC とボード(GOOS=tamago GOARCH=riscv64)の概要です。

SoCボードSoC パッケージボード パッケージ
SiFive FU540QEMU sifive_ufu540qemu/sifive_u
AI Foundry Erbiumerbium_emuerbiumerbium_emu
AI Foundry ET-SoC-1sys_emuetsoc1sys_emu

ユーザースペースターゲット

GOOS=tamago でコンパイルされたプログラムの実行は、ベアメタルドライバの代わりに OS の監視下で必要な runtime/goos オーバーレイを実装する任意のパッケージをインポートすることで、ユーザースペースでも行うことができます。

ユーザースペースで GOOS=tamago として Go プログラムをコンパイルして実行すると、実行可能ファイルが Go ランタイムを利用して OS リソースに直接アクセスできないため、システムコールの分離という利点が得られます。これにより、次の結果が得られます:

  • メモリ内エミュレートディスクによる OS ファイルシステムからの分離
  • OS ネットワーキングからの分離(net.SocketFunc 参照)
  • カスタムネットワーキング、rng、タイムハンドラの API

以下の表は、現在利用可能なユーザースペースサポートの概要です:

オペレーティングシステムGOARCHランタイムパッケージ
Linuxamd64,arm,arm64,riscv64runtime/goos¹
Linuxamd64,arm,arm64,riscv64linux
GoTEEarm,riscv64applet

¹ 標準ディストリビューションテストと go test -tags user_linux の実行に使用

コンパイル

GOOS=tamago をサポートする Go ディストリビューション

tamago コマンドは、アプリケーションの go.mod の tamago モジュールバージョンに一致する TamaGo ディストリビューションから go コマンドをダウンロード、コンパイル、実行します。

アプリケーションは go.modgithub.com/usbarmory/tamago を追加し、go コマンドを次のように置き換えることができます:

go run github.com/usbarmory/tamago/cmd/tamago

または、go.mod に次の行を追加して、go tool tamago を go コマンドとして使用します:

tool github.com/usbarmory/tamago/cmd/tamago

あるいは、最新の 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

アプリケーションのビルド

コンパイル時には、このライブラリをオーバーレイとして有効にして GOOS=tamago をサポートするために、GOOSPKG Go 環境変数を設定する必要があります。

export GOOSPKG=github.com/usbarmory/tamago

Go アプリケーションは、ハードウェアの初期化とランタイムサポートが行われるように、関連するボードパッケージをインポートする必要があります:

import (
	// USB armory Mk II の例
	_ "github.com/usbarmory/tamago/board/usbarmory/mk2"
)

Go アプリケーションは、前の手順でビルドしたコンパイラを使用して、いくつかのフラグ/変数を追加してコンパイルできます:

# このライブラリを `runtime/goos` オーバーレイとして設定
export GOOSPKG=github.com/usbarmory/tamago

# Cloud Hypervisor、QEMU、Firecracker KVM の例
GOOS=tamago GOARCH=amd64 ${TAMAGO} build -ldflags "-T 0x10010000 -R 0x1000" main.go

# NXP i.MX6UL の例
GOOS=tamago GOARM=7 GOARCH=arm ${TAMAGO} build -ldflags "-T 0x80010000 -R 0x1000" main.go

# NXP 8MPLUSLPD4-EVK の例
GOOS=tamago GOARCH=arm64 ${TAMAGO} build -ldflags "-T 0x40010000 -R 0x1000" main.go

# SiFive FU540 の例
GOOS=tamago GOARCH=riscv64 ${TAMAGO} build -ldflags "-T 0x80010000 -R 0x1000" main.go

# AI Foundry Erbium の例
GOOS=tamago GOARCH=riscv64 GOSOFT=1 ${TAMAGO} build -ldflags "-T 0x40010000 -R 0x1000" main.go

# Linux ユーザースペースの例
GOOS=tamago ${TAMAGO} build main.go

各ターゲットのコンパイル情報については、それぞれのボードパッケージの README ファイルを参照してください。

ビルドタグ

以下のビルドタグを使用すると、アプリケーションは runtime/goos オーバーレイのパッケージ独自の定義を上書きできます:

  • linkramstart: ramStart を上書き
  • linkramsize: ramSize を上書き
  • linkprintk: printk を上書き
  • linkcpuinit: cpuinit を上書き
  • tiny: ヒープ割り当て要件を削減

実行とデバッグ

各ターゲット(実機またはエミュレート)の実行およびデバッグ情報については、それぞれのボードパッケージの README ファイルを参照してください。

サンプルアプリケーションは、ドライバの使用例と、ネイティブおよびエミュレートでの実行手順を提供します。

サンプルアプリケーションのエミュレート実行は、次のように起動できます:

git clone https://github.com/usbarmory/tamago-example
cd tamago-example && make qemu

TamaGo を使用したアプリケーション

  • go-boot - ベアメタル Go UEFI ブートマネージャ
  • GoKey - ベアメタル Go スマートカード
  • GoTEE - Go Trusted Execution Environment
  • ArmoredWitness - クロスエコシステム ウィットネスネットワーク
  • armory-drive - USB 暗号化ドライブ
  • armory-ums - USB マスストレージ ファームウェア
  • armory-boot - USB armory ブートローダ
  • tamago-example - TamaGo サンプルアプリケーション
  • tamago-sev-example - 機密 VM (AMD SEV-SNP) サンプル
  • kotama - 小型 RISC-V ターゲットデモンストレーター
  • kanzashi - ベアメタルエージェント

TamaGo を使用した外部ドライバ

追加リソース

メンテナー

Andrea Barisani
[email protected]

Andrej Rosano
[email protected]

ライセンス

tamago | https://github.com/usbarmory/tamago
著作権所有 (c) TamaGo Authors. 無断複製・転載を禁じます。

このプロジェクトは、LICENSE ファイルに記載されている BSD スタイルライセンスの下で配布されています。

TamaGo ロゴは、Renee French によってデザインされ、Creative Commons 3.0 Attribution ライセンスの下でライセンスされている Go gopher を改変したものです。Go Gopher のベクターイラストは Hugo Arganda によるものです。

カテゴリ