更新日志#

2022-10-02#

  • 更新 VMware虚拟机镜像至 Ubuntu22.04 ,内置 QEMU7.0.0 版本。同时,还更新了各章节的 Docker 相关文件。

2022-01-02#

  • 第一章更新完成,Rust 版本升级至 nightly-2022-01-01asmglobal_asm 特性已稳定,相关的宏可在 core::arch 中找到。更新了作者和版权信息,版本暂定 3.6.0-alpha.1

2021-11-20#

  • 更新1~9章,添加第八章(同步互斥),原第八章(外设)改为第九章。

2021-10-20#

  • 旧版的 3.5.0 文档及代码(全七章)已经发布在 这里 。目前开始在主分支上更新新版的文档和代码。

2021-03-15#

  • 增加了在做实验的时候打补丁继承上一章节修改的 教程

2021-03-09#

  • 将所有分支的 RustSBI 版本更新为 [81d53d8] 的 0.2.0-alpha.1 ,主要是在 Qemu 平台上支持非法指令的转发,目前可以正确处理带有非法指令的应用程序了。参考 ch2 分支上的测例 00hello_world.rs

2021-03-07#

  • 在各章分支的链接脚本中加入了 .srodata/.sbss/.sdata

2021-03-06#

  • 文档第一版初稿(全七章)完成!

  • 修复了框架中基于 Qemu 平台运行却仍需要下载 kflash.py 工具的问题。

2021-03-05#

  • 第三章练习中增加了对于 sys_gettime 语义在教程和测例中差异的相关说明。

  • 修正了第四章练习中 mmap 系统调用语义中的一处错误。

2021-03-03#

  • 更新了第四章练习题。

  • 为方便调试,提供了 riscv64 gcc 工具链的下载链接。

  • 将文档渲染改为宽屏模式。

2021-02-28#

修复了 ch3-coop 分支在 Rust 版本更新后无法成功运行的问题。

2021-02-27#

完善了 easy-fs

  • 订正了 easy-fs 块缓存层的实现,移除了 dirty 子模块。

  • 支持二级间接块索引,使得支持的单个文件最大容量从 \(94\text{KiB}\) 变为超过 \(8\text{MiB}\) 。调整了单个 DiskInode 大小为 128 字节。

  • 在新建一个索引节点的时候不再直接分配一二级间接索引块,而是完全按需分配。

  • easy-fs 的测试和应用程序打包的函数分离到另一个名为 easy-fs-fuse 的 crate 中。

从 ch7 开始:

  • 出于后续的一些需求, sys_exec 需要支持命令行参数,为此shell程序 user_shell 中需要相应增加一些解析功能,内核中 sys_exec 的实现也需要进行修改。新增了应用 cmdline_args 来打印传入的命令行参数。

  • 新增了应用 cat 工具可以读取一个文件的全部内容。

  • 在shell程序中支持通过 <> 进行简单的输入/输出重定向,为此在内核中新增了一个 sys_dup 系统调用。

另外,在所有章节分支新增了 docker 支持来尽可能降低环境配置的时间成本,详见 使用 Docker 环境

2021-02-20#

第六章文档完成。

2021-02-16#

第五章文档完成。

2021-02-13#

将 ch2-ch6 的 build.rs 中的对齐需求修改为刚好合适。

2021-02-09#

在每一章的引言处加入了本章的代码树改动概况。

2021-02-08#

将 K210 开发板的烧写工具 kflash.py 从项目中移除。

2021-02-07#

将所有分支的 RustSBI 更新为最新的 0.1.1 版本[3257d899], 不加任何改动 直接放在项目中。这导致 qemu 和 k210 两个平台的内核入口点变得不同,目前根据 RustSBI 的默认配置,qemu 平台上的内核入口点为 0x80200000 ,而 k210 平台上为了提高烧写速度则为 0x80020000

前几个章节应用放置在内存中的位置也需要对应进行修改:

  • 第二章应用的起始地址变为 0x80400000

  • 第三章应用的起始地址变为 0x80400000

文档稍后更新。