FerriteOS
本项目采用 Rust 语言对 Huawei LiteOS 的核心内核模块进行了重构,涵盖了任务管理、内存管理、硬件相关功能(中断处理、异常管理、系统时钟)、进程间通信(消息队列、事件机制、信号量、互斥锁)以及软件定时器等关键模块。
在重构过程中,我们着重解决了 FFI 的统一管理和 unsafe 代码的安全处理等技术难点。项目旨在充分利用 Rust 语言的内存安全保证和先进的并发编程模型,显著提升 LiteOS 的系统安全性、稳定性和可维护性。
我们最终的项目报告位于 这里,同时我们也将其发布于一位组员的知乎账号,链接在 这里。
| 项目阶段 | 日期 | 工作内容 |
|---|---|---|
| 选题 | 3月2日—3月8日 | 结合往届选题和老师上课提到的选题方向,每个人选择一个感兴趣的方向进行初步调研:秦铭格,徐家慧:AI for OS;杨博文,朱东胜:Rust重构;袁谦朗:使用ray进行大模型分布式部署。 |
| 选题 | 3月8日 | 线下讨论:确定了Rust重构选题,具体包括IPFS,Linux模块,微型WebAssembly虚拟机等方向。 |
| 选题 | 3月9日—3月17日 | 对 Rust 重构的各个方向进入深入调研,分析其价值,可行性和任务量等。 |
| 选题 | 3月17日 | 线下讨论:IPFS的庞大代码库涉及DHT、Bitswap等复杂协议,异步编程复杂,基于Go的实现比较完善,重写任务量大且价值不高;Rust重构Linux目前生态不完善,参考教程少,面对C与Rust的兼容性、内核高度耦合替换难度大、调试困难等问题,风险大;WebAssembly作为一种可移植、高性能的二进制指令格式,已成为边缘计算、区块链、插件系统等领域的核心技术,用Rust实现微型WebAssembly虚拟机高度可行且价值显著,尤其在安全敏感和资源受限的场景中。因此,确立选题为微型WebAssembly虚拟机wavm。 |
| 选题 | 3月23日 | 线下讨论:老师否认了基于Rust的WebAssembly解释器和运行时,同时我们对于嵌入式开发了解较少,放弃了关于freertos以及wasm虚拟机在嵌入式系统的应用等选题。经过和老师的进一步讨论,我们重新确立选题为使用Rust重构LiteOS部分模块。 |
| 调研报告 | 3月29日 | 线下讨论:讨论了调研报告内容框架,确定了分工:朱东胜负责文档总体汇总;徐家慧写项目背景/概述;袁谦朗写立项依据;秦铭格写前瞻性、重要性分析;杨博文写相关工作。 |
| 可行性报告 | 4月4日 | 线下讨论:讨论了可行性报告内容框架,确定了分工:朱东胜负责理论依据/LiteOS编译、qemu运行LiteOS模块以及文档总体汇总;秦铭格写理论依据/rust部分;徐家慧写理论依据/LiteOS部分;袁谦朗写技术依据/C调用Rust部分;杨博文写技术依据/Rust调用C部分。 |
| 中期汇报 | 4月10日-4月16日 | 为中期汇报准备,结合AI初步阅读了LiteOS的源码,了解主要内核模块;研究了LiteOS的编译框架,尝试引入rust代码,通过混合编译和交叉编译在LiteOS打印Hello Rust!。 |
| 中期汇报 | 4月18日 | 线下讨论:讨论了中期报告的框架,确定了分工,秦铭格负责what,袁谦朗负责why,徐家慧负责how,杨博文负责整合 PPT 和演讲;与此同时,朱东胜尝试通过交叉编译与混合编译实现LiteOS调用Rust(遇到问题,还不知道怎么解决)。 |
| 开发阶段 | 4月23日-4月30日 | 系统学习Rust语言,了解Rust在操作系统开发中的特色,重点关注嵌入式领域Rust开发。 |
| 开发阶段 | 5月5日 | 线下讨论:深入讨论 Huawei LiteOS 源代码中 kernel 内核部分的代码结构,分享Rust的学习经验。同时学习借鉴往届Rage_of_dUST小组项目学习改写经验,成功改写 kernel/mem 目录下的文件,主要为 bestfit 算法。 |
| 开发阶段 | 5月11日 | 线下讨论:对Rust重构LiteOS的工作进行了分工:徐家慧负责异常接管、错误处理、事件等;朱东胜负责任务管理、内存管理、软件定时器、位图等;杨博文负责队列、信号量、时间管理等;秦铭格负责命令行;袁谦朗负责中断、互斥锁等。 |
| 开发阶段 | 5月25日 | 线下讨论:各成员汇报近期改写进展,集中讨论并解决改写过程中的问题;确定了一些代码编写规范,商讨了关于LiteOS选项功能的约定,为后续代码合并做准备;调整LiteOS中的测试模块代码使其适配目前的单板,便于重构的同时进行测试。 |
| 开发阶段 | 5月31日-6月2日 | 合并了事件、日志、异常接管和错误处理模块,讨论了IPC模块(包括消息队列,信号量和互斥锁)的改写计划。 |
| 开发阶段 | 6月7日 | 线下讨论:沟通了解各组员负责模块的改写情况,完成了内核部分代码的重构合并;进行内核模块的测试;讨论了后期项目的工作方向:进一步改写debug和shell相关代码,研究如何解决unsafe问题;讨论了lab4的计划安排。 |
| 开发阶段 | 6月15日 | 线下讨论:期末周前最后一次组会,一方面,围绕unsafe问题,讨论了如何处理全局变量,指针,FFI,内存管理模块,侵入式链表等问题;另一方面,一起完成了LiteOS中debug和shell模块部分代码的重构,并通过了测试。项目开发任务基本完成。 |
| 期末汇报 | 6月25日 | 线下讨论:讨论了期末汇报的计划安排与任务分工:杨博文负责PPT制作与汇报,袁谦朗负责项目概述部分,秦铭格负责技术路线介绍部分,徐家慧负责内核介绍部分,朱东胜负责重构优势、unsafe处理部分。 |
| 期末汇报 | 6月29日 | 线下讨论:商讨次日答辩事宜,完成了期末汇报 PPT 的制作和修改。 |
| 期末汇报 | 6月30日 | 现场答辩:完成期末汇报,展示了项目成果与收获。完结撒花!!! |
