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在安全操作系统、引导加载程序和微虚拟机等新场景的应用