업데이트로 돌아가기
New releaseJul 14, 2026

tamago v1.26.5

베어 메탈 프로세서에서 Go 애플리케이션을 컴파일 및 실행하기 위한 프레임워크로, OS 및 C 종속성을 제거하여 공격 표면을 줄인 안전한 펌웨어 개발을 가능하게 합니다.

공유

TamaGo - 베어 메탈 Go

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

Copyright (c) The TamaGo Authors. All Rights Reserved.

TamaGo gopher

소개

TamaGo는 AMD64, ARM, ARM64, RISCV64 베어 메탈 프로세서에서 제약 없는 Go 애플리케이션의 컴파일 및 실행을 가능하게 하는 프레임워크입니다.

이 프로젝트는 C 코드 및 운영체제에 대한 런타임 의존성을 제거하여 임베디드 시스템 펌웨어의 공격 표면을 줄이려는 바람에서 시작되었습니다.

TamaGo 프레임워크는 다음 구성 요소로 이루어져 있습니다:

  • 수정된 Go 배포판 - GOOS 지원을 tamago 타겟으로 확장하며, GOOSPKG에 의해 설정된 runtime/goos 오버레이를 통해 베어 메탈 실행을 가능하게 합니다.

  • 프로세서/SoC 지원용 Go 패키지.

  • 보드 지원용 Go 패키지.

수정 사항은 원래 Go 컴파일러, 런타임 및 타겟 애플리케이션(필요한 임포트 하나)에 대해 최소화되어 있으며, 다른 아키텍처와 명확히 분리되어 있습니다.

기존 아키텍처(표준 Go 런타임에 이미 포함된)에서 코드를 재사용하는 데 중점을 두고 있습니다. 자세한 내용은 내부 동작을 참조하세요.

수정 사항은 완전한 표준 라이브러리 지원을 유지합니다.

이러한 측면은 임베디드 시스템에서 안전한 Go 펌웨어 개발을 가능하게 하는 프레임워크를 제공하려는 의도에서 비롯되었습니다.

현재 릴리스

다음 링크는 TamaGo 수정 Go 배포판(해당 Go 버전에 GOOS=tamago 지원을 추가) 및 TamaGo 라이브러리의 최신 릴리스입니다:

GitHub release Build Status
GitHub release

문서

Go Reference

주 문서는 프로젝트 위키에서 확인할 수 있습니다.

패키지 API 문서는 pkg.go.dev에서 확인할 수 있습니다.

지원되는 AMD64 타겟

다음 표는 현재 지원되는 x86-64 타겟(GOOS=tamago GOARCH=amd64)을 요약합니다.

CPU플랫폼CPU 패키지플랫폼 패키지
AMD/Intel 64비트Cloud Hypervisoramd64cloud_hypervisor/vm
AMD/Intel 64비트Firecracker microvmamd64firecracker/microvm
AMD/Intel 64비트QEMU microvmamd64qemu/microvm
AMD/Intel 64비트UEFIamd64uefi/x64
AMD/Intel 64비트Google Compute Engineamd64google/gcp, uefi/x64

지원되는 ARM 타겟

다음 표는 현재 지원되는 ARM SoC 및 보드(GOOS=tamago GOARCH=arm)를 요약합니다.

지원되는 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

애플리케이션 빌드

컴파일 시, GOOSPKG Go 환경 변수를 설정하여 이 라이브러리를 GOOS=tamago를 지원하는 오버레이로 활성화해야 합니다.

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를 사용하는 애플리케이션

TamaGo를 사용하는 외부 드라이버

추가 자료

유지보수자

Andrea Barisani
[email protected]

Andrej Rosano
[email protected]

라이선스

tamago | https://github.com/usbarmory/tamago
Copyright (c) The TamaGo Authors. All Rights Reserved.

이 프로젝트는 LICENSE 파일에 명시된 BSD 스타일 라이선스로 배포됩니다.

TamaGo 로고는 Renee French가 디자인하고 Creative Commons 3.0 저작자 표시 라이선스로 제공된 Go 고퍼를 각색한 것입니다. Go 고퍼 벡터 일러스트레이션은 Hugo Arganda가 제작했습니다.

카테고리