
बेयर मेटल प्रोसेसरों पर Go अनुप्रयोगों को संकलित और निष्पादित करने के लिए फ्रेमवर्क, जो OS और C निर्भरता को हटाकर हमले की सतह को कम करके सुरक्षित फर्मवेयर विकास को सक्षम बनाता है।
TamaGo - बेयर मेटल Go
======================
tamago | https://github.com/usbarmory/tamago
Copyright (c) The TamaGo Authors. All Rights Reserved.

परिचय
============
TamaGo एक फ्रेमवर्क है जो बेयर मेटल प्रोसेसर पर अनएनकम्बर्ड Go एप्लिकेशन के कम्पाइलेशन और निष्पादन को सक्षम बनाता है।
यह प्रोजेक्ट C कोड और ऑपरेटिंग सिस्टम पर किसी भी रनटाइम निर्भरता को हटाकर एम्बेडेड सिस्टम फर्मवेयर के अटैक सरफेस को कम करने की इच्छा से उत्पन्न हुआ है।
TamaGo फ्रेमवर्क में निम्नलिखित घटक शामिल हैं:
- एक संशोधित [Go वितरण](https://github.com/usbarmory/tamago-go)
जो `GOOS` समर्थन को `tamago` टारगेट तक बढ़ाता है, जिससे `GOOSPKG` द्वारा सेट किए गए
[runtime/goos](https://github.com/usbarmory/tamago-go/tree/latest/src/runtime/goos)
ओवरले के माध्यम से बेयर मेटल निष्पादन की अनुमति मिलती है।
- प्रोसेसर/SoC समर्थन के लिए Go पैकेज।
- बोर्ड समर्थन के लिए Go पैकेज।
संशोधन मूल Go कम्पाइलर, रनटाइम और टारगेट एप्लिकेशन (एक इम्पोर्ट आवश्यक) के मुकाबले न्यूनतम हैं, अन्य आर्किटेक्चर से स्पष्ट अलगाव के साथ।
मानक Go रनटाइम के भीतर पहले से शामिल मौजूदा आर्किटेक्चर से कोड के पुन: उपयोग पर विशेष जोर दिया गया है, देखें
[Internals](https://github.com/usbarmory/tamago/wiki/Internals)।
संशोधन [पूर्ण मानक लाइब्रेरी समर्थन](https://github.com/usbarmory/tamago/wiki/Compatibility) बनाए रखते हैं।
ऐसे पहलू एम्बेडेड सिस्टम पर सुरक्षित Go फर्मवेयर विकास की अनुमति देने वाला फ्रेमवर्क प्रदान करने की इच्छा से प्रेरित हैं।
वर्तमान रिलीज़
================
निम्नलिखित लिंक [TamaGo संशोधित Go वितरण](https://github.com/usbarmory/tamago-go) के नवीनतम रिलीज़ हैं,
जो संबंधित Go संस्करण में `GOOS=tamago` समर्थन जोड़ता है, और
[TamaGo लाइब्रेरी](https://github.com/usbarmory/tamago):
[](https://github.com/usbarmory/tamago-go/releases/latest) [](https://github.com/usbarmory/tamago-go/actions)
[](https://github.com/usbarmory/tamago/releases/latest)
दस्तावेज़ीकरण
=============
[](https://pkg.go.dev/github.com/usbarmory/tamago)
मुख्य दस्तावेज़ीकरण
[प्रोजेक्ट विकी](https://github.com/usbarmory/tamago/wiki) पर पाया जा सकता है।
पैकेज API दस्तावेज़ीकरण
[pkg.go.dev](https://pkg.go.dev/github.com/usbarmory/tamago) पर पाया जा सकता है।
समर्थित AMD64 टारगेट
=======================
निम्नलिखित तालिका वर्तमान में समर्थित x86-64 टारगेट का सारांश प्रस्तुत करती है
(`GOOS=tamago GOARCH=amd64`)।
| CPU | Platform | CPU package | Platform package |
|------------------|---------------------------------------------------------------------------|----------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------|
| AMD/Intel 64-bit | [Cloud Hypervisor](https://www.cloudhypervisor.org ) | [amd64](https://github.com/usbarmory/tamago/tree/master/amd64) | [cloud_hypervisor/vm](https://github.com/usbarmory/tamago/tree/master/board/cloud_hypervisor/vm) |
| AMD/Intel 64-bit | [Firecracker microvm](https://firecracker-microvm.github.io) | [amd64](https://github.com/usbarmory/tamago/tree/master/amd64) | [firecracker/microvm](https://github.com/usbarmory/tamago/tree/master/board/firecracker/microvm) |
| AMD/Intel 64-bit | [QEMU microvm](https://www.qemu.org/docs/master/system/i386/microvm.html) | [amd64](https://github.com/usbarmory/tamago/tree/master/amd64) | [qemu/microvm](https://github.com/usbarmory/tamago/tree/master/board/qemu/microvm) |
| AMD/Intel 64-bit | [UEFI](https://uefi.org/) | [amd64](https://github.com/usbarmory/tamago/tree/master/amd64) | [uefi/x64](https://github.com/usbarmory/go-boot/tree/main/uefi/x64) |
| AMD/Intel 64-bit | [Google Compute Engine](https://cloud.google.com/products/compute) | [amd64](https://github.com/usbarmory/tamago/tree/master/amd64) | [google/gcp](https://github.com/usbarmory/tamago/tree/master/board/google/gcp), [uefi/x64](https://github.com/usbarmory/go-boot/tree/main/uefi/x64) |
समर्थित ARM टारगेट
=====================
निम्नलिखित तालिका वर्तमान में समर्थित ARM SoC और बोर्ड का सारांश प्रस्तुत करती है
(`GOOS=tamago GOARCH=arm`)।
| SoC | Board | SoC package | Board package |
|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|
| NXP i.MX6ULZ/i.MX6UL | [USB armory Mk II](https://github.com/usbarmory/usbarmory/wiki/Mk-II-Introduction) | [imx6ul](https://github.com/usbarmory/tamago/tree/master/soc/nxp/imx6ul) | [usbarmory/mk2](https://github.com/usbarmory/tamago/tree/master/board/usbarmory) |
| NXP i.MX6ULL/i.MX6UL | [USB armory Mk II LAN](https://github.com/usbarmory/usbarmory/wiki/Mk-II-LAN) | [imx6ul](https://github.com/usbarmory/tamago/tree/master/soc/nxp/imx6ul) | [usbarmory/mk2](https://github.com/usbarmory/tamago/tree/master/board/usbarmory) |
| NXP i.MX6ULL/i.MX6ULZ | [MCIMX6ULL-EVK](https://www.nxp.com/design/development-boards/i-mx-evaluation-and-development-boards/evaluation-kit-for-the-i-mx-6ull-and-6ulz-applications-processor:MCIMX6ULL-EVK) | [imx6ul](https://github.com/usbarmory/tamago/tree/master/soc/nxp/imx6ul) | [mx6ullevk](https://github.com/usbarmory/tamago/tree/master/board/nxp/mx6ullevk) |
| Broadcom BCM2835 | [Raspberry Pi Zero](https://www.raspberrypi.org/products/raspberry-pi-zero) | [bcm2835](https://github.com/usbarmory/tamago/tree/master/soc/bcm2835) | [pi/pizero](https://github.com/usbarmory/tamago/tree/master/board/raspberrypi) |
| Broadcom BCM2835 | [Raspberry Pi 1 Model A+](https://www.raspberrypi.org/products/raspberry-pi-1-model-a-plus/) | [bcm2835](https://github.com/usbarmory/tamago/tree/master/soc/bcm2835) | [pi/pi1](https://github.com/usbarmory/tamago/tree/master/board/raspberrypi) |
| Broadcom BCM2835 | [Raspberry Pi 1 Model B+](https://www.raspberrypi.org/products/raspberry-pi-1-model-b-plus/) | [bcm2835](https://github.com/usbarmory/tamago/tree/master/soc/bcm2835) | [pi/pi1](https://github.com/usbarmory/tamago/tree/master/board/raspberrypi) |
| Broadcom BCM2836 | [Raspberry Pi 2 Model B](https://www.raspberrypi.org/products/raspberry-pi-2-model-b) | [bcm2835](https://github.com/usbarmory/tamago/tree/master/soc/bcm2835) | [pi/pi2](https://github.com/usbarmory/tamago/tree/master/board/raspberrypi) |
| Nuvoton NUC980 | [NuMaker-IIoT-NUC980G2](https://www.nuvoton.com/products/iot-solution/iot-platform/numaker-iiot-nuc980g2) | [nuc980](https://github.com/usbarmory/tamago/tree/master/soc/nuvoton/nuc980) | [nuc980iiot](https://github.com/usbarmory/tamago/tree/master/board/nuvoton/nuc980iiot) |
समर्थित ARM64 टारगेट
=======================
निम्नलिखित तालिका वर्तमान में समर्थित ARM64 SoC और बोर्ड का सारांश प्रस्तुत करती है
(`GOOS=tamago GOARCH=arm64`)।
| SoC | Board | SoC package | Board package |
|-------------------|----------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|
| NXP i.MX8M Plus | [8MPLUSLPD4-EVK](https://www.nxp.com/design/design-center/development-boards-and-designs/8MPLUSLPD4-EVK) | [imx8mp](https://github.com/usbarmory/tamago/tree/master/soc/nxp/imx8mp) | [imx8mpevk](https://github.com/usbarmory/tamago/tree/master/board/nxp/imx8mpevk) |
| Microchip LAN969x | [EVB-LAN9696-24port](https://www.microchip.com/en-us/development-tool/ev23x71a) | [lan969x](https://github.com/usbarmory/tamago/tree/master/soc/microchip/lan969x) | [lan9696evb](https://github.com/usbarmory/tamago/tree/master/board/microchip/lan9696evb) |
समर्थित RISC-V टारगेट
========================
निम्नलिखित तालिका वर्तमान में समर्थित RISC-V SoC और बोर्ड का सारांश प्रस्तुत करती है
(`GOOS=tamago GOARCH=riscv64`)।
| SoC | Board | SoC package | Board package |
|---------------------|-------------------------------------------------------------------------------|-----------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|
| AI Foundry Erbium | [erbium_emu](https://github.com/aifoundry-org/et-platform) | [erbium](https://github.com/usbarmory/tamago/tree/master/soc/aifoundry/erbium) | [erbium_emu](https://github.com/usbarmory/tamago/tree/master/board/aifoundry/erbium_emu) |
| AI Foundry ET-SoC-1 | [sys_emu](https://github.com/aifoundry-org/et-platform/tree/master/sw-sysemu) | [etsoc1](https://github.com/usbarmory/tamago/tree/master/soc/aifoundry/etsoc1) | [sys_emu](https://github.com/usbarmory/tamago/tree/master/board/aifoundry/sys_emu) |
| Fisilink FSL91030 | [MilkV Vega](https://milkv.io/vega) | [fsl91030](https://github.com/usbarmory/tamago/tree/master/soc/fisilink/fsl91030) | [vega](https://github.com/usbarmory/tamago/tree/master/board/milkv/vega) |
| Fisilink FSL91030 | [Nuclei QEMU](https://doc.nucleisys.com/nuclei_tools/qemu/index.html) | [fsl91030](https://github.com/usbarmory/tamago/tree/master/soc/fisilink/fsl91030) | [eval_soc](https://github.com/usbarmory/tamago/tree/master/board/nuclei/eval_soc) |
| SiFive FU540 | [QEMU sifive_u](https://www.qemu.org/docs/master/system/riscv/sifive_u.html) | [fu540](https://github.com/usbarmory/tamago/tree/master/soc/sifive/fu540) | [qemu/sifive_u](https://github.com/usbarmory/tamago/tree/master/board/qemu/sifive_u) |
समर्थित LoongArch टारगेट
===========================
निम्नलिखित तालिका वर्तमान में समर्थित LoongArch SoC और बोर्ड का सारांश प्रस्तुत करती है
(`GOOS=tamago GOARCH=loong64`)।
| SoC | Board | SoC package | Board package |
|-----------------|--------------------------------------------------------------------------|-----------------------------------------------------------------------------------|------------------------------------------------------------------------------|
| Loongson 3A5000 | [QEMU virt](https://www.qemu.org/docs/master/system/loongarch/virt.html) | [ls3a5000](https://github.com/usbarmory/tamago/tree/master/soc/loongson/ls3a5000) | [qemu/virt](https://github.com/usbarmory/tamago/tree/master/board/qemu/virt) |
यूज़रस्पेस टारगेट
=================
`GOOS=tamago` के साथ कम्पाइल किए गए प्रोग्राम का निष्पादन यूज़र स्पेस में भी हो सकता है, बशर्ते कि बेयर मेटल ड्राइवरों के बजाय OS सुपरविज़न के साथ आवश्यक `runtime/goos` ओवरले को लागू करने वाला कोई भी पैकेज इम्पोर्ट किया जाए।
यूज़र स्पेस में `GOOS=tamago` के रूप में Go प्रोग्राम को कम्पाइल और रन करना सिस्टम कॉल आइसोलेशन का लाभ प्रदान करता है क्योंकि एक्ज़ीक्यूटेबल OS संसाधनों तक सीधे पहुँचने के लिए Go रनटाइम का उपयोग नहीं कर सकता, जिसके परिणामस्वरूप:
* इन-मेमोरी एमुलेटेड डिस्क के माध्यम से OS फ़ाइल सिस्टम से आइसोलेशन
* OS नेटवर्किंग से आइसोलेशन, देखें [net.SocketFunc](https://github.com/usbarmory/tamago-go/blob/latest/src/net/net_tamago.go)
* कस्टम नेटवर्किंग, rng, टाइम हैंडलर के लिए API
निम्नलिखित तालिका वर्तमान में उपलब्ध यूज़रस्पेस समर्थन का सारांश प्रस्तुत करती है:
| Operating System | `GOARCH` | Runtime packages |
|----------------------------------------------|-------------------------|--------------------------------------------------------------------------------------|
| [Linux](https://www.kernel.org/) | amd64,arm,arm64,riscv64 | [runtime/goos](https://github.com/usbarmory/tamago-go/blob/latest/src/runtime/goos)¹ |
| [Linux](https://www.kernel.org/) | amd64,arm,arm64,riscv64 | [linux](https://github.com/usbarmory/tamago/tree/master/user/linux) |
| [GoTEE](https://github.com/usbarmory/GoTEE/) | arm,riscv64 | [applet](https://pkg.go.dev/github.com/usbarmory/GoTEE/applet) |
¹ [मानक वितरण परीक्षण](https://github.com/usbarmory/tamago/wiki/Compatibility) और `go test -tags user_linux` चलाने के लिए उपयोग किया जाता है
कम्पाइल करना
=============
`GOOS=tamago` का समर्थन करने वाला Go वितरण
---------------------------------------
[tamago](https://github.com/usbarmory/tamago/tree/latest/cmd/tamago)
कमांड एप्लिकेशन `go.mod` से tamago मॉड्यूल संस्करण से मेल खाने वाले
[TamaGo वितरण](https://github.com/usbarmory/tamago-go) से `go` कमांड को डाउनलोड, कम्पाइल और रन करता है।
एप्लिकेशन `go.mod` में `github.com/usbarmory/tamago` जोड़ सकते हैं, और फिर
`go` कमांड को इससे बदल सकते हैं:
```sh
go run github.com/usbarmory/tamago/cmd/tamago
```
या `go.mod` में निम्नलिखित पंक्ति जोड़ें ताकि `go tool tamago` को go कमांड के रूप में उपयोग किया जा सके:
```
tool github.com/usbarmory/tamago/cmd/tamago
```
वैकल्पिक रूप से
[नवीनतम TamaGo वितरण](https://github.com/usbarmory/tamago-go/tree/latest) को
मैन्युअल रूप से बनाया जा सकता है या
[नवीनतम बाइनरी रिलीज़](https://github.com/usbarmory/tamago-go/releases/latest) का उपयोग किया जा सकता है:
```sh
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 अनुप्रयोगों को प्रासंगिक बोर्ड पैकेज आयात करना आवश्यक है ताकि हार्डवेयर आरंभीकरण और रनटाइम समर्थन सुनिश्चित हो सके:
```golang
import (
// Example for USB armory Mk II
_ "github.com/usbarmory/tamago/board/usbarmory/mk2"
)
```
Go एप्लिकेशन को पिछले चरण में बनाए गए कंपाइलर के साथ कंपाइल किया जा सकता है,
कुछ फ़्लैग/वेरिएबल्स को जोड़ने के साथ:
```sh
# set this library as `runtime/goos` overlay
export GOOSPKG=github.com/usbarmory/tamago
# Example for Cloud Hypervisory, QEMU and Firecracker KVMs
GOOS=tamago GOARCH=amd64 ${TAMAGO} build -ldflags "-T 0x10010000 -R 0x1000" main.go
# Example for NXP i.MX6UL
GOOS=tamago GOARM=7 GOARCH=arm ${TAMAGO} build -ldflags "-T 0x80010000 -R 0x1000" main.go
# Example for NXP 8MPLUSLPD4-EVK
GOOS=tamago GOARCH=arm64 ${TAMAGO} build -ldflags "-T 0x40010000 -R 0x1000" main.go
# Example for SiFive FU540
GOOS=tamago GOARCH=riscv64 ${TAMAGO} build -ldflags "-T 0x80010000 -R 0x1000" main.go
# Example for AI Foundry Erbium
GOOS=tamago GOARCH=riscv64 GOEXPERIMENT=softfloat ${TAMAGO} build -ldflags "-T 0x40010000 -R 0x1000" main.go
# Example for QEMU LoongArch virt
GOOS=tamago GOARCH=loong64 ${TAMAGO} build -ldflags "-T 0x1000000 -R 0x1000" main.go
# Example for Linux userspace
GOOS=tamago ${TAMAGO} build main.go
```
प्रत्येक विशिष्ट लक्ष्य के लिए संकलन जानकारी हेतु संबंधित बोर्ड पैकेज README फ़ाइल देखें।
बिल्ड टैग
==========
निम्नलिखित बिल्ड टैग एप्लिकेशन को `runtime/goos` ओवरले के लिए पैकेज की स्वयं की परिभाषा को ओवरराइड करने की अनुमति देते हैं:
* `linkramstart`: `ramStart` को ओवरराइड करें
* `linkramsize`: `ramSize` को ओवरराइड करें
* `linkprintk`: `printk` को ओवरराइड करें
* `linkcpuinit`: `cpuinit` को ओवरराइड करें
* `tiny`: हीप आवंटन आवश्यकताओं को कम करें
निष्पादन और डिबगिंग
=======================
प्रत्येक विशिष्ट लक्ष्य (वास्तविक या अनुकरणित) के लिए निष्पादन और डिबगिंग जानकारी हेतु संबंधित बोर्ड पैकेज README फ़ाइल देखें।
[उदाहरण एप्लिकेशन](https://github.com/usbarmory/tamago-example) नेटिव के साथ-साथ अनुकरणित निष्पादन के लिए नमूना ड्राइवर उपयोग और निर्देश प्रदान करता है।
[उदाहरण एप्लिकेशन](https://github.com/usbarmory/tamago-example) का अनुकरणित रन निम्नानुसार लॉन्च किया जा सकता है:
```sh
git clone https://github.com/usbarmory/tamago-example
cd tamago-example && make qemu
```
TamaGo का उपयोग करने वाले अनुप्रयोग
=========================
* [go-boot](https://github.com/usbarmory/go-boot) - बेयर मेटल Go UEFI बूट मैनेजर
* [GoKey](https://github.com/usbarmory/GoKey) - बेयर मेटल Go स्मार्टकार्ड
* [GoTEE](https://github.com/usbarmory/GoTEE) - Go ट्रस्टेड एक्ज़ीक्यूशन एनवायरनमेंट
* [ArmoredWitness](https://github.com/transparency-dev/armored-witness) - क्रॉस-इकोसिस्टम विटनेस नेटवर्क
* [armory-drive](https://github.com/usbarmory/armory-drive) - USB एन्क्रिप्टेड ड्राइव
* [armory-ums](https://github.com/usbarmory/armory-ums) - USB मास स्टोरेज फर्मवेयर
* [armory-boot](https://github.com/usbarmory/armory-boot) - USB armory बूट लोडर
* [tamago-example](https://github.com/usbarmory/tamago-example) - TamaGo उदाहरण अनुप्रयोग
* [tamago-sev-example](https://github.com/usbarmory/tamago-sev-example) - कॉन्फिडेंशियल VM (AMD SEV-SNP) उदाहरण
* [kotama](https://github.com/usbarmory/kotama) - टाइनी RISC-V टार्गेट प्रदर्शक
* [kanzashi](https://github.com/abarisani/kanzashi) - बेयर मेटल एजेंट
TamaGo का उपयोग करने वाले बाहरी ड्राइवर
=============================
* [go-net](https://github.com/usbarmory/go-net) - जेनेरिक नेटवर्क ड्राइवर
* [go-net/imx-usb](https://github.com/usbarmory/go-net/tree/main/imx-usb) - i.MX ईथरनेट ओवर USB ड्राइवर
* [go-net/virtio](https://github.com/usbarmory/go-net/tree/main/virtio) - VirtIO नेटवर्क ड्राइवर
* [imx-usbserial](https://github.com/usbarmory/imx-usbserial) - i.MX सीरियल ओवर USB ड्राइवर
अतिरिक्त संसाधन
====================
* [पैकेज API](https://pkg.go.dev/github.com/usbarmory/tamago)
* [रनटाइम API](https://github.com/usbarmory/tamago-go/blob/latest/src/runtime/goos/README.md)
* [संगतता](https://github.com/usbarmory/tamago/wiki/Compatibility)
* [आंतरिक विवरण](https://github.com/usbarmory/tamago/wiki/Internals)
* [सामान्य प्रश्न](https://github.com/usbarmory/tamago/wiki/Frequently-Asked-Questions-(FAQ))
* प्रस्तुतियाँ: [TamaGo](https://github.com/abarisani/abarisani.github.io/tree/master/research/tamago), [ArmoredWitness](https://github.com/abarisani/abarisani.github.io/tree/master/research/witness)
मेंटेनर
===========
Andrea Barisani
[email protected]
Andrej Rosano
[email protected]
लाइसेंस
=======
tamago | https://github.com/usbarmory/tamago
Copyright (c) The TamaGo Authors. All Rights Reserved.
यह प्रोजेक्ट BSD-शैली लाइसेंस के अंतर्गत वितरित किया गया है, जो
[LICENSE](https://github.com/usbarmory/tamago/blob/master/LICENSE) फ़ाइल में पाया जाता है।
TamaGo लोगो Renee French द्वारा डिज़ाइन किए गए Go gopher से अनुकूलित है और
Creative Commons 3.0 Attributions लाइसेंस के अंतर्गत लाइसेंस प्राप्त है। Go Gopher वेक्टर
चित्रण Hugo Arganda द्वारा।