tamago | https://github.com/usbarmory/tamago
版权所有 (c) The TamaGo Authors。保留所有权利。
TamaGo 是一个框架,能够在裸机处理器(AMD64、ARM、ARM64、RISCV64)上编译和执行不受限制的 Go 应用程序。
该项目源于减少嵌入式系统固件攻击面的愿望,通过移除对 C 代码和操作系统的运行时依赖。
TamaGo 框架由以下组件组成:
一个修改过的 Go 发行版,
将 GOOS 支持扩展到 tamago 目标,通过 GOOSPKG 设置的
runtime/goos 覆盖层实现裸机执行。
用于处理器/SoC 支持的 Go 包。
用于板级支持的 Go 包。
这些修改相对于原始 Go 编译器、运行时和目标应用程序(需要一个导入)来说是最小的,并且与其他架构保持清晰分离。
重点强调复用标准 Go 运行时中已包含的现有架构,参见 内部机制。
这些修改保持了完整的标准库支持。
这些方面的动机是提供一个能够在嵌入式系统上开发安全 Go 固件的框架。
以下链接是 TamaGo 修改版 Go 发行版 和 TamaGo 库 的最新版本:
主要文档可在项目维基找到。
包 API 文档可在 pkg.go.dev 找到。
下表总结了当前支持的 x86-64 目标(GOOS=tamago GOARCH=amd64)。
| CPU | 平台 | CPU 包 | 平台包 |
|---|---|---|---|
| AMD/Intel 64位 | Cloud Hypervisor | amd64 | cloud_hypervisor/vm |
| AMD/Intel 64位 | Firecracker microvm | amd64 | firecracker/microvm |
| AMD/Intel 64位 | QEMU microvm | amd64 | qemu/microvm |
| AMD/Intel 64位 | UEFI | amd64 | uefi/x64 |
| AMD/Intel 64位 | Google Compute Engine | amd64 | google/gcp, uefi/x64 |
下表总结了当前支持的 ARM SoC 和开发板(GOOS=tamago GOARCH=arm)。
| SoC | 开发板 | SoC 包 | 开发板包 |
|---|---|---|---|
| NXP i.MX6ULZ/i.MX6UL | USB armory Mk II | imx6ul | usbarmory/mk2 |
| NXP i.MX6ULL/i.MX6UL | USB armory Mk II LAN | imx6ul | usbarmory/mk2 |
| NXP i.MX6ULL/i.MX6ULZ | MCIMX6ULL-EVK | imx6ul | mx6ullevk |
| Broadcom BCM2835 | Raspberry Pi Zero | bcm2835 | pi/pizero |
| Broadcom BCM2835 | Raspberry Pi 1 Model A+ | bcm2835 | pi/pi1 |
| Broadcom BCM2835 | Raspberry Pi 1 Model B+ | bcm2835 | pi/pi1 |
| Broadcom BCM2836 | Raspberry Pi 2 Model B | bcm2835 | pi/pi2 |
| Nuvoton NUC980 | NuMaker-IIoT-NUC980G2 | nuc980 | nuc980iiot |
下表总结了当前支持的 ARM64 SoC 和开发板(GOOS=tamago GOARCH=arm64)。