由于 11 月事情较为繁忙(比赛和研一课程等),因此三阶段实际花的时间并不是很多,加之 ArceOS 项目的复杂性较高,导致这一阶段个人的学习效果不算太理想,对项目的代码框架还不算很熟悉。后续准备深入啃一啃各模块的源代码,并在四阶段深入学习 Hypervisor 虚拟化方向。以下是我在三阶段过程中的学习日志。
14日
由于前几天比赛没有时间,因此从今天才开始学习 ArceOS,首先按照指导书把 ArceOS 的设计理念简单过了一遍。然后开始看课程录播,看了第一节课的内容。
有一点小问题:用 VSCode 打开 oscamp/arceos
项目,rust-analyzer 插件会检查出代码错误(实际上并没有)。可以在项目的 .vscode/settings.json
中(没有则新建)添加键值对:"rust-analyzer.cargo.features" : ["axstd"]
,但是似乎只能解决 部分问题,仍然存在报错的情况出现。
课后练习 1,要求将打印出来的 [WithColor]: Hello, Arceos!
变成任意彩色,最简单的方法是直接修改 print_with_color
程序,使用 ANSI 转义码,如:println!("\x1b[32m[WithColor]: Hello, Arceos!");
.
课后练习 2 等着明天再做吧。。。
15日
忙着新电脑开发环境的配置与数据的迁移,无进展。
16日
首先仍然是看课程录播,看了第二节课的内容。
下午要参加校园马拉松,无进展。
17日
课后练习 2 支持 HashMap 类型有点问题,感觉对 Rust 的模块机制还不是太熟悉,先放着吧。
对着 PPT 再简单过了一遍相应模块的代码,尝试完成 课后练习 3 —— bump 内存分配算法,未完成。
看了第三节课的内容,课后练习 4 和 挑战作业 1 明天开始尝试。
18日
基本完成了 bump 内存分配算法(只是通过测试样例)。
尝试完成 挑战作业 1,首先我是尝试直接将 bump 照抄过来看看效果,但是却无法编译,提示 make: mkfs.fat: No such file or directory
,询问 GPT 发现是我的 WSL2 没有安装对应的工具,使用命令 sudo apt install dosfstools
安装并将 /usr/sbin
导入 PATH 环境变量即可。照抄完成后,得到的 Indicator 分数为 0,暂且搁置。
最后,看了第四次课程的直播,课后作业 4 开了个头,感觉不太难,明天再做吧。
19日
首先完成了 课后作业 4,实现比较简单。do_rename
只需要调用 ulib
提供的系统调用接口 std::fs::rename
即可,而 do_mv
则需要先使用 std::fs::read
读取被移动文件的数据,并使用 std::fs::write
写入一个新的文件中,再将原来的文件删除,即可完成移动操作。
宏内核部分简单开了个头,尝试了一下 课后作业 5,感觉还是对 ArceOS 整体框架不太熟悉。
20日
今天忙于帮忙搬东西,几乎没有进展,只是看了课程的直播录屏,并过了一遍 PPT。
21日
忙于处理区域赛报名等琐事,无进展。
22日
今天开始决定仔细啃 ArceOS 的代码,今天主要啃了 axlog
模块和 axhal
的一部分,明天继续。
23日
今天先是把昨晚的课程录播看了一遍,主要专注于 ArceOS 理念,没有涉及太多的模块细节。
然后接着啃 axhal
模块,仍然没有啃完。。。
24日
今天主要忙于周报总结和上课作业和汇报等琐事,继续啃 axhal
模块,仍然未完成。
25日
看了 Hypervisor 第一次课的直播,总算将 axhal
模块啃完了。。。
26日
啃完了 axruntime
模块,尝试将现有几个模块串起来,实现一个基本的 Unikernel,待完成。
27日
把原 ArceOS 成功运行了,之前失败的原因貌似是 qemu 的版本问题(为 rCore 实验配置的 7.0.0 版本),重新安装完整版的 qemu_system 后成功了。
28日
看了 Hypervisor 第二次课的录播,其他基本无进展。
29日
整体再理了一下 ArceOS 的架构,思考在原始 ArceOS 项目中如何实现 Hypervisor,主要分为如下几个步骤:
- 创建 payload 目录,下面存放客户操作系统(Guest)的源代码。
- 在 Makefile 中添加
make payload
选项,作用是编译 payload 目录下的源代码为二进制文件。 - 编写
update_disk.sh
,作用是将编译好的二进制文件挂载到make disk_img
生成的磁盘镜像中。 - 编写 Hypervisor 程序,作为 ArceOS Unikernel 启动时的 APP,同时需要启用 qemu 的 BLK。
30日
整理训练营三阶段 h_4_0 的代码,尝试删除无关的代码,构建一个精简且较为完善的 Hypervisor,基本完成。