Skip to content

TODO List

搭建 Linux 下 MCU 开发环境

https://blog.csdn.net/ldl617/article/details/120307412

移植Linux 到 GD32/STM32 上

主要是想为协会的 GD32 开发板做一些比较好玩的东西,还有是因为看了阅马场的Linux驱动第一期的内容,发现可以直接将Linux 跑在自己的 MCU 上!!

留个坑。

可以参考 b站全网首发 纯手写 RISC-V CPU虚拟机 juicevm 在esp32 上运行linux5.0

来了来了,用单片机 ESP32-S3 跑 RISC-V 模拟器运行 Linux,这次启动只要 8 秒 | Architecting Life

xhackerustc/uc-rv32ima: Run Linux on MCUs such as ESP32C3 with RISC-V emulator

因为 GD32 不带有 MMU,所以怎么模拟?

移植Linux到GD32这类没有MMU(内存管理单元)的设备上,通常需要使用Linux的Flat Memory Model(平面内存模型)或者使用特定的内存管理技术来模拟MMU的功能。以下是一些基本步骤和考虑因素:

  1. 选择Linux内核版本
  2. 选择一个支持RISC-V架构且不需要MMU的Linux内核版本。Linux 5.0版本是一个很好的起点,因为它包含了对RISC-V的支持。

  3. 配置内核

  4. 在内核配置中,需要禁用所有与MMU相关的选项,因为GD32没有MMU。这包括但不限于:

    • CONFIG_MMU 应该被禁用。
    • 相关的内存管理选项也应该被禁用或配置为适合平面内存模型。
  5. 内存布局

  6. 设计一个适合GD32的内存布局。在没有MMU的情况下,所有的代码、数据和堆栈通常都位于一个单一的连续的地址空间内。

  7. 虚拟内存模拟

  8. 如果需要使用虚拟内存,可以考虑使用软件模拟的方法。例如,可以使用固定大小的页表来模拟虚拟内存,但这会牺牲性能。

  9. 驱动程序和硬件支持

  10. 确保所有需要的驱动程序都可用,并且已经为GD32进行了适配。这可能包括串口、网络、存储等驱动。

  11. 文件系统和应用程序

  12. 选择一个适合嵌入式设备的文件系统,如FAT32、ext4等,并确保所有应用程序都已针对没有MMU的环境进行了优化。

  13. 调试和测试

  14. 使用JTAG或其它调试工具进行系统的调试和测试。确保系统稳定运行,并且所有功能都按预期工作。

  15. 性能优化

  16. 由于没有MMU,系统的性能可能会受到影响。需要对代码进行优化,以减少内存碎片和提高效率。

  17. 参考项目

  18. 参考类似项目,如juicevm在ESP32上运行Linux的案例。虽然ESP32和GD32在硬件上有所不同,但是移植Linux的过程和挑战是相似的。

  19. 社区和文档

    • 利用Linux社区和相关文档,如Linux内核的文档和邮件列表,获取帮助和最佳实践。

移植Linux到没有MMU的设备是一个复杂的过程,需要对内核有深入的了解,并且需要耐心地调试和优化。如果你不熟悉这个过程,可能需要花费一些时间来学习相关的知识,或者寻求社区的帮助。

我记得有个 ucLinux?

ucLinux 开发简述

c - Possible to implement MMU functionality in software with GCC? - Stack Overflow

还记得那个李述铜的课程吗?实际上是模拟一块 RISC-V MCU?

Cortex-M MCU Emulation with Renode | Interrupt

发现一个很不错的东西!!

johnnywei499/linux-for-microcontroller: A complete project that can run Linux-3.12.74 on a microcontroller, and the hardware development environment is easily accessible.

2024.12.7

完成了 NEMU 初步启动 nommu-Linux 后,下一步的学习计划。

大致可以分为以下几部分: