由于 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,基本完成。
+ +