TamaGo Framework

repository·master·Indexed 24 days ago

https://github.com/usbarmory/tamago

A framework for bare-metal Go execution that allows developers to write secure firmware for AMD64, ARM (32-bit and 64-bit), and RISC-V architectures without a C runtime or operating system. It provides support for various hardware targets and virtual machine platforms, including Cloud Hypervisor, Firecracker microvm, Google Compute Engine, and AI Foundry emulators.

Tokens
15.7K
Snippets
47
Records
98
Agent score
84%

What's inside TamaGo

  1. Overview of TamaGo AMD64 support

    master
    The amd64 package in TamaGo provides support for compiling and executing unencumbered Go applications on AMD/Intel 64-bit bare metal processors. It includes support for various virtual machine platforms and hardware targets through specific platform packages and core/peripheral drivers.
  2. What is TamaGo?

    master

    TamaGo is a framework for compiling and executing unencumbered Go applications on bare metal processors (AMD64, ARM, ARM64, RISCV64). It aims to reduce the attack surface of embedded systems firmware by removing dependencies on C code and Operating Systems.

    The framework consists of:

    • A modified Go distribution (tamago-go) that extends GOOS support to the tamago target.
    • Go packages for processor/SoC support.
    • Go packages for board support.

    It maintains complete standard library support and requires only one import in your application to enable hardware initialization.

  3. Support for AI Foundry ET-SoC-1 processor

    master
    The soc/aifoundry/etsoc1 package provides TamaGo support for the AI Foundry ET-SoC-1 processor. Because the ET-SoC-1 mixes RISC-V cores with different ISAs and access levels (e.g., rv64gc for ET-Maxion cores and rv64imfc for Minion cores), you must import specific sub-packages to target the desired processor support.
  4. Support for NXP i.MX 6UL SoCs

    master

    The soc/nxp/imx6ul package provides TamaGo support for the NXP i.MX 6UL series of System-on-Chip (SoC) parts. It enables running bare metal Go applications on specific hardware configurations like the USB Armory MK2 or the NXP mx6ullevk evaluation kit.

    Supported Hardware and Drivers

    SoCRelated board packagesPeripheral drivers
    NXP i.MX 6ULZ/i.MX6ULusbarmory/mk2BEE, CAAM, CSU, DCP, ENET, GPIO, I2C, OCOTP, RNGB, SPI, TEMPMON, UART, USB, USDHC, WDOG, GIC, TZASC
    NXP i.MX 6ULL/i.MX6ULZnxp/mx6ullevkBEE, CAAM, CSU, DCP, ENET, GPIO, I2C, OCOTP, RNGB, SPI, TEMPMON, UART, USB, USDHC, WDOG, GIC, TZASC
  5. Support for Fisilink FSL91030 SoC

    master

    The soc/fisilink/fsl91030 package provides TamaGo support for the Fisilink FSL91030 SoC. This is a RV64IMAFDC processor based on the Nuclei UX600 core featuring an sv39 MMU and running at 400 MHz.

    Supported Hardware

    • SoC: Fisilink FSL91030
    • Related Board Packages: milkv/vega, nuclei/eval_soc
    • Peripheral Drivers: CLINT, UART
    WARNING

    This package is in early development stages and its API might still change.

  6. Support for Nuvoton NUC980 microprocessors

    master

    The soc/nuvoton/nuc980 package provides TamaGo support for Nuvoton NUC980 microprocessors. This allows you to compile and execute unencumbered Go applications on bare metal NUC980 hardware.

    Supported Hardware and Drivers

    • SoC: Nuvoton NUC980
    • Related Board Packages: nuvoton/nuc980iiot
    • Peripheral Drivers: AIC, ETIMER, PRNG, and UART
  7. Use ARM 32-bit support in TamaGo

    master
    The arm package provides support for compiling and executing Go applications on bare metal ARM 32-bit CPUs. This package is part of the TamaGo framework, which enables unencumbered Go execution on bare metal processors.
  8. Use the SiFive FU540 SoC support in TamaGo

    master

    The fu540 package provides support for the SiFive FU540 System-on-Chip (SoC). This package can be used with the qemu/sifive_u board package for emulation or on actual SiFive FU540 hardware.

    Supported peripheral drivers for this SoC include:

    • CLINT
    • PhysicalFilter
    • UART