العودة إلى التحديثات
New releaseJul 14, 2026

tamago v1.26.5

إطار لتجميع وتنفيذ تطبيقات Go على معالجات عارية (bare metal)، مما يتيح تطوير برامج ثابتة آمنة مع تقليل سطح الهجوم من خلال إزالة اعتماديات نظام التشغيل وC.

مشاركة

TamaGo - bare metal Go

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

حقوق النشر (ج) مؤلفو TamaGo. جميع الحقوق محفوظة.

TamaGo gopher

مقدمة

TamaGo هو إطار عمل يُمكّن من تجميع وتنفيذ تطبيقات Go غير المقيدة على معالجات العارية (AMD64, ARM, ARM64, RISCV64).

ينبثق المشروع من الرغبة في تقليل مساحة الهجوم للبرامج الثابتة للأنظمة المدمجة عن طريق إزالة أي اعتماد زمني على كود C وأنظمة التشغيل.

يتكون إطار عمل TamaGo من المكونات التالية:

  • توزيعة Go معدلة والتي تمدد دعم GOOS إلى الهدف tamago، مما يسمح بالتنفيذ العاري من خلال طبقة تراكب runtime/goos يتم تعيينها بواسطة GOOSPKG.

  • حزم Go لدعم المعالج/SoC.

  • حزم Go لدعم اللوحة.

التعديلات ضئيلة مقارنة بمترجم Go الأصلي ووقت التشغيل والتطبيق المستهدف (استيراد واحد مطلوب)، مع فصل نظيف عن البنى الأخرى.

يتم التركيز بشدة على إعادة استخدام الكود من البنى الموجودة بالفعل في وقت تشغيل Go القياسي، انظر الداخلية.

تحافظ التعديلات على دعم كامل للمكتبة القياسية.

هذه الجوانب مدفوعة بالرغبة في توفير إطار عمل يسمح بتطوير برامج Go آمنة على الأنظمة المدمجة.

الإصدارات الحالية

الروابط التالية هي أحدث إصدارات توزيعة Go المعدلة لـ TamaGo، والتي تضيف دعم GOOS=tamago لإصدار Go المقابل، و مكتبة TamaGo:

GitHub release Build Status
GitHub release

التوثيق

Go Reference

يمكن العثور على التوثيق الرئيسي على مشروع ويكي.

يمكن العثور على توثيق واجهة برمجة التطبيقات (API) على pkg.go.dev.

أهداف AMD64 المدعومة

يلخص الجدول التالي أهداف x86-64 المدعومة حاليًا (GOOS=tamago GOARCH=amd64).

CPUPlatformCPU packagePlatform package
AMD/Intel 64-bitCloud Hypervisoramd64cloud_hypervisor/vm
AMD/Intel 64-bitFirecracker microvmamd64firecracker/microvm
AMD/Intel 64-bitQEMU microvmamd64qemu/microvm
AMD/Intel 64-bitUEFIamd64uefi/x64
AMD/Intel 64-bitGoogle Compute Engineamd64google/gcp, uefi/x64

أهداف ARM المدعومة

يلخص الجدول التالي معالجات SoC واللوحات ARM المدعومة حاليًا (GOOS=tamago GOARCH=arm).

أهداف ARM64 المدعومة

يلخص الجدول التالي معالجات SoC واللوحات ARM64 المدعومة حاليًا (GOOS=tamago GOARCH=arm64).

SoCBoardSoC packageBoard package
NXP i.MX8M Plus8MPLUSLPD4-EVKimx8mpimx8mpevk
Microchip LAN969xEVB-LAN9696-24portlan969xlan9696evb

أهداف RISC-V المدعومة

يلخص الجدول التالي معالجات SoC واللوحات RISC-V المدعومة حاليًا (GOOS=tamago GOARCH=riscv64).

SoCBoardSoC packageBoard package
SiFive FU540QEMU sifive_ufu540qemu/sifive_u
AI Foundry Erbiumerbium_emuerbiumerbium_emu
AI Foundry ET-SoC-1sys_emuetsoc1sys_emu

أهداف مساحة المستخدم

يمكن أيضًا تنفيذ البرامج المجمعة باستخدام GOOS=tamago في مساحة المستخدم عن طريق استيراد أي حزمة تطبق طبقة التراكب المطلوبة runtime/goos مع إشراف نظام التشغيل بدلاً من برامج تشغيل العارية.

يوفر تجميع وتشغيل برامج Go في مساحة المستخدم كـ GOOS=tamago ميزة عزل استدعاءات النظام حيث لا يمكن للبرنامج التنفيذي الاستفادة من وقت تشغيل Go للوصول المباشر إلى موارد نظام التشغيل، وينتج عن ذلك:

  • عزل عن نظام ملفات نظام التشغيل، من خلال قرص محاكى في الذاكرة
  • عزل عن شبكات نظام التشغيل، انظر net.SocketFunc
  • واجهة برمجة تطبيقات (API) للشبكات المخصصة، ومعالجات rng، والوقت

يلخص الجدول التالي دعم مساحة المستخدم المتاح حاليًا:

Operating SystemGOARCHRuntime packages
Linuxamd64,arm,arm64,riscv64runtime/goos¹
Linuxamd64,arm,arm64,riscv64linux
GoTEEarm,riscv64applet

¹ يُستخدم لتشغيل اختبارات التوزيع القياسية و go test -tags user_linux

التجميع

توزيعة Go التي تدعم GOOS=tamago

يقوم الأمر tamago بتنزيل وتجميع وتشغيل الأمر go من توزيعة TamaGo المطابقة لإصدار وحدة tamago من ملف go.mod للتطبيق.

يمكن للتطبيقات إضافة github.com/usbarmory/tamago إلى go.mod، ثم استبدال الأمر go بـ:

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

أو إضافة السطر التالي إلى go.mod لاستخدام go tool tamago كأمر go:

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

بناء التطبيقات

أثناء التجميع، يجب تعيين متغير بيئة Go GOOSPKG لتمكين هذه المكتبة كطبقة تراكب لدعم GOOS=tamago.

export GOOSPKG=github.com/usbarmory/tamago

يُطلب من تطبيقات Go استيراد حزمة اللوحة ذات الصلة لضمان حدوث تهيئة الأجهزة ودعم وقت التشغيل:

import (
	// مثال لـ USB armory Mk II
	_ "github.com/usbarmory/tamago/board/usbarmory/mk2"
)

يمكن تجميع تطبيقات Go باستخدام المترجم الذي تم بناؤه في الخطوة السابقة، مع إضافة بعض العلامات/المتغيرات:

# تعيين هذه المكتبة كطبقة تراكب `runtime/goos`
export GOOSPKG=github.com/usbarmory/tamago

# مثال لـ Cloud Hypervisory, QEMU و Firecracker KVMs
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

# مثال لـ Linux userspace
GOOS=tamago ${TAMAGO} build main.go

راجع ملف README الخاص بحزمة اللوحة المعنية للحصول على معلومات التجميع لكل هدف محدد.

علامات البناء (Build tags)

تسمح علامات البناء التالية للتطبيقات بتجاوز تعريف الحزمة الخاص لطبقة التراكب 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 - مدير الإقلاع UEFI العاري بلغة Go
  • GoKey - البطاقة الذكية العارية بلغة Go
  • GoTEE - بيئة التنفيذ الموثوقة بلغة Go
  • ArmoredWitness - شبكة شهود عبر الأنظمة البيئية
  • armory-drive - محرك أقراص USB مشفر
  • armory-ums - البرامج الثابتة للتخزين الشامل عبر USB
  • armory-boot - محمل الإقلاع لـ USB armory
  • tamago-example - تطبيق TamaGo نموذجي
  • tamago-sev-example - مثال على VM سري (AMD SEV-SNP)
  • kotama - جهاز عرض RISC-V مصغر
  • kanzashi - وكيل العارية

برامج تشغيل خارجية تستخدم TamaGo

  • go-net - برنامج تشغيل الشبكة العام
  • go-net/imx-usb - برنامج تشغيل Ethernet عبر USB لـ i.MX
  • go-net/virtio - برنامج تشغيل شبكة VirtIO
  • imx-usbserial - برنامج تشغيل Serial عبر USB لـ i.MX

موارد إضافية

المسؤولون

Andrea Barisani
[email protected]

Andrej Rosano
[email protected]

الترخيص

tamago | https://github.com/usbarmory/tamago
حقوق النشر (ج) مؤلفو TamaGo. جميع الحقوق محفوظة.

يتم توزيع هذا المشروع بموجب ترخيص نمط BSD الموجود في ملف LICENSE.

شعار TamaGo مقتبس من تميمة Go المصممة من قبل Renee French والمرخصة بموجب ترخيص Creative Commons 3.0 Attributions. رسم توضيحي متجه لتميمة Go بواسطة Hugo Arganda.

الفئات