您尚未登录。

楼主 # 2022-03-17 10:22:51

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 845
积分: 721

go语言裸机编程探索

go和c现在是我工作中的主力语言。go在很多领域发挥了强大作用,那go适合嵌入式吗?当前并不适合,但go具有控制硬件的能力,虽然有些繁琐。
本帖最终目的是在全志f1c100s/200s或者说是arm9系列芯片直接运行go程序,主要是把go runtime移植到arm9上。本帖主要是受github的开源项目https://github.com/icexin/eggos的启发,此项目已成功将go runtime移植到x86上。开篇先建立环境:
虚拟环境是qemu-system-arm
先在上面跑个gnu汇编热热身。
arm.zip
155152.png

最近编辑记录 kekemuyu (2022-03-17 15:52:33)

在线

楼主 #6 2022-03-21 13:49:02

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 845
积分: 721

Re: go语言裸机编程探索

@xboot
同感,tinygo等于发明了另一种语言,还是跟随官方go比较好。TamaGo就是增加GOARCH GOOS的方案。但是我更倾向eggos的方案,不用修改官方编译器,他是模拟了linux的中断和系统调用。具体原理请参考这篇博文:https://zhuanlan.zhihu.com/p/265806072

在线

楼主 #8 2022-03-21 15:01:30

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 845
积分: 721

Re: go语言裸机编程探索

xboot 说:

eggos本质是模拟各种linux的syscall吗?

应该是这样,没有详细看,你可以看看eggos的源码,由于go runtime自带内存管理和任务调度,干了很多操作系统的活。只要实现很少的系统调用和中断管理就能移植runtime,eggos的架构图:
145734.png
eggos的kernel目录是他的核心,可以看到代码量很小:
145931.png

最近编辑记录 kekemuyu (2022-03-21 15:02:07)

在线

楼主 #9 2022-03-21 15:05:11

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 845
积分: 721

Re: go语言裸机编程探索

另外还可以参考https://git.sr.ht/~eliasnaur/unik/tree,eggos作者就是受这个项目启发做的。两者原理是一样的

在线

楼主 #13 2022-03-21 22:29:34

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 845
积分: 721

Re: go语言裸机编程探索

比c大个10几倍有怎样,一个程序自带了多线程和gc,基本上是跑了个操作系统了

在线

楼主 #18 2022-03-22 10:39:37

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 845
积分: 721

Re: go语言裸机编程探索

go官方的issue中很多人提出希望添加嵌入式支持,官方没答应,理由是硬件太多,工作量巨大,因为官方需要保证go的一致性和稳定性,可以理解,而且go的应用场景重点不在这方面。其实早期go的版本是支持裸机的,goos=tinygo,后来给删除了。

在线

楼主 #23 2022-04-09 12:01:07

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 845
积分: 721

Re: go语言裸机编程探索

go语言裸机最小生成elf工程:
add_20220409-1201.zip

在线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn