# tg-rcore-tutorial-ch6-basic
`tg-rcore-tutorial-ch6-basic` 是 `tg-rcore-tutorial` Chapter 6 基础实验的独立可复现发布包,只包含本章基础实验所需的内核代码、`easy-fs` 修改、用户态测例、测试脚本和报告材料。
## 基本信息
- Chapter: `6`
- 实验类型: `基础实验`
- crates.io crate: `tg-rcore-tutorial-ch6-basic`
- 版本: `0.6.0-preview.1`
- 仓库: <https://github.com/Joshua912815/tg-rcore-tutorial>
- 对应目录: `standalone/tg-rcore-tutorial-ch6-basic`
- 对应 tag: `ch6-basic-crate-v0.6.0-preview.1`
- 文档路径: `docs/filesystem-hardlink-forward-compat-report-ch6.md`
## 本 crate 包含什么
本 crate 对应 `tg-rcore-tutorial-ch6/exercise.md` 的 Chapter 6 基础实验,核心内容包括:
- 实现 `linkat`
- 实现 `unlinkat`
- 实现 `fstat`
- 在 `easy-fs` 中支持硬链接、目录项复用、最后一个链接删除后的 inode 和数据块回收
- 保持 chapter4/chapter5 的前向兼容,确保 `mmap/munmap`、`spawn/wait/waitpid` 等测例继续通过
本 crate 不包含扩展实验、附加题、游戏移植或 Doom 等非 Chapter 6 基础实验内容。
## 与 AI 合作的最终材料
提交材料优先使用已经整理好的中文报告,而不是英文草稿或模拟聊天记录:
- [Chapter6 基础实验记录](docs/filesystem-hardlink-forward-compat-report-ch6.md)
该文档明确覆盖:
- 与 AI 合作的实现过程
- 学习效果评估
- 交互方式
- 问题/bug/解决过程
- 验证过程
- 能力提升
- 与校内教程的对比
## 复现方式
### 方式 1:从 crates.io 获取源码后复现
```bash
cargo clone tg-rcore-tutorial-ch6-basic
cd tg-rcore-tutorial-ch6-basic
make check-exercise
```
运行基础/练习测试:
```bash
./test.sh base
./test.sh exercise
```
直接启动练习版内核:
```bash
make run
```
### 方式 2:从仓库指定 tag 复现
```bash
git clone https://github.com/Joshua912815/tg-rcore-tutorial.git
cd tg-rcore-tutorial
git checkout ch6-basic-crate-v0.6.0-preview.1
cd standalone/tg-rcore-tutorial-ch6-basic
make check-exercise
```
## 环境说明
按照课程要求,推荐在 `rcore-docker` 中运行。示例:
```bash
docker run -it --name codex-ch6-basic \
-v "$PWD":/mnt \
-w /mnt \
rcore-docker bash
```
在容器内进入 crate 目录后运行:
```bash
make check-exercise
./test.sh base
./test.sh exercise
```
## 测试结论
本 crate 在清理旧 Docker 容器后,使用全新容器完成验证,结果如下:
- `cargo check --features exercise` 通过
- `./test.sh base` 通过,checker 结果为 `Test PASSED: 15/15`
- `./test.sh exercise` 通过,checker 结果为 `Test PASSED: 33/33`
- 手动运行 `cargo run --features exercise` 后执行 `ch6_usertest`,输出 `ch6 Usertests passed!`
## 可复现性说明
为确保老师和助教从 crates.io 下载的真实发布包也能复现,同时满足 crates.io 的 10MB 包大小限制,本 crate 做了这些处理:
- 内置 Chapter 6 必须修改的 `tg-rcore-tutorial-easy-fs`,以及运行/测试所需的 `tg-rcore-tutorial-user`、`tg-rcore-tutorial-checker`,并统一打包为 `bundled/vendor-src.tar.gz`
- `.cargo/config.toml` 使用 `[patch.crates-io]` 指向解包后的本地 `easy-fs`
- `scripts/ensure-vendor.sh`、`Makefile` 和 `test.sh` 会在需要时自动解包该依赖
- `build.rs` 优先使用包内 `vendor/tg-rcore-tutorial-user`
- `test.sh` 优先使用包内 `vendor/tg-rcore-tutorial-checker`
因此,复现时不需要假定“本地刚好还有上层 workspace”;从 crates.io 下载的真实包执行 `make` 或 `./test.sh` 即可完成准备。