用 7 毛钱的 CH32V003 单片机跑 Linux,启动需要 5 分钟

在接触到只需要 7 毛钱的单片机 CH32V003 之后,拿它做了好几个 DIY 项目,像钥匙扣游戏机什么的,感觉还是比较有意思的,虽然资源相比 STM32F103 少很多,但是价格实在太便宜了。

在使用 CH32V003 的过程中,也上网搜了一圈使用它的项目,其中有一个 linux-ch32v003 就很有意思,作者的介绍就是“在一个 0.15 美元的单片机上运行 Linux”,我也克隆了这个项目学习了一下。

linux-ch32v003

Linux on a $0.15 RISC-V microcontroller

项目地址: https://github.com/tvlad1234/linux-ch32v003

这个项目主要解决的问题就是 CH32V003 可用内存太少的问题,作者使用了一个外围的 PSRAM 来扩展内存,实现了硬件 SPI 操作相关的库。

模拟器本身,其实是另外一个开源项目 mini-rv32ima,一个 RISC-V 的模拟器。

linux-ch32v003 主要的目录结构如下:

linux-ch32v003-01

项目目录中主要的内容:

  • emulator:模拟器相关代码,来自 mini-rv32ima 项目
  • hardware:测试用的硬件工程,使用 KiCAD 开发
  • hw_spi:硬件 SPI 库
  • linux:编译 Linux 镜像所需要的配置,有一个 Makefile 可以一键打包,另外还包含了 buildroot 相关的配置
  • pff:FatFS 文件系统读写库
  • psram:外置静态存储 PSRAM 操作库

只能说,为了在 CH32V003 上把 Linux 跑起来,有太多额外工作要做了。

mini-rv32ima

linux-ch32v003-2

mini-rv32ima 是一个超精简的 RISC-V 模拟器,没有外部依赖,只有一个头文件。

A tiny C header-only risc-v emulator.

在了解了这个项目之后才发现,它的作者同时也是 CH32V003 精简开发 SDK ch32v003fun 的作者,大佬果然还是大佬。

结合 linux-ch32v003 项目,大概研究了一下 mini-rv32ima,要接入的方法也不算多,主要是处理内存访问、键盘输入以及终端输出。

mini-rv32ima.c 中已经定义了需要实现的函数。

linux-ch32v003-3

主要是终端的接入,只有接入了终端,这个模拟器才能真正和用户交互,看了下 linux-ch32v003 的实现,还是比较简单的。

linux-ch32v003-4

复刻

看到这个项目之后就准备复刻一个了,不过按作者的说法,Linux 在 CH32V003 上启动要花 5 分钟,这实在难以接受,并且意义也不大……

刚好这个项目用的 PSRAM 是 8M 的,而我经常用的 ESP32-S3 就有 8M PSRAM 的版本,完美匹配了原项目的需求,并且直接购买 ESP32-S3-N16R8 模组的话,连焊接工作都省掉了,直接自带了 8M PSRAM。

并且 ESP32-S3 的 CPU 要比 CH32V003 强劲太多了,启动时间应该不需要 5 分钟那么多。

另外因为 ESP32-S3-N16R8 的 Flash 有 16MB,那么 Linux 镜像也可以直接打包在固件里了,省去了额外搞 TF 卡驱动的麻烦。

等搞完了再分享给大家吧~

参考资料

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>