Browse Source

release: 发布 DragonOS 0.2.0 版本 (#1263)

Signed-off-by: longjin <longjin@DragonOS.org>
LoGin 23 hours ago
parent
commit
f7e908f47e
3 changed files with 209 additions and 2 deletions
  1. 207 0
      docs/community/ChangeLog/V0.2.x/V0.2.0.md
  2. 1 1
      kernel/Cargo.lock
  3. 1 1
      kernel/Cargo.toml

+ 207 - 0
docs/community/ChangeLog/V0.2.x/V0.2.0.md

@@ -0,0 +1,207 @@
+# DragonOS 0.2.0 发布说明 (Release Notes)
+
+> 发布日期: 2025-08-22
+> 版本定位: 0.2.0 是 DragonOS 在「可用性、可观测性、可扩展性」三个维度的里程碑版本——引入 **ext4、动态链接、eBPF、虚拟化、命名空间 (PID/Mount/User 初步)、多体系结构 (x86_64 / RISC-V64 / LoongArch64)** 支持,以及系统调用子系统、内存/文件缓存子系统的大幅重构,为后续 0.3.x 的容器化、网络与调度增强打下基础。
+
+---
+
+## 📌 概览摘要 (Executive Summary)
+
+**核心亮点:**
+
+1. **文件系统与存储**: 新增 ext4;完成 mount/umount2;实现 gendisk/分区扫描;`/proc/mounts`;页面缓存与文件映射体系化;支持实验性 overlayfs;改进 FAT & VFS 元数据 (statx / newfstatat)。
+2. **进程与命名空间**: 引入 PID Namespace、Mount Namespace、Namespace Proxy;实现 `unshare()`;改进进程组 / Session / TTY 作业控制;增强 `/proc` 进程信息。
+3. **内存与虚拟内存**: mmap 延迟分配、`msync`、私有/共享文件映射;PageCache 脏页同步/回收;多处栈使用优化与爆栈修复;SLAB 与 buddy 回收改进。
+4. **可观测性与可扩展**: 初步 eBPF 支持(rbpf → 主线 / kprobe / tracepoint / Aya 生态);tracepoint 框架化;静态键 (static-keys)。
+5. **虚拟化**: 引入 KVM/VMX 基础框架与 EPT;清理旧 KVM 代码;改进启动稳定性。
+6. **体系结构**: 新增 LoongArch64 引导 & 异常处理早期实现;RISC-V64 改进;多引导协议抽象 (Multiboot2 / HVM / Serial Console / Framebuffer)。
+7. **系统调用与内核结构**: 统一 syscall table;大量子系统模块化迁移;`ERESTARTSYS` 机制;补齐/新增大批系统调用(poll/epoll/select、eventfd、execveat、unshare、msync 等)。
+8. **安全与权限**: Cred 框架 (UID/GID/FSUID/权限判定);`set*id / setres*`;`chown/chmod` 迁移与修复。
+9. **设备与 I/O**: virtio console、virtio blk 分区识别、loopback 网卡、TTY + epoll、HVC、PCI 配置空间访问、网络设备 sysfs 注册。
+10. **工具链与生态**: 动态链接 (ELF 解释器);Dadk 0.2.0 加速构建;统一用户态程序构建;实验接入 Tokio 单线程运行时;文档自动翻译与版本化。
+11. **稳定性与质量**: 大量栈帧/死锁/内存越界/竞态/信号/等待语义/PageCache 修复;改进 backtrace/unwind;日志系统统一化。
+
+---
+
+## ⚠️ 重大变化与潜在不兼容 (Breaking / Important Changes)
+
+- Dadk 升级到 0.2.0:旧版配置不兼容,需按新文档迁移。
+- Syscall 结构重排:各子系统迁移到表驱动架构;自定义补丁需适配。
+- 内核栈默认 16K → 32K,并引入 Guard Pages / 写保护 (x86_64)。
+- PageCache 语义升级:`mmap` + 直接读写需结合 `msync`;旧行为假设需调整。
+- Namespace 架构初步:接口未来可能调整(仍属实验状态)。
+- eBPF 接口为早期形态:Map / Helper / 类型限制后续可能变化。
+
+---
+
+## ✨ 新增 / 增强特性 (Features & Enhancements)
+
+### 1. 文件系统 & VFS
+- **ext4**:基于 another_ext4 集成,可从块设备挂载。
+- **mount/umount2**:真实块设备挂载链路 + 分区扫描 (MBR);支持 MountFlags;`/proc/mounts`。
+- **overlayfs (实验)**:多层只读 + 顶层写 copy-up + whiteout。
+- gendisk 抽象;virtio 磁盘作为根文件系统;块设备自动注册 devfs。
+- FAT/vfat:`rename/move` 重构;`statx` 创建时间 (btime);文件映射;page cache 同步修复。
+- VFS:`statx/newfstatat`、`faccessat2`、`linkat/renameat2`、`readlinkat` 等;open/close/stat/ioctl 拆分;LookUpFlags;`/proc` 扩展(kthread 标记 / FD 占用 / exe 链接 / 运行/启动时间 / tty 信息)。
+
+### 2. 进程 / 命名空间 / 会话
+- PID Namespace:ID 映射与隔离;nsproxy 统一挂载。
+- Mount Namespace:根挂载树隔离。
+- `unshare()`:新建 namespace(现覆盖 PID/Mount 基础)。
+- Session / Process Group:完整作业控制;TTY 前台进程组信号 (SIGINT 等);`wait4` 修复。
+- reboot 流程增强(magic 校验 / 多 cmd 预留)。
+
+### 3. 内存管理 (MM)
+- `mmap` 延迟分配 / `msync` / `mprotect` 修复 / `madvise` / `msync` 表接入。
+- PageCache:ID 管理、页面回写、脏页清理、回收线程、多次映射一致性修复。
+- SLAB → buddy 释放路径补全;爆栈检测 (clippy);拆分大函数降低栈占用。
+- `mincore()` 占位返回 `ENOSYS`;`truncate_inode_pages` 框架。
+
+### 4. 可观测 & eBPF
+- `bpf()`:初始 Map / kprobe / 统计样例;rbpf 升级 → 主线;Aya 兼容模板。
+- tracepoint 框架化;静态键支持热点条件启用。
+
+### 5. 虚拟化 & 平台
+- 初步 KVM/VMX + EPT;旧 KVM 清理。
+- HVM / Multiboot2 / 启动命令行解析 (Arg/KV/EarlyKV)。
+- LoongArch64:引导进入 `kernel_main` + 异常处理;RISC-V64 运行 Rust HelloWorld;多平台串口/控制台抽象;Serial Console + nographic。
+
+### 6. 设备与 I/O
+- virtio console (HVC);virtio blk/网/控制台中断命名改进;PCI 配置空间访问 (portio)。
+- Loopback 网卡;网络设备 sysfs 节点与属性;DHCP 稳定性。
+- `eventfd` / `epoll` / `poll` / `ppoll` / `select` / `pselect6`:等待/超时/信号一致性。
+- TTY:适配 epoll;控制字符解析;波特率/termios;tab/erase 修复;SIGINT 广播。
+
+### 7. 安全 & 账户
+- Cred 框架:UID/EUID/FSUID/GID/组列表;`seteuid/setegid/setres*`;`chown/chmod/fchownat/lchown`。
+- `get/setgroups`;`umask` 类型改造;`/proc` status 名称精确化。
+
+### 8. 系统调用子系统
+- 统一 syscall table;`ERESTARTSYS`;批量迁移(process/mm/vfs/ipc)。
+- 新增/补齐:`mount`, `umount2`, `eventfd`, `poll/ppoll/select/pselect6`, `epoll` 重构, `fchdir`, `mkdirat/mkdirat2`, `utimensat/utimes`, `newfstatat/statx`, `execveat`, `unshare`, `set|getgroups`, `msync`, `madvise`, `mremap`, `mprotect`, `brk/sbrk`, `reboot` 增强, `rt_sigpending`, `mincore(ENOSYS)` 等。
+
+### 9. 工具链 / 构建 / 文档
+- Dadk 0.2.0:镜像生命周期管理 / 构建加速 / profiling。
+- 统一用户程序构建:Rust + C;示例 Rust 应用。
+- 动态链接 ELF 解释器;busybox 引导模式 & NovaShell/DragonReach 演进。
+- 自动文档翻译,多语言,多版本 Sphinx;页脚显示 commit;README / Q&A / namespace 文档更新。
+- CI:Docker 构建缓存、按分支触发、镜像自动推送、MinIO/S3 分发、loongarch64 QEMU 构建、工具链 nightly 锁定、backtrace/unwind 升级、栈溢出测试。
+
+---
+
+## 🚀 性能与资源占用 (Performance & Footprint)
+
+- 减少多处大栈帧:IRQ 初始化拆分、ACPI 表读取宏化、process create/内存池结构重写 (Vec 替换大数组)。
+- PageCache 二次映射写入 panic 修复 → 提升 mmap IO 连贯性;减少 copy。
+- SLAB 空闲页回收 → buddy,降低驻留内存。
+- 通过写保护 + Guard Pages 早期发现非法写入。
+
+---
+
+## 🛠 稳定性 & 关键修复 (Stability & Fixes)
+
+代表性修复:
+
+- 等待/进程:`wait/wait4` 语义、`do_wait` 锁释放、Blocked 子进程处理。
+- I/O 多路复用:epoll inode 引用释放、epoll 超时/唤醒广播、poll 边界/RestartBlock。
+- 管道/信号:pipe/FIFO 非阻塞 + 信号/kill 语义;阻塞 pipe 可被 kill;命名管道 POSIX 行为。
+- PageCache:mmap 多实例一致性;回写已 drop address space panic;`unlink` 后脏页处理。
+- futex:用户态地址安全 `safe_read/safe_write`;robust list。
+- 信号:默认 handler 恢复;SIGINT 分发;KILL pid=1 反馈;pending not masked 检查;`execve` 错误传播。
+- TTY:前台进程组置空错误;init 早期字符输入崩溃;tab 展开越界。
+- Timer:插入边界;`sleep` 被信号打断 `ERESTARTSYS`。
+- 竞争/内存:slab UAF/越界;nttyData 栈溢出;buddy 构造大栈帧;内核地址错误 RIP 输出。
+- 文件系统:`getcwd` 语义;`read O_PATH` 校验;`unlink` 后 dirty 清理;remount 错误;`mprotect vm_flags`。
+- ELF:解释器路径读取越界;`execve` 失败错误码。
+- 多路复用:`select/pselect6` 初期编译问题。
+- virtio/PCI:多设备中断冲突;PCI 初始化顺序;virtio net 中断处理。
+- 网络:DHCP 网卡顺序;loopback / poll listen 状态。
+
+---
+
+## 🧾 新系统调用清单 (部分)
+
+`mount`, `umount2`, `fchdir`, `mkdirat/mkdirat2`, `linkat/renameat/renameat2`, `newfstatat`, `statx`, `readlinkat`, `faccessat/faccessat2`, `eventfd`, `poll`, `ppoll`, `select`, `pselect6`, `epoll` (重构), `utimensat`, `utimes`, `msync`, `madvise`, `mremap`, `mprotect`, `brk/sbrk` (表化), `execveat`, `unshare`, `setgroups/getgroups`, `rt_sigpending`, `reboot` (增强), `mincore(ENOSYS)` ...
+
+---
+
+## 🧪 开发与构建体验 (Dev Experience)
+
+- Dadk 0.2.0:镜像创建 / 挂载 / 卸载统一;构建加速;profiling。
+- 用户程序:Rust + C 统一构建流水线;Rust 示例。
+- 工具链:固定 nightly 版本 & 升级脚本;多架构交叉工具链脚本。
+- 文档:自动翻译 & 失效清理;中英双语;FAQ / 构建问题指引。
+
+---
+
+## 🙌 贡献者 (部分, 按提交活跃度 / 首字母)
+
+感谢所有贡献者在内核子系统、文件系统、虚拟化、文档与工具链方面的持续投入。
+
+特别感谢以下核心贡献者:
+
+- **longjin** - 项目负责人,大量核心功能实现与重构
+- **chenlinfeng (Godones)** - eBPF、网络、文件系统等
+- **sparkzky** - TTY、进程管理、系统调用重构
+- **MemoryShore** - 文件系统、内存管理、VFS
+- **Samuel Dai** - KVM、网络、驱动
+- **黄铭涛** - PCI、驱动、内核优化
+- 以及所有其他贡献者!
+
+### 本版本贡献者清单
+
+LoGin <longjin@DragonOS.org>, <jinlong@tencent.com><br>
+linfeng: <chenlinfeng25@outlook.com>, <1925466036@qq.com><br>
+火花 <sparkhhhhhhhhhh@outlook.com>, <146502758+sparkzky@users.noreply.github.com><br>
+MemoryShore: <1353318529@qq.com>, <105195940+MemoryShore@users.noreply.github.com><br>
+黄铭涛: <1037827920@qq.com>, <114841534+1037827920@users.noreply.github.com><br>
+Jomo <xuzihao@dragonos.org><br>
+Samuel Dai: <samuka007@dragonos.org>, <dailvchen@dragonos.org><br>
+曾俊 <110876916+ZZJJWarth@users.noreply.github.com><br>
+kaleidoscope416 <2448956191@qq.com><br>
+github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com><br>
+DoL <1240800466@qq.com><br>
+donjuanplatinum <113148619+donjuanplatinum@users.noreply.github.com><br>
+chiichen <chiichen@qq.com><br>
+BrahmaMantra <140599389+BrahmaMantra@users.noreply.github.com><br>
+Vitus: <zhzvitus@gmail.com>, <144411726+Vitus213@users.noreply.github.com><br>
+YJwu2023 <yujianwu2019@gmail.com><br>
+GnoCiYeH <heyicong@dragonos.org><br>
+LIU Yuwei <22045841+Marsman1996@users.noreply.github.com><br>
+yuyi2439 <68320855+yuyi2439@users.noreply.github.com><br>
+codeironman <1553389239@qq.com><br>
+EMasi <1176949486@qq.com><br>
+SMALLC <121806694+smallcjy@users.noreply.github.com><br>
+laokengwt <143977175+laokengwt@users.noreply.github.com><br>
+Godones <chenlinfeng25@outlook.com><br>
+oeasy1412 <oeasy1412@gmail.com><br>
+dragonosbot <bot@dragonos.org><br>
+xiaolin2004 <1553367438@qq.com>, <109840258+xiaolin2004@users.noreply.github.com>
+
+---
+
+## ✅ 验证建议 (Smoke Test Checklist)
+
+- 基础启动:x86_64 / riscv64 / loongarch64 (串口/图形);检查 `/proc/mounts` `/proc/*/status`。
+- 动态链接:运行动态链接 busybox / Rust 程序。
+- 文件系统:挂载 ext4 & vfat;创建/删除/rename;`mmap` + 直接写 + `msync`。
+- 进程控制:多 shell / Ctrl+C / 前后台切换。
+- 网络:loopback ping / DHCP 初始化日志。
+- eBPF:加载示例 kprobe 统计程序;读取 `trace_pipe`。
+- poll/epoll:运行 `test_poll` / `test_epoll`。
+- reboot:执行 reboot 系统调用(模拟)。
+- Namespace:测试 `unshare`(挂载隔离 / PID 观察)。
+
+---
+
+## 🙏 致谢 (Acknowledgements)
+
+感谢所有开发者、测试者、文档贡献者及社区用户的反馈。DragonOS 0.2.0 站在前序版本的实验与积累之上,也为后续容器化、资源隔离与性能优化奠定结构基础。欢迎通过 Issue / PR / 讨论区持续参与。
+
+---
+
+## 🔎 附录: 关键词索引 (便于检索)
+
+`ext4` `overlayfs` `PageCache` `mmap` `PID namespace` `mount namespace` `unshare` `syscall table` `eBPF` `kprobe` `tracepoint` `Aya` `KVM` `VMX` `EPT` `LoongArch64` `RISC-V` `virtio console` `loopback` `eventfd` `poll` `epoll` `select` `pselect6` `ppoll` `statx` `newfstatat` `execveat` `dynamic linking` `Dadk 0.2.0` `Cred` `chown` `msync` `mprotect` `utimensat` `reboot` `slab` `buddy` `Guard Page` `WP` `Tokio` `groupprocess/session`
+
+-- END OF DragonOS 0.2.0 Release Notes --

+ 1 - 1
kernel/Cargo.lock

@@ -330,7 +330,7 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
 
 
 [[package]]
 [[package]]
 name = "dragonos_kernel"
 name = "dragonos_kernel"
-version = "0.1.10"
+version = "0.2.0"
 dependencies = [
 dependencies = [
  "acpi",
  "acpi",
  "asm_macros",
  "asm_macros",

+ 1 - 1
kernel/Cargo.toml

@@ -1,6 +1,6 @@
 [package]
 [package]
 name = "dragonos_kernel"
 name = "dragonos_kernel"
-version = "0.1.10"
+version = "0.2.0"
 edition = "2021"
 edition = "2021"
 
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html