Skip to content

Commit 72952af

Browse files
committed
feat(audit): 恢复 AArch64 浮点并补审计支撑
本轮按审计反馈完成问题 2/3/5/6 的可执行部分,并保留 DMA 真机语义为后续设计决策。 AArch64 hardfloat 恢复 - target 从 aarch64-unknown-none-softfloat 切回 aarch64-unknown-none,并同步 rust-toolchain、rust-analyzer、deny、CI、Dev Container、xtask 和 docs - 参考历史实现恢复 TrapContext 中 q0-q31 + FPSR/FPCR 的保存恢复,CalleeSavedContext 中恢复 d8-d15 - 在 _boot 早期设置 CPACR_EL1.FPEN=0b11,避免 hardfloat 指令进入 Rust 后触发 FP/SIMD access trap - 新增 arch-test,强制生成并执行 f64 硬件浮点路径 测试与调试支撑 - 新增 paging-test/tlb-shootdown,等待从核上线后通过 update_range_flags 覆盖 TLB shootdown IPI/ACK 路径 - 暴露 tlb_shootdown::online_core_count() 作为系统测试诊断接口 - 新增 debug.gdb,并让 xtask debug 打印 gdb-multiarch ... -x debug.gdb 连接命令 - 日志后端新增按 module path 前缀过滤能力,默认空配置保持现有输出行为 文档结构与 ADR 目录 - 将 ADR 目录从 docs/decisions/ 迁移为 docs/adr/,并同步 AGENTS、README、审计文档、设计文档和模板中的路径引用 - 参考 project_template 补齐 docs/README、docs/conventions、docs/git、PR 模板、CONTRIBUTING、SECURITY、CODE_OF_CONDUCT - 新增 SAD/SDD/RFC/Spec/Plan/硬件设计/供应商记录/SOP 等可复制模板和目录入口 - 更新 audit-progress,记录 DMA/QEMU 结论:QEMU virtio 能覆盖功能路径,但不能证明真机 non-coherent cache/MAIR/PTE 属性正确 验证 - Docker 内 cargo fmt --all -- --check 通过 - Docker 内 cargo xtask check --arch riscv64 通过(保留既有 warning) - Docker 内 cargo xtask check --arch aarch64 通过(保留既有 warning) - Docker 内 cargo xtask test --arch riscv64 --name paging-test/tlb-shootdown --timeout 30 通过 - Docker 内 cargo xtask test --arch aarch64 --name arch-test --timeout 30 通过 - llvm-objdump 确认 arch-test 生成 fadd/fmul - git diff --cached --check 通过 已知限制 - cargo deny check 现在能解析配置,但仍按既有策略失败在 path/workspace wildcard dependency 和 paste unmaintained advisory;本轮只同步 target 与新版 cargo-deny schema,不展开依赖策略整改 Signed-off-by: Niu Zhihong <zhihong@nzhnb.com>
1 parent acf2d91 commit 72952af

77 files changed

Lines changed: 1688 additions & 132 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.cargo/config.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ rustflags = [
1111
"-C", "link-arg=-Tsrc/arch/riscv64/link.ld",
1212
]
1313

14-
[target.aarch64-unknown-none-softfloat]
14+
[target.aarch64-unknown-none]
1515
rustflags = [
1616
"-C", "force-unwind-tables=yes",
1717
"--cfg", "bare_metal",

.devcontainer/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \
124124
--component clippy \
125125
--component llvm-tools \
126126
--target riscv64gc-unknown-none-elf \
127-
--target aarch64-unknown-none-softfloat && \
127+
--target aarch64-unknown-none && \
128128
chmod -R a+w "$RUSTUP_HOME" "$CARGO_HOME" && \
129129
rustup show && \
130130
rustc --version && \

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"rust-analyzer.check.command": "clippy",
1212
"rust-analyzer.check.targets": [
1313
"riscv64gc-unknown-none-elf",
14-
"aarch64-unknown-none-softfloat"
14+
"aarch64-unknown-none"
1515
]
1616
},
1717
"extensions": [

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## 摘要
2+
3+
TODO
4+
5+
## 变更内容
6+
7+
- TODO
8+
9+
## 影响面检查
10+
11+
- [ ] 公开 trait、API、错误码、数据结构或协议边界无变化,或已在摘要/风险中说明
12+
- [ ] 启动流程、架构边界、SAS 不变量或跨模块依赖无变化,或已补充 ADR/SAD/SDD/RFC/Spec/Plan
13+
- [ ] Rust `unsafe`、并发、锁序、中断上下文或内存权限无变化,或已说明验证方式
14+
- [ ] 第三方源码、固件、submodule、生成物或供应商交付物无变化,或已说明来源、版本、许可证、验证与真值源
15+
- [ ] 硬件设计、生产流程、供应商边界或 SOP 无变化,或已同步更新对应文档
16+
- [ ] 开发环境、CI、Dev Container、QEMU 或发布流程无变化,或已更新文档
17+
- [ ] 没有破坏性变化,或已用 `!`/`BREAKING CHANGE` 和迁移说明标注
18+
19+
## 测试
20+
21+
- [ ] `cargo fmt --check`
22+
- [ ] `cargo clippy -- -D warnings`
23+
- [ ] `cargo xtask test --arch riscv64`
24+
- [ ] 其他:TODO
25+
26+
## 文档
27+
28+
- [ ] 如果命令或入口变化,已更新 `README.md`
29+
- [ ] 如果长期约定变化,已更新 `docs/conventions.md``AGENTS.md`
30+
- [ ] 如果架构决策变化,已更新 `docs/adr/`
31+
- [ ] 如果适用,已更新 SAD/SDD/RFC/Spec/Plan/SOP
32+
33+
## 风险与回滚
34+
35+
TODO

.github/workflows/docs.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ jobs:
4040
4141
- name: Build rustdoc (aarch64)
4242
run: |
43-
cargo doc --no-deps --target aarch64-unknown-none-softfloat
44-
cp -r target/aarch64-unknown-none-softfloat/doc/* docs-out/ 2>/dev/null || true
43+
cargo doc --no-deps --target aarch64-unknown-none
44+
cp -r target/aarch64-unknown-none/doc/* docs-out/ 2>/dev/null || true
4545
4646
# 生成首页重定向
4747
- name: Generate index.html

.github/workflows/workflow.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
run: cargo clippy --target riscv64gc-unknown-none-elf -- -D warnings
4242

4343
- name: Clippy (aarch64)
44-
run: cargo clippy --target aarch64-unknown-none-softfloat -- -D warnings
44+
run: cargo clippy --target aarch64-unknown-none -- -D warnings
4545

4646
- name: Unit tests (host)
4747
run: cargo test -p memory_types -p config -p page_table_entry -p arch

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ test_harness::test_main!(simplekernel::boot::InitLevel::Full, run_test, should_p
233233
- **Roadmap**(全局计划、排查 checklist、协作流程): `docs/audit/review-roadmap.md`
234234
- **审计进度**(跨对话上下文传递): `docs/audit/audit-progress.md`
235235
- **Session Prompt**(输出格式参考): `docs/audit/review-session-prompt.md`
236-
- **ADR 目录**(架构决策记录): `docs/decisions/`
236+
- **ADR 目录**(架构决策记录): `docs/adr/`
237237
- **ADR 模板**: `docs/templates/adr-template.md`
238238

239239
### 审计工作流

CODE_OF_CONDUCT.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# 行为准则
2+
3+
SimpleKernel 欢迎围绕 Rust、操作系统、内核架构和 AI 辅助学习的技术讨论。所有参与者应保持专业、具体、可验证。
4+
5+
## 期望行为
6+
7+
- 聚焦事实、代码、文档、测试和可复现证据。
8+
- 对设计分歧给出备选方案、优缺点和验证方式。
9+
- 指出问题时说明路径、上下文和影响。
10+
- 尊重不同经验背景,解释 Rust 或内核概念时避免人身评价。
11+
- 不公开他人的个人信息、凭证、私有环境细节或供应商保密资料。
12+
13+
## 不接受行为
14+
15+
- 人身攻击、骚扰、歧视、威胁或持续挑衅。
16+
- 在公开渠道披露安全漏洞可利用细节。
17+
- 发布真实密钥、token、个人路径、生产数据或保密资料。
18+
- 故意提交破坏性变更、误导性信息或无法复现的结论。
19+
20+
## 执行
21+
22+
维护者可以要求编辑、隐藏或删除不当内容;严重或重复违反时,可以限制参与权限。安全漏洞按 `SECURITY.md` 处理。

CONTRIBUTING.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# 贡献指南
2+
3+
感谢参与 SimpleKernel。提交前请先阅读根目录 `AGENTS.md``docs/conventions.md``docs/git.md`
4+
5+
## 开发环境
6+
7+
开发环境默认使用 Dev Container。宿主机只需要 Docker 或兼容容器运行时、Dev Container CLI/扩展、Git 等入口工具;不要为了本项目在宿主机安装 Rust nightly、交叉编译器、QEMU 或固件构建依赖。
8+
9+
```bash
10+
devcontainer up --workspace-folder .
11+
devcontainer exec --workspace-folder . bash
12+
```
13+
14+
容器内常用命令:
15+
16+
```bash
17+
cargo xtask build --arch riscv64
18+
cargo xtask test --arch riscv64
19+
cargo fmt --check
20+
cargo clippy -- -D warnings
21+
```
22+
23+
通过 Bash 工具运行 QEMU 相关命令时必须设置 30 秒超时;超时后清理残留 QEMU 进程。
24+
25+
## 提交流程
26+
27+
1. 从最新主分支创建小范围分支。
28+
2. 按 trait 契约、设计文档和 ADR 理解边界。
29+
3. 修改代码时同步更新测试和文档。
30+
4. 运行与改动范围匹配的验证命令。
31+
5. 使用 `git commit --signoff` 提交。
32+
6. 创建 PR,并按 PR 模板说明测试、文档、风险和回滚。
33+
34+
## 文档同步要求
35+
36+
| 改动 | 必须同步检查 |
37+
|------|--------------|
38+
| 启动流程、命令、测试入口变化 | `README.md``docs/README.md`、相关 SOP |
39+
| 架构不变量变化 | `docs/adr/`、SAD/SDD、`AGENTS.md` |
40+
| 公开 trait、错误码、类型或模块边界变化 | 代码文档注释、SDD、模块 README |
41+
| 固件、第三方源码、供应商交付物变化 | `3rd/` 记录、`docs/suppliers/``docs/production/` |
42+
| 硬件或生产流程变化 | `docs/hardware/``docs/sop/` |
43+
44+
## 代码约定
45+
46+
- 注释和文档注释使用中文;`# Safety``# Errors``# Panics` 节标题保留英文。
47+
- 所有 `unsafe` 块必须有 `// SAFETY:` 注释。
48+
- 不使用 `.unwrap()`;错误信息必须包含有助于定位问题的数据。
49+
- 内核互斥使用项目自定义 `SpinLock<T>`
50+
- trait 是契约,不要为了某个实现把实现细节塞进 trait 定义。
51+
52+
## Commit
53+
54+
commit 使用 `docs/git.md` 中的格式,并且必须带 DCO sign-off:
55+
56+
```bash
57+
git commit --signoff -m "docs(conventions): 补充文档结构约定"
58+
```

Cargo.lock

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)