
tamago v1.26.5
बेयर मेटल प्रोसेसरों पर Go अनुप्रयोगों को संकलित और निष्पादित करने के लिए फ्रेमवर्क, जो OS और C निर्भरता को हटाकर हमले की सतह को कम करके सुरक्षित फर्मवेयर विकास को सक्षम बनाता है।
TamaGo - बेयर मेटल Go
tamago | https://github.com/usbarmory/tamago
कॉपीराइट (c) TamaGo लेखक। सर्वाधिकार सुरक्षित।
परिचय
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 पुस्तकालय:
प्रलेखन
मुख्य प्रलेखन परियोजना विकी पर पाया जा सकता है।
पैकेज API प्रलेखन pkg.go.dev पर पाया जा सकता है।
समर्थित AMD64 लक्ष्य
निम्न तालिका वर्तमान में समर्थित x86-64 लक्ष्यों (GOOS=tamago GOARCH=amd64) का सारांश प्रस्तुत करती है।
| CPU | प्लेटफ़ॉर्म | CPU पैकेज | प्लेटफ़ॉर्म पैकेज |
|---|---|---|---|
| AMD/Intel 64-bit | क्लाउड हाइपरवाइज़र | amd64 | cloud_hypervisor/vm |
| AMD/Intel 64-bit | फ़ायरक्रैकर माइक्रोवीएम | amd64 | firecracker/microvm |
| AMD/Intel 64-bit | QEMU माइक्रोवीएम | amd64 | qemu/microvm |
| AMD/Intel 64-bit | UEFI | amd64 | uefi/x64 |
| AMD/Intel 64-bit | गूगल कंप्यूट इंजन | amd64 | google/gcp, uefi/x64 |
समर्थित ARM लक्ष्य
निम्न तालिका वर्तमान में समर्थित ARM SoCs और बोर्डों (GOOS=tamago GOARCH=arm) का सारांश प्रस्तुत करती है।
| SoC | बोर्ड | SoC पैकेज | बोर्ड पैकेज |
|---|---|---|---|
| NXP i.MX6ULZ/i.MX6UL | USB आर्मरी Mk II | imx6ul | usbarmory/mk2 |
| NXP i.MX6ULL/i.MX6UL | USB आर्मरी Mk II LAN | imx6ul | usbarmory/mk2 |
| NXP i.MX6ULL/i.MX6ULZ | MCIMX6ULL-EVK | imx6ul | mx6ullevk |
| Broadcom BCM2835 | रास्पबेरी पाई जीरो | bcm2835 | pi/pizero |
| Broadcom BCM2835 | रास्पबेरी पाई 1 मॉडल A+ | bcm2835 | pi/pi1 |
| Broadcom BCM2835 | रास्पबेरी पाई 1 मॉडल B+ | bcm2835 | pi/pi1 |
| Broadcom BCM2836 | रास्पबेरी पाई 2 मॉडल B | bcm2835 | pi/pi2 |
| Nuvoton NUC980 | NuMaker-IIoT-NUC980G2 | nuc980 | nuc980iiot |
समर्थित ARM64 लक्ष्य
निम्न तालिका वर्तमान में समर्थित ARM64 SoCs और बोर्डों (GOOS=tamago GOARCH=arm64) का सारांश प्रस्तुत करती है।
| SoC | बोर्ड | SoC पैकेज | बोर्ड पैकेज |
|---|---|---|---|
| NXP i.MX8M Plus | 8MPLUSLPD4-EVK | imx8mp | imx8mpevk |
| Microchip LAN969x | EVB-LAN9696-24port | lan969x | lan9696evb |
समर्थित RISC-V लक्ष्य
निम्न तालिका वर्तमान में समर्थित RISC-V SoCs और बोर्डों (GOOS=tamago GOARCH=riscv64) का सारांश प्रस्तुत करती है।
| SoC | बोर्ड | SoC पैकेज | बोर्ड पैकेज |
|---|---|---|---|
| SiFive FU540 | QEMU sifive_u | fu540 | qemu/sifive_u |
| AI Foundry Erbium | erbium_emu | erbium | erbium_emu |
| AI Foundry ET-SoC-1 | sys_emu | etsoc1 | sys_emu |
यूज़रस्पेस लक्ष्य
GOOS=tamago के साथ संकलित प्रोग्रामों का निष्पादन बेयर मेटल ड्राइवरों के बजाय OS निगरानी के साथ आवश्यक runtime/goos ओवरले को लागू करने वाले किसी भी पैकेज को आयात करके यूज़र स्पेस में भी हो सकता है।
यूज़र स्पेस में GOOS=tamago के रूप में Go प्रोग्रामों को संकलित और चलाने से सिस्टम कॉल अलगाव का लाभ मिलता है क्योंकि निष्पादन योग्य सीधे OS संसाधनों तक पहुँचने के लिए Go रनटाइम का लाभ नहीं उठा सकता, इसके परिणामस्वरूप:
- मेमोरी में अनुकरणित डिस्क के माध्यम से OS फ़ाइल सिस्टम से अलगाव
- OS नेटवर्किंग से अलगाव, देखें net.SocketFunc
- कस्टम नेटवर्किंग, rng, समय हैंडलर के लिए API
निम्न तालिका वर्तमान में उपलब्ध यूज़रस्पेस समर्थन का सारांश प्रस्तुत करती है:
| ऑपरेटिंग सिस्टम | GOARCH | रनटाइम पैकेज |
|---|---|---|
| लिनक्स | amd64,arm,arm64,riscv64 | runtime/goos¹ |
| लिनक्स | amd64,arm,arm64,riscv64 | linux |
| GoTEE | arm,riscv64 | applet |
¹ मानक वितरण परीक्षण और 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 पर सीरियल ड्राइवर
अतिरिक्त संसाधन
- पैकेज API
- रनटाइम API
- अनुकूलता
- आंतरिक
- FAQ
- प्रस्तुतियाँ: TamaGo, ArmoredWitness
अनुरक्षक
एंड्रिया बारिसानी
[email protected]
एंड्रेज रोसानो
[email protected]
लाइसेंस
tamago | https://github.com/usbarmory/tamago
कॉपीराइट (c) TamaGo लेखक। सर्वाधिकार सुरक्षित।
यह परियोजना BSD-शैली लाइसेंस के तहत वितरित की गई है जो LICENSE फ़ाइल में पाया जा सकता है।
TamaGo लोगो रेनी फ्रेंच द्वारा डिज़ाइन किए गए Go गोफर से अनुकूलित है और क्रिएटिव कॉमन्स 3.0 एट्रीब्यूशन लाइसेंस के तहत लाइसेंस प्राप्त है। ह्यूगो अर्गांडा द्वारा Go गोफर वेक्टर चित्रण।