Hasty Briefsbeta

双语

Proposal: Add bare metal support to Go

a year ago
  • #BareMetal
  • #Runtime
  • #Go
  • 关于新增GOOS=none目标的提案,该目标旨在无需操作系统支持即可运行Go运行时环境
  • GOOS=none使得Go应用程序能在裸机环境下运行,所有必要支持均由Go运行时和外部驱动包提供
  • GOOS=none需要的关键功能包括cpuinit、runtime.hwinit、runtime.printk、runtime.initRNG、runtime.getRandomData、runtime.nanotime1及RAM布局变量
  • 可选功能包括runtime.Bloc、runtime.Exit、runtime.Idle,以及通过SocketFunc实现的网络I/O设置
  • Go运行时将实现runtime.GetG、runtime.WakeG和runtime.Wake等函数用于中断处理
  • 编译流程与标准Go二进制文件类似,加载策略根据硬件差异调整
  • 该提案基于TamaGo项目实现,该项目支持AMD64、ARM和RISCV64架构的裸机执行
  • TamaGo现已支持未经修改的Go应用、AMD64 KVM虚拟化执行和UEFI应用程序
  • 这些变更具有硬件无关性且跨架构统一,维护成本合理
  • 采用GOOS=none可拓展Go在安全操作系统、引导加载程序和微虚拟机等新场景的应用