
बेयर मेटल प्रोसेसरों पर Go अनुप्रयोगों को संकलित और निष्पादित करने के लिए फ्रेमवर्क, जो OS और C निर्भरता को हटाकर हमले की सतह को कम करके सुरक्षित फर्मवेयर विकास को सक्षम बनाता है।
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 पर पाया जा सकता है।
निम्न तालिका वर्तमान में समर्थित x86-64 लक्ष्यों (GOOS=tamago GOARCH=amd64) का सारांश प्रस्तुत करती है।
निम्न तालिका वर्तमान में समर्थित ARM SoCs और बोर्डों (GOOS=tamago GOARCH=arm) का सारांश प्रस्तुत करती है।
निम्न तालिका वर्तमान में समर्थित ARM64 SoCs और बोर्डों (GOOS=tamago GOARCH=arm64) का सारांश प्रस्तुत करती है।
निम्न तालिका वर्तमान में समर्थित RISC-V SoCs और बोर्डों (GOOS=tamago GOARCH=riscv64) का सारांश प्रस्तुत करती है।
GOOS=tamago के साथ संकलित प्रोग्रामों का निष्पादन बेयर मेटल ड्राइवरों के बजाय OS निगरानी के साथ आवश्यक runtime/goos ओवरले को लागू करने वाले किसी भी पैकेज को आयात करके यूज़र स्पेस में भी हो सकता है।
यूज़र स्पेस में GOOS=tamago के रूप में Go प्रोग्रामों को संकलित और चलाने से सिस्टम कॉल अलगाव का लाभ मिलता है क्योंकि निष्पादन योग्य सीधे OS संसाधनों तक पहुँचने के लिए Go रनटाइम का लाभ नहीं उठा सकता, इसके परिणामस्वरूप:
निम्न तालिका वर्तमान में उपलब्ध यूज़रस्पेस समर्थन का सारांश प्रस्तुत करती है:
¹ मानक वितरण परीक्षण और 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
एंड्रिया बारिसानी
[email protected]
एंड्रेज रोसानो
[email protected]
tamago | https://github.com/usbarmory/tamago
कॉपीराइट (c) TamaGo लेखक। सर्वाधिकार सुरक्षित।
यह परियोजना BSD-शैली लाइसेंस के तहत वितरित की गई है जो LICENSE फ़ाइल में पाया जा सकता है।
TamaGo लोगो रेनी फ्रेंच द्वारा डिज़ाइन किए गए Go गोफर से अनुकूलित है और क्रिएटिव कॉमन्स 3.0 एट्रीब्यूशन लाइसेंस के तहत लाइसेंस प्राप्त है। ह्यूगो अर्गांडा द्वारा Go गोफर वेक्टर चित्रण।
| 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 |
| 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 |
| SoC | बोर्ड | SoC पैकेज | बोर्ड पैकेज |
|---|
| NXP i.MX8M Plus | 8MPLUSLPD4-EVK | imx8mp | imx8mpevk |
| Microchip LAN969x | EVB-LAN9696-24port | lan969x | lan9696evb |
| 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 |
| ऑपरेटिंग सिस्टम | GOARCH | रनटाइम पैकेज |
|---|
| लिनक्स | amd64,arm,arm64,riscv64 | runtime/goos¹ |
| लिनक्स | amd64,arm,arm64,riscv64 | linux |
| GoTEE | arm,riscv64 | applet |