अपडेट पर वापस जाएँ
New releaseAug 15, 2026

tamago v1.26.6

बेयर मेटल प्रोसेसरों पर Go अनुप्रयोगों को संकलित और निष्पादित करने के लिए फ्रेमवर्क, जो OS और C निर्भरता को हटाकर हमले की सतह को कम करके सुरक्षित फर्मवेयर विकास को सक्षम बनाता है।

साझा करें

TamaGo - बेयर मेटल Go

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

कॉपीराइट (c) TamaGo लेखक। सर्वाधिकार सुरक्षित।

TamaGo gopher

परिचय

TamaGo एक फ्रेमवर्क है जो बिना किसी बाधा के Go अनुप्रयोगों को बेयर मेटल प्रोसेसर (AMD64, ARM, ARM64, RISCV64) पर संकलन और निष्पादन सक्षम बनाता है।

यह परियोजना एम्बेडेड सिस्टम फर्मवेयर के हमले की सतह को कम करने की इच्छा से उत्पन्न हुई है, जिसमें C कोड और ऑपरेटिंग सिस्टम पर किसी भी रनटाइम निर्भरता को हटा दिया जाता है।

TamaGo फ्रेमवर्क में निम्नलिखित घटक शामिल हैं:

  • एक संशोधित Go वितरण जो tamago लक्ष्य के लिए GOOS समर्थन का विस्तार करता है, जिसमें 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) का सारांश प्रस्तुत करती है।

समर्थित ARM लक्ष्य

निम्न तालिका वर्तमान में समर्थित ARM SoCs और बोर्डों (GOOS=tamago GOARCH=arm) का सारांश प्रस्तुत करती है।

समर्थित ARM64 लक्ष्य

निम्न तालिका वर्तमान में समर्थित ARM64 SoCs और बोर्डों (GOOS=tamago GOARCH=arm64) का सारांश प्रस्तुत करती है।

SoCबोर्डSoC पैकेजबोर्ड पैकेज
NXP i.MX8M Plus8MPLUSLPD4-EVKimx8mpimx8mpevk
Microchip LAN969xEVB-LAN9696-24portlan969xlan9696evb

समर्थित RISC-V लक्ष्य

निम्न तालिका वर्तमान में समर्थित RISC-V SoCs और बोर्डों (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 प्रोग्रामों को संकलित और चलाने से सिस्टम कॉल अलगाव का लाभ मिलता है क्योंकि निष्पादन योग्य सीधे OS संसाधनों तक पहुँचने के लिए Go रनटाइम का लाभ नहीं उठा सकता, इसके परिणामस्वरूप:

  • मेमोरी में अनुकरणित डिस्क के माध्यम से OS फ़ाइल सिस्टम से अलगाव
  • OS नेटवर्किंग से अलगाव, देखें net.SocketFunc
  • कस्टम नेटवर्किंग, rng, समय हैंडलर के लिए API

निम्न तालिका वर्तमान में उपलब्ध यूज़रस्पेस समर्थन का सारांश प्रस्तुत करती है:

ऑपरेटिंग सिस्टमGOARCHरनटाइम पैकेज
लिनक्सamd64,arm,arm64,riscv64runtime/goos¹
लिनक्सamd64,arm,arm64,riscv64linux
GoTEEarm,riscv64applet

¹ मानक वितरण परीक्षण और go test -tags user_linux चलाने के लिए उपयोग किया जाता है

संकलन

GOOS=tamago का समर्थन करने वाला Go वितरण

tamago कमांड एप्लिकेशन go.mod से tamago मॉड्यूल संस्करण से मेल खाने वाले TamaGo वितरण से go कमांड को डाउनलोड, संकलित और चलाता है।

एप्लिकेशन go.mod में github.com/usbarmory/tamago जोड़ सकते हैं, और फिर go कमांड को इससे बदल सकते हैं:

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

या go कमांड के रूप में go tool tamago का उपयोग करने के लिए go.mod में निम्नलिखित पंक्ति जोड़ें:

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 आर्मरी Mk II के लिए उदाहरण
	_ "github.com/usbarmory/tamago/board/usbarmory/mk2"
)

Go एप्लिकेशनों को पिछले चरण में बनाए गए कंपाइलर के साथ, कुछ फ़्लैग/चर जोड़कर संकलित किया जा सकता है:

# इस पुस्तकालय को `runtime/goos` ओवरले के रूप में सेट करें
export GOOSPKG=github.com/usbarmory/tamago

# क्लाउड हाइपरवाइज़री, QEMU और फ़ायरक्रैकर 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

# लिनक्स यूज़रस्पेस के लिए उदाहरण
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 ट्रस्टेड एग्ज़ीक्यूशन एनवायरनमेंट
  • ArmoredWitness - क्रॉस-इकोसिस्टम विटनेस नेटवर्क
  • armory-drive - USB एन्क्रिप्टेड ड्राइव
  • armory-ums - USB मास स्टोरेज फर्मवेयर
  • armory-boot - USB आर्मरी बूट लोडर
  • tamago-example - TamaGo उदाहरण एप्लिकेशन
  • tamago-sev-example - गोपनीय VM (AMD SEV-SNP) उदाहरण
  • kotama - लघु RISC-V लक्ष्य प्रदर्शक
  • kanzashi - बेयर मेटल एजेंट

TamaGo का उपयोग करने वाले बाहरी ड्राइवर

  • go-net - जेनेरिक नेटवर्क ड्राइवर
  • go-net/imx-usb - i.MX USB पर ईथरनेट ड्राइवर
  • go-net/virtio - VirtIO नेटवर्क ड्राइवर
  • imx-usbserial - i.MX USB पर सीरियल ड्राइवर

अतिरिक्त संसाधन

अनुरक्षक

एंड्रिया बारिसानी
[email protected]

एंड्रेज रोसानो
[email protected]

लाइसेंस

tamago | https://github.com/usbarmory/tamago
कॉपीराइट (c) TamaGo लेखक। सर्वाधिकार सुरक्षित।

यह परियोजना BSD-शैली लाइसेंस के तहत वितरित की गई है जो LICENSE फ़ाइल में पाया जा सकता है।

TamaGo लोगो रेनी फ्रेंच द्वारा डिज़ाइन किए गए Go गोफर से अनुकूलित है और क्रिएटिव कॉमन्स 3.0 एट्रीब्यूशन लाइसेंस के तहत लाइसेंस प्राप्त है। ह्यूगो अर्गांडा द्वारा Go गोफर वेक्टर चित्रण।

श्रेणियाँ