Skip to content

Releases: DragonOS-Community/DragonOS

v0.4.0

22 Dec 12:16
ac64a32

Choose a tag to compare

V0.4.0

前言:本次版本聚焦“Linux 语义对齐 + 工程可用性”。I/O 多路复用、POSIX 定时器/CPU 时间、文件系统与 procfs 获得大幅补强;tmpfs、mount 传播、等待队列重构等为容器/云原生场景铺路;CI/夜构与 Playground 让体验和回归更顺畅。

发布日期: 2025-12-22

核心亮点

I/O 多路复用与时间语义:向 Linux 6.6 对齐

  • poll/pselect6 系统调用完善:修复信号掩码恢复逻辑,优化 pselect6 实现,正确处理 sigmask 参数和 timeout 验证,移除零超时提前返回的逻辑,确保在等待 I/O 时正确保存和恢复信号掩码 (#1531)
  • epoll 事件处理增强:正确处理普通文件的 epoll 事件,避免添加不必要的 epitem;修复 epoll 超时唤醒机制,确保定时器通过 Waker 唤醒等待队列;改进 poll_select_finish 函数以支持更多时间类型 (#1528, #1492)
  • POSIX interval timer 完整实现:实现 timer_create、timer_settime、timer_gettime、timer_getoverrun、timer_delete 系统调用,支持 SIGEV_NONE/SIGEV_SIGNAL/SIGEV_THREAD_ID 信号投递模式,修复 gVisor timers_test (#1501, #1521)
  • 进程与线程 CPU 时间统计:实现 ProcessCpuTime 结构体,支持用户态、内核态及总执行时间统计;为 PCB 添加 cputime_wait_queue,支持 CLOCK_PROCESS/THREAD_CPUTIME_ID 的 clock_nanosleep;扩展 clock_gettime 和 clock_nanosleep 系统调用支持进程和线程 CPU 时间时钟 (#1517)
  • POSIX 调度系统调用:实现 sched_getparam、sched_getscheduler 系统调用,重构 sched_yield 到独立模块 (#1416)

文件系统与 VFS:功能扩展与稳定性提升

  • tmpfs 文件系统支持:新增 tmpfs 支持并与 devfs 集成,提供内存文件系统能力;实现原子大小管理、零页创建、页缓存管理等功能;支持 /dev/shm 挂载,完善 chroot 和挂载传播机制 (#1459, #1480, #1410)
  • 新系统调用实现
    • copy_file_range:实现高效的文件范围复制系统调用 (#1513)
    • creat:新增 creat 系统调用支持,遵循 Linux 语义(创建新文件或截断现有文件并打开为只写模式)(#1482)
    • preadv2/pwritev2:实现带偏移量和标志位的向量化 I/O 系统调用,支持 RWF 标志位验证 (#1451, #1461)
    • fadvise64:实现文件访问建议系统调用,支持页面缓存范围写回和驱逐,改进预读机制支持随机访问模式 (#1439)
    • umask:实现 umask 系统调用,改进权限处理,设置默认 umask 为 0022 (#1500, #1419)
  • 文件操作改进
    • 修复 truncate 系统调用的页缓存截断逻辑,修复边界条件,添加长度检查 (#1444)
    • 增强符号链接处理,将最大符号链接跟随次数提升至 40(符合 Linux 6.6 标准),改进 VFS 行为 (#1507)
    • 修复 symlinkat 中父目录路径为 None 时的处理逻辑 (#1512)
    • 修复 sys_rename 逻辑并支持 RENAME_NOREPLACE 标志 (#1393)
    • 修复 pread64 系统调用的兼容性和错误处理,验证 offset 参数和用户缓冲区 (#1398)
  • append 锁机制:实现文件追加操作的锁管理器,使用 jhash 算法保障并发写入的正确性,支持强制追加语义 (#1483)
  • EventFd 文件系统:实现 EventFd 文件系统并增强 VFS inode 能力,支持事件通知机制;为 IndexNode trait 添加 is_stream、supports_seek、supports_pread、supports_pwrite 方法 (#1486)
  • 文件系统标志重构:重构文件系统标志体系,区分打开标志与访问模式,提升代码清晰度 (#1414)
  • 路径检查统一:统一使用 vfs_check_and_clone_cstr 函数进行路径检查,减少代码重复 (#1481)
  • 文件预读功能:添加文件预读功能支持,新增 readahead 模块实现文件预读算法,提升顺序读取性能 (#1391)
  • 挂载传播机制:实现挂载传播机制,支持 Shared、Private、Slave、Unbindable 传播类型,实现递归绑定挂载支持 (#1410)

procfs 与系统信息:可观测性大幅提升

  • 进程信息文件完善
    • /proc/<pid>/stat:提供进程状态信息,支持 BusyBox ps/pstree/top 等工具 (#1490)
    • /proc/<pid>/task:实现线程目录结构,支持主线程 tid=pid 的展示 (#1490)
    • /proc/<pid>/cmdline/proc/cmdline:提供进程和内核命令行参数 (#1489)
    • /proc/<pid>/maps:提供进程内存映射信息,改进缺页异常处理 (#1468)
    • /proc/<pid>/statm:提供进程内存统计信息 (#1455)
  • 命名空间支持
    • /proc/<pid>/ns/ 目录:支持动态创建命名空间文件,实现 cgroup 命名空间基础结构 (#1515)
    • /proc/thread-self/ns:支持查看线程的命名空间,实现 setns 系统调用用于命名空间管理 (#1412, #1515)
    • 修复命名空间文件创建时的竞态条件 (#1413)
  • 内核日志管理:实现内核日志级别管理和 procfs 接口(/proc/sys/kernel/printk),支持动态调整日志级别 (#1415)
  • 文件描述符信息:在 procfs 中新增文件描述符相关支持,支持 /proc/self/fd/N 魔法链接,实现管道 FIONREAD ioctl 命令,添加 /proc//fdinfo 目录支持 (#1426)

进程管理与执行:更接近 Linux 行为

  • shebang 脚本支持:添加 shebang 脚本执行支持,实现脚本解析和递归执行,可直接运行脚本文件,支持多种解释器 (#1511)
  • 进程等待语义修复
    • 修复线程组中子进程的等待语义 (#1427)
    • 修复子进程退出时父进程唤醒逻辑,确保无论 exit_signal 为何值都唤醒父进程 (#1516)
  • 进程执行改进
    • 修复 sys_exec 相关测试,修复 execve 系统调用中空路径和空参数处理问题 (#1518)
    • 改进 execve 和 execveat 系统调用的实现,增强执行文件权限检查与信号处理
    • 实现 fd_table 在 execve 进程中的 unsharing,确保隔离性
    • 改进路径解析逻辑,修复 shebang 解释器未找到时的错误日志
  • 信号处理增强
    • 修正 POSIX 定时器信号投递逻辑,支持 SIGEV_THREAD 模式,放宽 SIGEV_THREAD_ID 限制 (#1521)
    • 修复信号忽略逻辑,实现信号忽略检查逻辑 (#1434)
    • 实现增强的信号处理和 IPC 机制,添加 rt_sigqueueinfo 和 rt_tgsigqueueinfo 系统调用 (#1423)
    • 修复 kill 进程组的 bug (#1424)
    • 修复 sys_rt_sigtimedwait 和 sys_rt_sigreturn 相关问题 (#1406, #1394, #1400)

内存管理与 I/O:性能与稳定性优化

  • 用户空间内存访问修复
    • 修复 IoVecs 构造时对零长度缓冲区的验证,确保符合 Linux 语义
    • 修复 scatter 方法在遇到不可访问内存时的错误处理,避免部分写入后返回错误
    • 修复 readv/preadv 等系统调用,使其支持分块读取和部分成功写入
    • 修复页面回收逻辑,避免回收仍被映射的文件页
    • 修复 UserBufferReader/Writer 对空指针的检查,防止未定义行为
    • 优化 IoVecs 的用户空间内存访问检查与拷贝逻辑,统一使用 user_accessible_len 进行访问性验证 (#1522)
  • 块缓存增强:增强 CacheBlock 和 BlockCache 功能,添加 from_slice 和 write_data 方法,改进 insert_one_block 和 immediate_write 方法接受切片而非向量,修复 FileMapInfo::page_cache 的内存泄漏问题(改为 Weak)(#1465)
  • 页面缓存改进
    • 修复 truncate 时的页缓存截断,修复边界条件 (#1444)
    • 改进页面缓存管理,重构页缓存读写以解决死锁问题 (#1455)
  • 内存管理优化
    • 修复 slab 分配器迭代器越界访问和并发安全问题,将 SLABALLOCATOR 改为 SpinLock 保护 (#1464)
    • 修复异常表安全拷贝的错误处理返回值 (#1395)
    • 优化页面回收过程,分离为两阶段以避免死锁 (#1455)
  • mmap 支持增强:为多个文件系统节点实现 mmap 方法,改进 mmap 错误处理和验证,增强内存保护处理和验证 (#1455)

IPC 与管道:阻塞语义与竞态修复

  • FIFO 阻塞打开语义:实现 FIFO 的阻塞打开语义,为 LockedPipeInode 添加 open_wait_queue 用于 FIFO 打开时的阻塞等待,实现 Linux FIFO 的阻塞/非阻塞打开语义(O_RDONLY/O_WRONLY/O_RDWR)(#1429)
  • 管道行为完善
    • 修复并完善 pipe 的行为,新增管道文件系统(PipeFS)并注册 PIPEFS_MAGIC
    • 扩展管道缓冲区至 65536 字节,支持原子写入
    • 实现命名管道(FIFO)支持,允许 O_RDWR 模式打开
    • 修复阻塞模式下写端唤醒的竞态条件,在阻塞模式下先增加 writer 计数再等待读端 (#1529, #1426)
    • 为 fcntl 系统调用添加管道缓冲区大小查询功能(F_GETPIPE_SZ 和 F_SETPIPE_SZ)
    • 在 procfs 中新增文件描述符相关支持

网络与设备:稳定性提升

  • 网络栈优化
    • 将 NapiManager 的锁机制改为 lock_irqsave,修复在中断上下文中调用 napi_schedule 可能导致的死锁问题 (#1525)
    • 修复 UDP getsockname/getpeername 系统调用 (#1460)
  • TTY 驱动增强
    • 增强 TTY 驱动和设备管理,改进 master 和 slave 类型的处理 (#1462)
    • 修复 TTY 和会话的权限检查逻辑,添加 TIOCNOTTY 命令支持 (#1430)
    • 为 TTY 设备添加 page_cache 方法并处理无页面缓存的情况 (#1428)
    • 改进 PTY 设备管理,添加 /dev/ptmx 符号链接指向内部 devpts 节点 (#1462)
  • 异步 I/O 通知:实现异步 I/O 通知机制和 ioctl 系统调用增强 (#1425)

文件系统实现:ext4 与 FAT 改进

  • ext4 文件系统
    • 修复 ext4 inode 读写操作中的自旋锁死锁问题
    • 添加父目录指针支持,实现 parent() 方法
    • 改进块设备寻址逻辑,统一使用 512 字节 LBA
    • 增强根文件系统探测机制,支持 ext4 和 FAT 自动识别
    • 修复 ELF 加载器中解释器路径查找问题
    • 为 ext4 和 fat 文件系统添加探测方法并优化代码 (#1509)
  • FAT 文件系统
    • 更新目录链接计数管理,确保目录链接计数从 2 开始(自引用和父目录链接)(#1454)
    • 完善文件系统统计信息支持,实现 statfs 所需的 SuperBlock 字段 (#1491)
    • 修复 FAT32 FSInfo 空闲簇计数更新时的溢出问题 (#1491)
  • 文件系统统计:完善 FAT 和 tmpfs 的文件系统统计信息支持,为 tmpfs 添加默认容量策略(物理内存一半)(#1491)

等待队列重构:引入 Waiter/Waker 模式

  • 等待队列机制重构:重构等待队列机制,引入 Waiter/Waker 模式避免唤醒丢失,统一等待接口,提供 wait_event_interruptible/uninterruptible 方法,重构 futex、epoll、eventfd、semaphore、completion 等模块使用新等待队列,优化进程等待子进程退出逻辑 (#1452)
  • 信号处理修复:在 sys_rt_sigtimedwait 中消费信号后及时刷新 HAS_PENDING_SIGNAL 状态,将 futex 可中断唤醒的错误码从 ERESTARTSYS 改为 EINTR,以符合 Linux 语义 (#1452)

工程效率与 CI:自动化与工具链改进

  • 夜间构建工作流:新增夜间构建与发布工作流,支持自动化构建和发布,分离构建和发布步骤,压缩构建产物为 tarball (#1469, #1471, #1472, #1473, #1474, #1475, #1476, #1477)
  • 构建容器升级:构建容器版本升级至 v1.19,修复 CI 相关问题,添加 riscv64 libc 支持,更新 CI 工作流中的 Docker 镜像仓库地址 (#1442)
  • CI 流程修复
    • 修复 CI 流程中测试失败但返回成功状态的问题 (#1403)
    • 修复 gVisor 测试自动化脚本,修复自动化开启/关闭 gVisor syscall 测例打包的脚本 (#1405)
    • 添加 open_test 测试 (#1458)
  • 代码审查自动化:添加 Claude 代码审查工作流,优化代码审查流程和配置,启用进度跟踪功能 (#1435, #1436, #1437, #1438, #1440, #1445, #1446, #1447)
  • 开发容器支持:添加基于 CNB 镜像的 devcontainer 支持,设置非 root 用户为默认 devcontainer 用户 (#1449, #1457)

文档与社区:体验与可访问性提升

  • DragonOS Playground:更新 README 和构建文档,添加 DragonOS Playground 体验方式,在 README 中新增云原生开发体验方式,提供 CNB 平台一键启动链接,更新社区新闻添加 Playground 上线信息 (#1484)
  • 文档翻译更新:多轮文档翻译更新,提升国际化支持 (#1485, #1453, #1411, #1408, #1402, #1396)
  • 用户环境改进
    • 修正 PS1 环境变量使其与 bash 默认高亮一致 (#1432)
    • 使用彩色 PS1,提升用户体验 (#1422)

gVisor 测试:兼容性持续提升

  • 测试用例扩展:删除 gVisor 测试中的 fifo_test blocklist 文件,扩展测试覆盖范围 (#1524)
  • 系统调用修复
    • 修复 open 系统调用在 gVisor 下的异常表现,修复多个 open 相关测试 (#1417)
    • 修复 utimensat/futimesat 系统调用边界情况以兼容 gVisor 测试 (#1431)
    • 修复 pread64 系统调用的兼容性和错误处理 (#1398)
    • 修复 sys_rename 逻辑并支持 RENAME_NOREPLACE (#1393)
    • 修复 getdents 系统调用实现 (#1397)
    • 修复 syscall/vfs 中写入部分可读缓冲区时的 SIG 衍生问题 (#1375)
    • 修复 cputime、sys_rt_sigtimedwait 和 sys_rt_sigreturn 相关问题 (#1406, #1394, #1400)

其他改进

  • 符号表查询修复:修复符号表查询问题,使用二分查找符号替代原有逻辑 (#1443)
  • 设备驱动改进:添加随机设备支持(/dev/random),提供随机字节生成能力 (#1455)
  • 文件系统改进:改进目录链接计数管理,更新 FAT 和 RAM 文件系统中的目录链接计数管理 (#1454)

版本概览

  • I/O 多路复用:poll/pselect6 信号掩码恢复逻辑修复,epoll 事件处理增强,超时唤醒机制完善
  • 时间与定时器:POSIX interval timer 完整实现,CPU 时间统计,clock_nanosleep 完善,POSIX 调度系统调用
  • 文件系统:tmpfs 支持,copy_file_range、creat、preadv2、pwritev2、fadvise64、umask 等新系统调用,append 锁机制,EventFd 文件系统,挂载传播机制
  • procfs 增强:/proc//stat、/proc//task、/proc//cmdline、/proc//maps、/proc//ns/、/proc/thread-self/ns 等文件支持,内核日志管理
  • 进程管理:shebang 脚本支持,进程等待语义修复,信号处理增强,进程执行改进
  • 内存与 I/O:用户空间内存访问修复,块缓存增强,页面缓存改进,slab 分配器并发安全修复,mmap 支持增强
  • IPC 与管道:FIFO 阻塞打开语义,管道竞态条件修复,管道缓冲区动态调整
  • 网络与设备:网络栈锁机制优化,UDP 套接字修复,TTY 驱动增强,随机设备支持
  • 文件系统实现:ext4 死锁修复,FAT 文件系统改进,文件系统统计信息完善
  • 等待队列重构:Waiter/Waker 模式,统一等待接口
  • 工程效率:夜间构建工作流,构建容器升级至 v1.19,CI 流程修复,代码审查自动化,开发容器支持
  • 文档与社区:DragonOS Playground 推广,文档翻译更新,用户环境改进
  • gVisor 测试:测试用例扩展,多个系统调用修复以通过 gVisor 测试

详细变更

1. I/O 多路复用与时间语义:对齐 Linux 6.6

poll/pselect6 优化 (#1531)

  • 修复 poll_select_finish 中信号掩码恢复逻辑,避免在 ERESTARTSYS 时错误恢复
  • 重构 pselect6 系统调用,正确处理 sigmask 参数和 timeout 验证
  • 移除 poll_select_finish 中零超时提前返回的逻辑
  • 为 PosixTimeSpec 添加 as_millis 方法
  • 将 select 相关测试加入白名单

epoll 事件处理 (#1528, #1492)

  • 修复普通文件在 epoll 中总是就绪的逻辑,避免添加不必要的 epitem
  • 改进 poll_select_finish 函数以支持更多时间类型
  • 修复 select 系统调用中 timeout 负值检查
  • 重构定时器创建逻辑,使用 EpollTimeoutWaker 结构体实现 TimerFunction
  • 将超时唤醒方式从直接唤醒 PCB 改为通过 Waker::wake() 触发

POSIX interval timer (#1501, #1521)

  • 新增 timer_create/timer_settime/timer_gettime/timer_getoverrun/timer_delete 系统调用处理,并接入 syscall table
  • 实现进程级 POSIX interval timer:基于 CLOCK_MONOTONIC 的创建/删除/设置/查询、周期性重装与到期调度
  • 完整实现 SIGEV_NONE/SIGEV_SIGNAL/SIGEV_THREAD_ID(放宽 SIGEV_THREAD_ID 限制,允许向同线程组的任意线程投递信号)与 SI_TIMER siginfo(含 si_timerid/si_overrun/si_value)
  • 修复 overrun 语义与信号合并:按线程 pending 队列合并并累积 overrun,避免重复入队导致进程被信号杀死
  • 修复周期性 timer 的 gettime 剩余时间计算与回调窗口返回 0 的问题
  • 修复定时器回调中信号锁/队列访问导致的自锁死
  • 修复 ProcessControlBlock::raw_tgid() 返回错误字段的问题

CPU 时间统计 (#1517)

  • 新增 ProcessCpuTime 结构体,用于统计用户态、内核态及总执行时间
  • 为 PCB 添加 cputime_wait_queue,支持 CLOCK_PROCESS/THREAD_CPUTIME_ID 的 clock_nanosleep
  • 在调度器 CPU 时间统计中增加 CPU-time 等待队列唤醒逻辑
  • 扩展 clock_gettime 和 clock_nanosleep 系统调用,支持进程和线程...
Read more

v0.3.0

20 Nov 05:55
1c53c97

Choose a tag to compare

V0.3.0

发布日期: 2025-11-20

核心亮点

Linux 兼容性突破

  • 已通过 275 个 Linux 兼容性测试用例,可在 ci-dashboard.dragonos.org 持续跟踪测试结果
  • 引入 gVisor Linux 系统调用自动化测试套件,每次提交/合并都能实时追踪内核行为与 Linux 的兼容性
  • 通过多项 gVisor 系统调用测试,内核行为与 Linux 更接近

容器原生能力显著增强

  • 命名空间支持:UTS、IPC、mnt 命名空间完善,支持 unshare 操作,容器隔离边界与权限模型向 Linux 主线看齐
  • 权限与能力capset/capget 系统调用、sethostname/domainname 修复,完善容器身份管理
  • 文件系统增强:xattr 六个系统调用、SYS_PWRITEVtruncate、路径遍历/目录切换权限检查,保障容器镜像构建和文件挂载的可控性
  • 网络子系统重构:全新的网络子系统实现,提供更好的 Linux 兼容性和可扩展性;桥接网络支持,应对多租户与边缘节点场景
  • 运维工具:Dropbear SSH 服务器支持,使轻量云原生场景可以即装即用

多线程稳定性提升

  • 线程组退出机制、PI futex、prctl(PR_SET_PDEATHSIG/PR_SET_NAME) 等一系列改动,让复杂进程的生命周期控制更接近 Linux 主线
  • Go 语言示例程序展示 DragonOS 在多线程场景下的最佳实践
  • vfork、CLONE_PARENT_SETTID、signal frame、FP 状态等历史遗留问题彻底修复

系统调用全面扩容

新增 10+ 个系统调用接口支持,包括:

  • waitidrt_sigtimedwaitsetitimer/getitimerclock_nanosleeptgkill/tkill
  • SYS_GETCPUSYS_PWRITEVtruncate
  • xattr 相关六个系统调用、capset/capget
  • clone3get_mempolicymincore

版本概览

  • 内核特性:线程组退出、PI futex、PR_SET_PDEATHSIG/PR_SET_NAME、SYS_GETCPU、waitid、rt_sigtimedwait、setitimer/getitimer、clock_nanosleep 等调度/信号链路全面增强
  • 内存与同步:VM_DONTCOPY、mincore、RLIMIT_FSIZE、资源限制框架、异常表用户态访问保护,futex 子系统修复/重构 10+ 项
  • 文件系统与命名空间:引入 pwritevtruncate、xattr 六个系统调用、路径权限检查、UTS/mnt/IPC namespace、capset/capget、/proc 改进
  • 平台与网络:x86 kexec+initram、VF2 RISC-V 适配、桥接网络、大规模网络栈重构、Dropbear SSH 服务器、Go 用户态演示与工具链完善
  • 工程效率:CI 容器升级、测试上传与监控、gVisor/FreeBSD bootstrap 支持、Nix-shell 工具链版本锁定

详细变更

1. 线程与信号:向 Linux 行为对齐

  • PRCTL 新选项、备用信号栈拷贝、克隆/等待语义补完,waitid/job control、资源限制(rlimit)框架与 RLIMIT_FSIZE 检查 (#1386, #1363, #1362, #1333, #1300, #1312)。
  • setitimer/getitimerclock_nanosleeptgkill/tkill 等定时器/信号路由补齐;fs/gs 用户空间验证、clone3 + /proc/cpuinfoPR_SET_PDEATHSIG 支持,提升 ABI 兼容性 (#1377, #1307, #1336, #1299).
  • 大量信号/线程相关修复:vfork、CLONE_PARENT_SETTID、signal frame、FP 状态、sys_sigaction/sigprocmask、/proc/self/exe 链接等,解决兼容性和稳定性问题 (#1358, #1342, #1357, #1356, #1347, #1359)。

2. Futex & 内存:同步栈焕然一新

  • PI futex、共享键生成重构、robust futex 竞态修复、wake op 兼容性、参数校验、futex test 启用,形成更完整的 futex 行为矩阵 (#1373, #1376, #1374, #1372, #1371, #1326, #1321, #1320, #1311, #1276, #d5158a0, #e85d1cd).

  • 内存管理改进:VM_DONTCOPY 标志、异常表驱动的安全用户态访问、mincore、madvise/msync 边界修复、匿名共享页同步、伙伴分配器死锁 & 边界检查等内核内存改进 (#1383, #1349, #1334, #1301, #1258, #1345, #1334, #1361, #1280)

  • 资源限制:Rlimit 框架与 RLIMIT_FSIZE、get_mempolicyclone3 集成的 /proc/cpuinfo,增强资源观测与限制能力 (#1300, #1312, #1299)

3. 容器与命名空间:为云原生而生

  • 网络子系统重构:实现了全新的网络子系统,提供了更好的 Linux 兼容性,以及更好的可扩展性 (#977)
  • 文件系统增强SYS_PWRITEVtruncate、路径遍历/目录切换权限检查、mknodat/fatfs 死锁修复、syncfs/openat/unlinkat/lseek 行为校正,保障文件系统语义一致性 (#1322, #1308, #1348, #1346, #1369, #1355, #1344)
  • 命名空间支持:扩展属性 xattr 六大系统调用、capset/capget、UTS namespace、setdomainname/sethostname 修复、IPC namespace 首版、mntns unshare,完善命名空间与安全隔离 (#1248, #1293, #1268, #1298, #1288, #1262)
  • 容器网络与运维:桥接网络、网络栈重构、Dropbear SSH 服务器支持,使得 DragonOS 离真正运行容器更近一步 (#1287, #1295, #1304)

4. 平台与设备:可部署性跃迁

  • x86 kexec + initram 完成闭环,配合 reboot syscall 完善,为快速切换和自举铺平道路 (#1303, #1157)
  • VF2 RISC-V 平台适配,DragonOS 成为国产 RISC-V 场景的可选方案 (#1285)
  • SYS_GETCPU 与 SMP syscall table 对齐,让多核调度与性能分析更精准 (#1368, #1367)
  • Go 语言示例程序,展示多线程场景下的最佳实践 (#1387)

5. 工程效率与社区:省时、省心、可复用

  • CI 与测试:CI 容器升级至 v1.16,加入测试结果上传、syscall 测试监控、实时 stdout 输出,问题定位速度倍增 (#1380, #1364, #1341, #15964250)
  • 自动化测试:引入 gVisor Linux 系统调用自动化测试套件,每次提交/合并,都能实时追踪内核行为与 Linux 的兼容性 (#1306, #1271, #1371, #1296)
  • 开发工具链:Nix-shell Rust 固定版本、FreeBSD bootstrap 支持,让外部贡献者也能快速复现同一环境 (#40603716, #093388bd)
  • 社区与文档:多轮文档翻译更新、EdgeOne CDN 赞助商信息、README/支持者列表刷新 (#1385, #1317, #1315, #1294, #1292, #1290, #1289, #1281)

已知关注点

  • futex 子系统近期大量变更,建议重点执行多线程压力与robust list 回归测试。
  • 新增 kexec/initram & 网络重构涉及启动链路,若自定义硬件需重新验证启动脚本。
  • Namespace/rlimit 相关 syscalls 需更新用户态工具链与测试以覆盖更多边界。

贡献者鸣谢

LoGin、kaleidoscope416、linfeng、Shenjie Yang、JingXuan_Wei、aLinChe、黄铭涛、Bruce.carrot93、Samuel Dai、Vitus、Yuming Jiang、火花等 15 位伙伴共同完成了 0.3.0。

参考资料

v0.2.0

22 Aug 15:21
c0d0501

Choose a tag to compare

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/newfstatatfaccessat2linkat/renameat2readlinkat 等;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() 占位返回 ENOSYStruncate_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/setgroupsumask 类型改造;/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 [email protected], [email protected]

linfeng: [email protected], [email protected]

火花 [email protected], [email protected]

MemoryShore: [email protected], [email protected]

黄铭涛: [email protected], [email protected]

Jomo [email protected]

Samuel Dai: [email protected], [email protected]

曾俊 [email protected]

kaleidoscope416 [email protected]

github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

DoL [email protected]

donjuanplatinum [email protected]

chiichen [email protected]

BrahmaMantra [email protected]

Vitus: [email protected], [email protected]

YJwu2023 [email protected]

GnoCiYeH [email protected]

LIU Yuwei [email protected]

yuyi2439 [email protected]

codeironman [email protected]

EMasi [email protected]

SMALLC [email protected]

laokengwt [email protected]

Godones [email protected]

oeasy1412 [email protected]

dragonosbot [email protected]

xiaolin2004 [email protected], [email protected]


🙏 致谢 (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

New Contributors

-- END OF DragonOS 0.2.0 Release Notes --

V0.1.10

13 May 08:58
ce48b93

Choose a tag to compare

V0.1.10

本文作者:龙进 [email protected]

DragonOS官方论坛:bbs.dragonos.org.cn

2024年5月13日

简介

  本次版本更新,引入了42个feature类型的PR,24个bug修复,5个文档更新,以及一些软件移植、ci相关的内容。

  当前版本核心看点:

  • 对调度子系统进行了重构
  • 能在riscv64下运行到hello world应用程序
  • 内存管理子系统引入了匿名页反向映射、写时拷贝以及延迟分配的特性
  • 文件系统引入了大量的新的系统接口
  • 实现了pty,并能运行简单的ssh服务端

赞助商列表

  • 中国雅云 雅安大数据产业园为DragonOS提供了云服务器支持。

更新内容-内核

  • feat(fs): 实现了sys_rename (#578)
  • feat(fs): 实现get_pathname (#615)
  • feat(kernel): 实现uname系统调用 (#614)
  • feat(fs): 添加mount系统调用 (#561)
  • feat(smp): 重写SMP模块 (#633)
  • feat(fs): 添加Statx系统调用 (#632)
  • feat(riscv64): 添加flush tlb的ipi (#636)
  • feat(fs): 实现SYS_LINK和SYS_LINKAT (#611)
  • fix(fs): mkdir输出错误信息;
  • fix(clippy): 修复内核的clippy检查报错 (#637)
  • feat(net): 实现socketpair (#576)
  • feat(process/riscv): 进程管理初始化 (#654)
  • fix(time): 修复clock_gettime返回类型错误,修复小时间间隔duration返回0问题 (#664)
  • fix(driver/base): 把Device trait的set_class改为设置Weak指针,以避免循环引用问题。 (#666)
  • feat(textui): 支持绘制24位深和16位深显示缓冲区 (#640)
  • fix(driver/tty): 修复tty设备显示在/sys目录下的bug (#668)
  • feat(fs): 新加结构体POSIXSTATFS与SuperBlock用于处理statfs系统调用 (#667)
  • feat(driver/rtc):实现了rtc的抽象,并且把x86的cmos rtc接入到设备驱动模型 (#674)
  • fix(net): 修复udp bind的时候,对port0处理不正确的问题(#676)
  • fix(fs/ramfs): 修复了ramfs中move_to未更新parent字段的bug (#673)
  • feat(mm): 实现页面反向映射 (#670)
  • fix(misc): 修复get_ramdom的长度错误问题() (#677)
  • feat(process/riscv): riscv64: switch process (#678)
  • fix(misc): 使nproc可以正确获取到cpu核心数 (#689)
  • fix(time): 修复jiffy时钟过快问题,启用gettimeofday测试,修改mount测试 (#680)
  • feat(driver/pty): 实现pty,附带测试程序 (#685)
  • feat(process/riscv): 实现copy-thread (#696)
  • feat(sched): 重写调度模块 (#679)
  • fix(riscv): 把内核编译target改为riscv64gc & 获取time csr的频率 & 修正浮点保存与恢复的汇编的问题 (#699)
  • feat(lock): 实现robust futex (#682)
  • feat(fs): BlockCache-read cache支持 (#521)
  • feat(mm): 实现SystemV共享内存 (#690)
  • chore(tools): add bootstrap support for Centos/RHEL8/fedora (#713)
  • feat(driver/pty): 完善pty,目前pty能够支持ssh (#708)
  • fix(smp): 修复smp启动的时候,损坏0号核心的idle进程的内核栈的问题 (#711)
  • feat(driver/riscv): 初始化riscv-sbi-timer (#716)
  • doc: Update DragonOS description and introduction (#717)
  • feat(riscv): 让riscv64能正常切换进程,并运行完所有的initcall (#721)
  • feat(net): 实现tcp backlog功能 (#714)
  • feat(mm): 添加slab内存分配器 (#683)
  • feat(fs): 引入Umount系统调用 (#719)
  • doc: Update build instructions for riscv64 architecture (#725)
  • fix(fs): socket统一改用GlobalSocketHandle,并且修复fcntl SETFD的错误 (#730)
  • feat: alarm系统调用实现 (#710)
  • feat(tty): add dummy console (#735)
  • fix(driver/pci): pci: 统一使用ecam root (#744)
  • feat(driver/pci): pci: 添加pci root manager来管理pci root,并使得riscv能够正常扫描pci设备. (#745)
  • build: 将smoltcp升级到0.11.0版本 (#740)
  • fix(unified-init): 修复unified-init导致cargo check失败的问题 (#747)
  • chore: Update virtio-drivers to commit 61ece509c4 and modify max_queue_size implementation (#748)
  • feat(net): 实现raw socket的poll (#739)
  • feat(mm): 实现缺页中断处理,支持页面延迟分配和写时拷贝,以及用户栈自动拓展 (#715)
  • feat(driver): 把virtio添加到sysfs (#752)
  • fix(dog): 添加CC环境变量,解决编译时找不到musl-gcc的问题 (#753)
  • doc(community): add description of conventional commit standard (#754)
  • feat(driver/virtio): riscv: 添加virtio-blk driver,并在riscv下能够正确挂载FAT32 (#761)
  • feat(fs): add sys_dup3 (#755)
  • feat(riscv): riscv下能够运行hello world用户程序 (#770)
  • feat(sched): add sched_yield (#766)
  • refactor(process): 调整arch_switch_to_user函数,把riscv和x86_64的共用逻辑抽取出来。 (#773)
  • feat(driver/acpi_pm): Implement ACPI PM Timer (#772)
  • chore: 适配dadk 0.1.11 (#777)
  • fix(libs/lib_ui): fix the display errors when system initialize (#779)
  • fix(riscv/process): 把riscv的调度时钟节拍率与HZ同步,并且修复切换到用户态的时候忘了在内核态关中断的bug (#780)
  • fix: (riscv/timer): 修复riscv下没有更新墙上时钟以及没有处理软中断的bug (#783)
  • feat(mm): add slab usage calculation (#768)
  • feat(bitmap): Add bit and for AllocBitMap (#793)
  • fix(mm): 修复vma映射标志错误 (#801)
  • feat:(riscv/intr) 实现riscv plic驱动,能处理外部中断 (#799)
  • doc(sched):调度子系统文档即cfs文档 (#807)
  • fix(net): Fix TCP Unresponsiveness and Inability to Close Connections (#791)
  • fix: disable mm debug log to prevent system lockup due to thingbuf issue (#808)
  • feat(driver/pci): add pci bus into sysfs (#792)
  • doc: Add Gentoo Linux In build_system.md (#810)

更新内容-用户环境

新特性/新应用移植

  • 添加core utils到系统 (#624)
  • 移植dns查询工具dog的--tcp功能 (#652)

更新内容-CI

  • 引入triagebot对issue和PR进行分类
  • 添加clippy检测的自动化工作流 (#649)
  • ci: import issue checker (#750)
  • ci: update the match regex of issue checker (#784)
  • ci: 添加支持gentoo系统的一键安装脚本 (#809)

New Contributors

源码、发布版镜像下载

  您可以通过以下方式获得源代码:

通过Git获取

通过DragonOS软件镜像站获取

  为解决国内访问GitHub慢、不稳定的问题,同时为了方便开发者们下载DragonOS的每个版本的代码,我们特意搭建了镜像站,您可以通过以下地址访问镜像站:

  您可以通过镜像站获取到DragonOS的代码压缩包,以及编译好的可运行的磁盘镜像。

开放源代码声明

:::{note}
为促进DragonOS项目的健康发展,DragonOS以GPLv2开源协议进行发布。所有能获得到DragonOS源代码以及相应的软件制品(包括但不限于二进制副本、文档)的人,都能享有我们通过GPLv2协议授予您的权利,同时您也需要遵守协议中规定的义务。

这是一个相当严格的,保护开源软件健康发展,不被侵占的协议。

对于大部分的善意的人们而言,您不会违反我们的开源协议。

我们鼓励DragonOS的自由传播、推广,但是请确保所有行为没有侵犯他人的合法权益,也没有违反GPLv2协议。

请特别注意,对于违反开源协议的,尤其是商业闭源使用以及任何剽窃、学术不端行为将会受到严肃的追责。(这是最容易违反我们的开源协议的场景)。

并且,请注意,按照GPLv2协议的要求,基于DragonOS修改或二次开发的软件,必须同样采用GPLv2协议开源,并标明其基于DragonOS进行了修改。亦需保证这些修改版本的用户能方便的获取到DragonOS的原始版本。

您必须使得DragonOS的开发者们,能够以同样的方式,从公开渠道获取到您二次开发的版本的源代码,否则您将违反GPLv2协议。

关于协议详细内容,还敬请您请阅读项目根目录下的LICENSE文件。请注意,按照GPLv2协议的要求,只有英文原版才具有法律效力。任何翻译版本都仅供参考。
:::

开源软件使用情况

  DragonOS在开发的过程中,参考了Linux社区的一些设计,或者引入了他们的部分思想,亦或是受到了他们的启发。我们在这里对Linux社区以及Linux社区的贡献者们致以最衷心的感谢!

V0.1.9

13 Mar 16:46
e3b8983

Choose a tag to compare

V0.1.9

:::{note}
本文作者:何懿聪 [email protected]

DragonOS官方论坛:bbs.dragonos.org.cn

2024年3月13日
:::

贡献者名单

DragonOS V0.1.9版本由以下小伙伴贡献代码:

赞助商列表

  • 中国雅云 雅安大数据产业园为DragonOS提供了云服务器支持。

赞助者名单

感谢以下同学的赞赏,我们将不断努力!

  • David Wen
  • 万晓兰
  • 龙进
  • 吴宇健

两千元以下:

更新内容-内核

新特性

  • refactor: 重构进程管理模块 (#380)
  • feature: 完善设备驱动模型 (#401)
  • feature: 实现e1000e网卡驱动 (#393)
  • feature: DragonOS虚拟化框架(#389)
  • feature: 支持syscall快速系统调用指令(#417)
  • refactor: 重写apic驱动 (#425)
  • feature: 线程机制与futex (#411)
  • feature: DragonStub引导DragonOS内核 (#460)
  • feature: 实现Epoll IO多路复用机制 (#455)
  • feature: 帧缓冲抽象以及vesafb驱动 (#483)
  • feature: 增加early io remap的fixmap功能 (#495)
  • feature: 实现内核日志系统 (#489)
  • refactor: 使用Rust重写x86_64下内核初始化代码(#507)
  • feature: 新增riscv64架构的内存管理等(#506)
  • refactor: 中断管理模块重构完成(#554)
  • refactor: 重构tty模块,实现unix兼容tty(#577)
  • featurn: 实现若干POSIX标准系统调用

bugfix

  • bugfix: 修正由于init proc union导致的无法运行的问题 && 修正由于内核线程启动后默认sleep的行为导致init进程无法正常运行的bug (#381)
  • bugfix: 修复了Flusher Drop的时候没有自动刷新TLB的bug(#384)
  • bugfix: multiboot2启动的信息因为没及时转存导致后面无法从其中进行查询的bug (#405)
  • bugfix: 修复bus/device manager对卸载逻辑的处理错误 (#385)
  • bugfix: 解决waitqueue sleep的时候,由于preempt count不为0,导致sched失败,从而导致该waitqueue下一次wakeup时,会把pcb多次加入调度队列的bug (#419)
  • bugfix: 修正fork的时候没有正确拷贝vm holes的bug (#433)
  • bugfix: 当物理机具有多个memory area的时候,无法正确使用这些区域的问题.以及在内核代码处出现内存空洞而导致无法正常运行的问题. (#448)
  • bugfix: 修复因rsdp v1 v2版本问题,导致ACPI无法正常初始化的bug (#454)
  • bugfix: 修正由于bus的driver、device强弱引用关系 不正确从而导致对象被释放的bug (#483)
  • bugfix: 修复文件关闭后epoll还持有对应描述符的文件弱引用的bug (#455)
  • bugfix: 修复无法sleep的问题以及进程处于block(true)状态时无法被信号唤醒&唤醒后不处理信号的问题 (#470)

更新内容-用户环境

新特性

  • feature: 新增init程序dragonreach (#391)
  • featurn: 新增shell程序NovaShell (#456)
  • featurn: 新增文本编辑器Held (#583)
  • featurn: 能够支持gcc,tar,redis等程序运行

源码、发布版镜像下载

  您可以通过以下方式获得源代码:

通过Git获取

通过DragonOS软件镜像站获取

  为解决国内访问GitHub慢、不稳定的问题,同时为了方便开发者们下载DragonOS的每个版本的代码,我们特意搭建了镜像站,您可以通过以下地址访问镜像站:

  您可以通过镜像站获取到DragonOS的代码压缩包,以及编译好的可运行的磁盘镜像。

开放源代码声明

:::{note}
为促进DragonOS项目的健康发展,DragonOS以GPLv2开源协议进行发布。所有能获得到DragonOS源代码以及相应的软件制品(包括但不限于二进制副本、文档)的人,都能享有我们通过GPLv2协议授予您的权利,同时您也需要遵守协议中规定的义务。

这是一个相当严格的,保护开源软件健康发展,不被侵占的协议。

对于大部分的善意的人们而言,您不会违反我们的开源协议。

我们鼓励DragonOS的自由传播、推广,但是请确保所有行为没有侵犯他人的合法权益,也没有违反GPLv2协议。

请特别注意,对于违反开源协议的,尤其是商业闭源使用以及任何剽窃、学术不端行为将会受到严肃的追责。(这是最容易违反我们的开源协议的场景)。

并且,请注意,按照GPLv2协议的要求,基于DragonOS修改或二次开发的软件,必须同样采用GPLv2协议开源,并标明其基于DragonOS进行了修改。亦需保证这些修改版本的用户能方便的获取到DragonOS的原始版本。

您必须使得DragonOS的开发者们,能够以同样的方式,从公开渠道获取到您二次开发的版本的源代码,否则您将违反GPLv2协议。

关于协议详细内容,还敬请您请阅读项目根目录下的LICENSE文件。请注意,按照GPLv2协议的要求,只有英文原版才具有法律效力。任何翻译版本都仅供参考。
:::

开源软件使用情况

  DragonOS在开发的过程中,参考了Linux社区的一些设计,或者引入了他们的部分思想,亦或是受到了他们的启发。我们在这里对Linux社区以及Linux社区的贡献者们致以最衷心的感谢!

V0.1.8

16 Aug 16:22
5db5a56

Choose a tag to compare

V0.1.8

:::{note}
本文作者:龙进 [email protected]

2023年8月16日
:::

贡献者名单

DragonOS V0.1.8版本由以下小伙伴贡献代码:

赞助者名单

感谢以下同学的赞赏,我们将不断努力!

更新内容-内核

新特性

  • refactor: 重构系统调用模块 (#267)
  • feature: 添加AlignBox和int_like宏 (#272)
  • refactor: 新的ipi功能&kick_cpu功能的重写 (#274)
  • feature: 实现gettimeofday()系统调用和clocksource+timekeeping子模块 (#278)
  • refactor: PCI设备中断重构,并删去USB相关代码 (#285)
  • feature: 注册串口设备,创建字符设备框架(#290)
  • refactor: 新的内存管理模块 (#303)
  • feature: 新的二进制加载器、elf解析器 (#303)
  • feature: 增加 ListenTable 来检测端口占用 (#291)
  • feature: 替换 local_irq_save 为 IrqFlagsGuard 实现 (#317)
  • feature: 实现系统调用Fstat (#295)
  • feature: 实现内核通知链 notifier chain (#316)
  • feature: 增加fcntl系统调用 (#323)
  • feature: 添加per cpu变量支持 (#327)
  • feature: spinlock守卫新增leak,spinlock新增force unlock功能.(#329)

bugfix

  • bugfix: 修复无法正常读取stdin的问题 (#264)
  • bugfix: 修复了当传入ahci驱动的缓冲区地址为用户缓冲区时,产生的内存越界问题.(采用分配内核缓冲区的方式临时解决) (#265)
  • bugfix: 解决由于local_irq_save、local_irq_restore函数的汇编不规范导致影响栈行为的bug。 (#303)
  • bugfix: 解决local_irq_save未关中断的错误 (#303)
  • bugfix: 解决arch_try_cmpxchg对于指针处理的错误 (#307)
  • bugfix: 修复了wait4的异常报错 (#312)
  • bugfix: 修正null设备以及zero设备无法open、行为不符合预期的问题 (#314)
  • bugfix: 修正fat文件系统未能正确的扩展文件大小的bug (#323)
  • bugfix: 修正rwlock有的地方由于未使用ManuallyDrop导致的use after free问题 (#329)

更新内容-用户环境

新特性

  • feature: 新增http server (#265)

bugfix

  • bugfix: 解决链接时,由于crt*.o未按照升序排列导致init段链接错误的问题 (#265)

更新内容-其他

  • bugfix: 固定编译工具链、修复由于新版rust编译器问题导致的报错。 (#258)
  • feature: Makefile: 根目录下添加make help命令 (#271)
  • doc: 更新github issue模板 (#277)
  • bugfix: 解决relibc的头文件没能识别__dragonos__定义的问题 (#315)
  • feature: 设置内核、relibc的远程为dragonos的git镜像站,防止国内网络问题导致编译失败 (#318)
  • feature: 自动安装、更新dadk (#319)

更新内容-软件移植

  • feature: 移植了sqlite3 (#323)

源码、发布版镜像下载

  您可以通过以下方式获得源代码:

通过Git获取

通过DragonOS软件镜像站获取

  为解决国内访问GitHub慢、不稳定的问题,同时为了方便开发者们下载DragonOS的每个版本的代码,我们特意搭建了镜像站,您可以通过以下地址访问镜像站:

  您可以通过镜像站获取到DragonOS的代码压缩包,以及编译好的可运行的磁盘镜像。

开放源代码声明

:::{note}
为促进DragonOS项目的健康发展,DragonOS以GPLv2开源协议进行发布。所有能获得到DragonOS源代码以及相应的软件制品(包括但不限于二进制副本、文档)的人,都能享有我们通过GPLv2协议授予您的权利,同时您也需要遵守协议中规定的义务。

这是一个相当严格的,保护开源软件健康发展,不被侵占的协议。

对于大部分的善意的人们而言,您不会违反我们的开源协议。

我们鼓励DragonOS的自由传播、推广,但是请确保所有行为没有侵犯他人的合法权益,也没有违反GPLv2协议。

请特别注意,对于违反开源协议的,尤其是商业闭源使用以及任何剽窃、学术不端行为将会受到严肃的追责。(这是最容易违反我们的开源协议的场景)。

并且,请注意,按照GPLv2协议的要求,基于DragonOS修改或二次开发的软件,必须同样采用GPLv2协议开源,并标明其基于DragonOS进行了修改。亦需保证这些修改版本的用户能方便的获取到DragonOS的原始版本。

您必须使得DragonOS的开发者们,能够以同样的方式,从公开渠道获取到您二次开发的版本的源代码,否则您将违反GPLv2协议。

关于协议详细内容,还敬请您请阅读项目根目录下的LICENSE文件。请注意,按照GPLv2协议的要求,只有英文原版才具有法律效力。任何翻译版本都仅供参考。
:::

开源软件使用情况

  DragonOS在开发的过程中,参考了一些开源项目的设计,或者引入了他们的部分代码,亦或是受到了他们的启发。现将他们列在下面。我们对这些开源项目的贡献者们致以最衷心的感谢!

格式:<项目名> - <链接> - <开源协议>

当前版本的所有提交记录

commit 40176b1c6603d487b7eb66fb81e641f0932ab90a
Author: longjin <[email protected]>
Date:   Tue Aug 15 15:06:57 2023 +0000

    删除无用代码,并把about app的版本号更新为0.1.8

commit 67b481888770c6469f572f244a4f97e42da77d1f
Author: houmkh <[email protected]>
Date:   Mon Aug 14 12:18:46 2023 +0800

    移动fstat (#330)
    
    * 移动fstat

commit 90a0a49048fdaf5e31320d0c87f8bed8db1bd882
Author: LoGin <[email protected]>
Date:   Mon Aug 14 01:24:49 2023 +0800

    修正rwlock有的地方由于未使用ManuallyDrop导致的use after free && spinlock守卫新增leak,spinlock新增force unlock功能.(#329)
    
    1.修正rwlock有的地方由于未使用ManuallyDrop导致的use after free
    2. spinlock守卫新增leak,spinlock新增force unlock功能.

commit c3dad0011d331d782670e14723aa48e98fbac787
Author: LoGin <[email protected]>
Date:   Sun Aug 13 16:28:24 2023 +0800

    添加per cpu变量支持 (#327)

commit 42c97fa7f4fee7eeefeda5d2b7ed14f598a58493
Author: LoGin <[email protected]>
Date:   Tue Aug 8 23:45:04 2023 +0800

    删除旧的libELF (#324)

commit 6d81180b3b7328466b976b69c5f7782aa66d8a89
Author: LoGin <[email protected]>
Date:   Tue Aug 8 23:39:22 2023 +0800

    移植sqlite3,并修复一些bug (#323)
    
    * bugfix: 程序加载器映射内存时,计算要映射的大小不正确的问题。
    
    * 修正brk系统调用不符合规范的地方
    
    * bugfix: 修正fat文件系统未能正确的扩展文件大小的bug
    
    * 增加fcntl系统调用
    
    * 移植sqlite3

commit 26887c6334cdca2d13ad71dec27fb69faa0a57be
Author: LoGin <[email protected]>
Date:   Mon Aug 7 01:38:52 2023 +0800

    bugfix: 解决取消低地址映射时,错误的把重映射的物理页释放,从而导致的use after free问题。 (#321)

commit 729a96ef47f473d535d8317a2ace5ba141fd282a
Author: Xshine <[email protected]>
Date:   Sun Aug 6 12:53:47 2023 +0800

    实现内核通知链 notifier chain (#316)
    
    * 实现通知链块结构
    
    * 实现通知链的基本功能
    
    * 实现 atomic notifier chain
    
    * 实现 blocking notifier chain
    
    * 使用 rust 范式完成功能
    
    * 支持回调次数 nr_to_call
    
    * 移动至 libs 目录
    
    * 完善通知链相关方法
    
    * 修正相关格式
    
    * 文档编写
    
    * 更改文档路径

commit be63f3b2b6b472daa3ee17180aa607409cb9d182
Author: houmkh <[email protected]>
Date:   Sat Aug 5 18:52:46 2023 +0800

    实现系统调用Fstat (#295)
    
    * fstat
    
    * 修改syscall.rs中的verify_area

commit 9550910ae1de900e0291a84d268e8873fa142902
Author: Chiichen <[email protected]>
Date:   Sat Aug 5 18:30:55 2023 +0800

     替换 local_irq_save 为 IrqFlagsGuard 实现 (#317)

commit abf3f634bf7e13e829556e962e7c73a85d163335
Author: LoGin <[email protected]>
Date:   Sat Aug 5 15:30:06 2023 +0800

    自动安装、更新dadk (#319)
    
    * auto install/auto update dadk

commit d6fd9c1e8025dd679339f9156477cb7d26d3db0d
Author: LoGin <[email protected]>
Date:   Sat Aug 5 15:04:08 2023 +0800

    设置内核、relibc的远程为dragonos的git镜像站,防止国内网络问题导致编译失败 (#318)

commit 1a62e7767c1215f9668915b42de770e7993711bf
Author: LoGin <[email protected]>
Date:   Wed Aug 2 18:11:05 2023 +0800

    解决relibc的头文件没能识别__dragonos__定义的问题 (#315)

commit 06500303303ec14711b4f995e2058e12703f0f2c
Author: LoGin <[email protected]>
Date:   Wed Aug 2 17:33:16 2023 +0800

    修正null设备以及zero设备无法open、行为不符合预期的问题 (#314)

commit 4da3758acf0327d429dfce3d313b50c2e0fc7723
Author: Chiichen <[email protected]>
Date:   Wed Aug 2 14:29:59 2023 +0800

    修复了wait4的异常报错 (#312)
    
    * 修复了wait4的异常报错

commit 821bb9a2dcfd28f9878d53ba722bdf164cf00f69
Author: Xshine <[email protected]>
Date:   Fri Jul 28 17:51:05 2023 +0800

    增加 ListenTable 来检测端口占用 (#291)
    
    * 增加 ListenTable 来检测端口占用
    
    
    * 使用Arc封装GlobalSocketHandle
    
    * 删除 listen 处的端口检测逻辑,延至实现端口复用时完成
    
    * 设立两张表,分别记录TCP和UDP的端口占用
    
    * 实现 meatadata 相关逻辑
    
    * 实现socket关闭时,端口在表中移除
    
    * 使用端口管理器重构端口记录表
    
    * 修正与RawSocket相关的端口管理逻辑
    
    * 补充测试文件
    
    * 修正 unbind_port 在逻辑错误
    
    * 修正格式问题
    
    ---------
    
    Co-authored-by: longjin <[email protected]>

commit 7cc4a02c7ff7bafd798b185beb7b0c2986b9f32f
Author: zhaoyao73 <[email protected]>
Date:   Fri Jul 28 03:44:45 2023 -0400

    fix arch_try_cmpxchg macro declaration (#307)
    
    fix arch_try_cmpxchg in atomic_cmpxchg
    
    Co-authored-by: Yao Zhao <[email protected]>

commit a30434f5201ca4c60b9515c8c23444fea3b5a8c6
Author: zhaoyao73 <[email protected]>
Date:   Tue Jul 25 10:02:42 2023 -0400

    fix some script bugs (#304)
    
    add arch linux prerequisited packages
    
    Co-authored-by: Yao Zhao <[email protected]>

commit 40fe15e0953f989ccfeb74826d61621d43dea6bb
Author: LoGin <[email protected]>
Date:   Sat Jul 22 16:27:02 2023 +0800

    新的内存管理模块 (#303)
    
    &emsp;&emsp;实现了具有优秀架构设计的新的内存管理模块,对内核空间和用户空间的内存映射、分配、释放、管理等操作进行了封装,使得内核开发者可以更加方便地进行内存管理。
    
    &emsp;&emsp;内存管理模块主要由以下类型的组件组成:
    
    - **硬件抽象层(MemoryManagementArch)** - 提供对具体处理器架构的抽象,使得内存管理模块可以在不同的处理器架构上运行
    - **页面映射器(PageMapper)**- 提供对虚拟地址和物理地址的映射,以及页表的创建、填写、销毁、权限管理等操作。分为两种类型:内核页表映射器(KernelMapper)和用户页表映射器(位于具体的用户地址空间结构中)
    - **页面刷新器(PageFlusher)** - 提供对页表的刷新操作(整表刷新、单页刷新、跨核心刷新)
    - **页帧分配器(FrameAllocator)** - 提供对页帧的分配、释放、管理等操作。具体来说,包括BumpAllocator、BuddyAllocator
    - **小对象分配器** - 提供对小内存对象的分配、释放、管理等操作。指的是内核里面的SlabAllocator (SlabAllocator的实现目前还没有完成)
    - ...
Read more

V0.1.7

24 Apr 02:21
3a23230

Choose a tag to compare

V0.1.7

本文作者:龙进 [email protected]

2023年4月24日

贡献者名单

DragonOS V0.1.7版本由以下小伙伴贡献代码:

赞助者名单

感谢以下同学的赞赏,我们将不断努力!

更新内容-内核

  • scheduler: 修改CFSqueue从Vec变成红黑树 (#229)
  • new: lazy_init (#230) (#236)
  • pci: pci重构+pcie支持 (#235)
  • net: 增加网络子系统,且能在用户态进行编程 (#237) (#247)
  • mm: 调整brk系统调用,使得参数、返回值与Linux一致 (#238)
  • 修改errno,使其与relibc的保持一致 (#234)
  • pci: 修复ecam无法获取MCFG table的问题 (#241)
  • libs: DowncastArc and its docs (#244)
  • softirq: 增加定时器和软中断文档,修改了softirq面向c的接口 (#245)
  • spinlock: 修复spinlock忘记恢复rflags的问题 (#247)
  • waitqueue: 增加wakeup_all和sleep_without_schedule的功能 (#247)(#253)
  • filesystem: 把PollStatus结构体改为使用bitflags库来实现 (#247)
  • filesystem: 增加iovec的支持(暴力实现) (#247)
  • filesystem: 新增SysFS (#250) (#254)
  • driver: 根据sysfs,完善设备驱动模型 (#254)
  • pipe: 匿名管道重构 (#253)
  • irq: 新增IrqArch抽象。以及IrqFlagsGuard。以简化关中断-恢复中断的过程 (#253)

更新内容-用户环境

新增仓库

  • 新增子项目:dsc
  • 新增子项目:DADK DragonOS Application Development Kit

DragonOS-relibc

  • Add sys_dup and sys_dup2 support (#2)
  • 添加原本的libc的内存分配器,修复对齐问题。 (#6) (#7)
  • 配置网络相关的系统调用 (#8)
  • 修复由于DragonOS不支持TLS(thread local storage)导致errno变量无法正常工作的问题. (#8)

更新内容-其他

  • build: 修复Issue#220;vnc的端口号恢复5900 (#243)
  • bootstrap: 解决使用zsh在构建DragonOS时,无法直接使用一键初始化脚本进行安装的问题 (#252)

更新内容-软件移植

源码、发布版镜像下载

  您可以通过以下方式获得源代码:

通过Git获取

通过DragonOS软件镜像站获取

  为解决国内访问GitHub慢、不稳定的问题,同时为了方便开发者们下载DragonOS的每个版本的代码,我们特意搭建了镜像站,您可以通过以下地址访问镜像站:

  您可以通过镜像站获取到DragonOS的代码压缩包,以及编译好的可运行的磁盘镜像。

开放源代码声明

为促进DragonOS项目的健康发展,DragonOS以GPLv2开源协议进行发布。所有能获得到DragonOS源代码以及相应的软件制品(包括但不限于二进制副本、文档)的人,都能享有我们通过GPLv2协议授予您的权利,同时您也需要遵守协议中规定的义务。

这是一个相当严格的,保护开源软件健康发展,不被侵占的协议。

对于大部分的善意的人们而言,您不会违反我们的开源协议。

我们鼓励DragonOS的自由传播、推广,但是请确保所有行为没有侵犯他人的合法权益,也没有违反GPLv2协议。

请特别注意,对于违反开源协议的,尤其是商业闭源使用以及任何剽窃、学术不端行为将会受到严肃的追责。(这是最容易违反我们的开源协议的场景)。

并且,请注意,按照GPLv2协议的要求,基于DragonOS修改或二次开发的软件,必须同样采用GPLv2协议开源,并标明其基于DragonOS进行了修改。亦需保证这些修改版本的用户能方便的获取到DragonOS的原始版本。

您必须使得DragonOS的开发者们,能够以同样的方式,从公开渠道获取到您二次开发的版本的源代码,否则您将违反GPLv2协议。

关于协议详细内容,还敬请您请阅读项目根目录下的LICENSE文件。请注意,按照GPLv2协议的要求,只有英文原版才具有法律效力。任何翻译版本都仅供参考。

开源软件使用情况

  DragonOS在开发的过程中,参考了一些开源项目的设计,或者引入了他们的部分代码,亦或是受到了他们的启发。现将他们列在下面。我们对这些开源项目的贡献者们致以最衷心的感谢!

格式:<项目名> - <链接> - <开源协议>

当前版本的所有提交记录

commit e0de0fd6a52199753a3127cfbb5d12f0a1555aae
Author: TingHuang <[email protected]>
Date:   Sun Apr 23 22:55:57 2023 +0800

    根据sysfs完善设备驱动模型 & 添加sysfs官方文档 (#254)
    
    * 根据sysfs完善设备驱动模型
    
    * 添加sysfs官方文档

commit f678331a3315b7847f08ab32b42d5bf49a9f3a6a
Author: hanjiezhou <[email protected]>
Date:   Sun Apr 23 21:05:10 2023 +0800

    匿名管道重构&增加IrqArch trait以及IrqFlags及其守卫 (#253)
    
    * 实现匿名管道
    
    * 增加IrqArch trait以及IrqFlags及其守卫
    
    ---------
    
    Co-authored-by: longjin <[email protected]>

commit 8a1e95abb5e4df5e872bb452efc26c9e9631157d
Author: Bullet <[email protected]>
Date:   Fri Apr 21 23:36:54 2023 +0800

    解决使用zsh在构建DragonOS时,无法直接使用一键初始化脚本进行安装的问题  (#252)

commit dd9f1fc1a42406461e6f0d38cce1e56e22a1a15f
Author: TingHuang <[email protected]>
Date:   Fri Apr 21 16:03:42 2023 +0800

    新增SysFS (#250)
    
    * 添加sysfs
    
    * 注册sysfs
    
    * 添加sysfs相关
    
    * 添加rust-anlyzer辅助配置
    
    * 将设备与sysfs相关联
    
    * 添加单独的文件管理sysfs下的文件夹

commit cde5492f725681ed89abe1e6eb088e05d943d793
Author: login <[email protected]>
Date:   Wed Apr 19 18:05:02 2023 +0800

    新增网络socket的系统调用接口 (#247)
    
    1.修复spinlock忘记恢复rflags的问题
    2.WaitQueue增加wakeup_all的功能
    3.完善tcp,udp,raw socket
    4.把PollStatus结构体改为使用bitflags
    5.新增iovec结构体
    6.完成网络的系统调用
    7.在bootstrap里面添加dnsmasq bridge-utils iptables
    
    ---------
    
    Co-authored-by: guanjinquan <[email protected]>

commit 8fd71f277271ae68e648f290c67f187b030feae0
Author: houmkh <[email protected]>
Date:   Mon Apr 17 17:17:06 2023 +0800

    增加定时器和软中断文档,修改了softirq面向c的接口 (#245)
    
    * 增加定时器和软中断文档
    
    * 修改softirq对c的接口和文档
    
    * 修改文档格式

commit 77c928f6ce3192c79ea42ab7bcba2713e289f73b
Author: login <[email protected]>
Date:   Sun Apr 16 20:29:04 2023 +0800

    new: DowncastArc and its docs (#244)

commit 7149abaa49a4ca70f0e42ad3b61fdfd6a941a092
Author: HoshuChiu <[email protected]>
Date:   Sun Apr 16 14:47:51 2023 +0800

    修复Issue#220;vnc的端口号恢复5900 (#243)
    
    
    * 修复Issue#220
    
    * qemu-vnc端口号恢复为5900

commit 5c1e552cc7f0a6ad75c8a1fa2928e3b9cc619657
Author: YJwu2023 <[email protected]>
Date:   Fri Apr 14 12:21:08 2023 +0800

    修复ecam无法获取MCFG table的问题 (#241)

commit 79a452ce8f27ad9c7283ac0bcf4078ed6fa018d7
Author: houmkh <[email protected]>
Date:   Tue Apr 11 17:05:33 2023 +0800

    修改errno,使其与relibc的保持一致 (#234)
    
    修改errno,使其与relibc的保持一致

commit ac48398d3f17f24ff9b5da5e400ce912d05f0ba2
Author: login <[email protected]>
Date:   Tue Apr 11 16:54:14 2023 +0800

    调整brk系统调用,使得参数、返回值与Linux一致 (#238)
    
    * 新增用于测试relibc的app
    
    * 为适配relibc,修改do_execve中关于用户栈的内容的设置
    
    * 调整brk系统调用,使得参数、返回值与Linux一致

commit 13776c114b15c406b1e0aaeeb71812ea6e471d2e
Author: login <[email protected]>
Date:   Mon Apr 10 20:22:39 2023 +0800

    增加对dhcpv4的支持(tcp、udp socket已写好,但由于缺少epoll机制,尚未完整测试) (#237)
    
    * 为virtio网卡完成smoltcp的phy层配置
    
    * raw socket
    
    * 初步写完udp和tcp socket
    
    * 能够正常通过dhcp获取ipv4地址(具有全局iface btree)
    
    ---------
    
    Co-authored-by: guanjinquan <[email protected]>

commit 78bf93f02f84bf5e024ddfb559f040e68ce39ccf
Author: YJwu2023 <[email protected]>
Date:   Sun Apr 9 12:30:02 2023 +0800

    pci重构+pcie支持 (#235)
    
    * pci重构+pcie支持
    
    * pci重构测试完成
    
    * 修正makefile的问题
    
    * 小修改
    
    * 修改函数名字

commit 5c9a63df836eedaca33c8c4c600b7aaeb2caf9a6
Author: login <[email protected]>
Date:   Sat Apr 8 23:53:53 2023 +0800

    Patch add lazy init (#236)
    
    * 修正并发安全问题

commit 766127209ee49465a8086cfd0bec90d8b79a96c0
Author: login <[email protected]>
Date:   Thu Apr 6 19:01:30 2023 +0800

    new: lazy_init (#230)

commit e0dfd4d5d70d1b50fc7ad3ed4bf84b7ba6dad19d
Author: hanjiezhou <[email protected]>
Date:   Thu Apr 6 00:50:14 2023 +0800

    修改CFSqueue从Vec变成红黑树 (#229)
    
    使用了由tickbh编写的rbtree: https://github.com/tickbh/rbtree-rs/blob/master/src/lib.rs
    
    Co-authored-by: tickbh <[email protected]>

commit 2a7d773d3d39f1cb3d59d6baa817c896c6fd52d1
Author: TingHuang <[email protected]>
Date:   Wed Apr 5 13:02:05 2023 +0800

    新增设备驱动模型,为设备和驱动提供高层视图 (#227)
    
    * 添加base mod
    
    * 添加设备驱动模型相关文件
    
    * 删除单独的mod文件,使用mod.rs,修改一些格式上的问题
    
    * 移动驱动错误类型到该文件
    
    * 修改一些格式上的问题

commit 5d00b1852818dd4b25952fd6a30deb20e7c7df53
Author: login <[email protected]>
Date:   Wed Apr 5 00:53:35 2023 +0800

    修复显示刷新线程的空指针问题 (#228)

V0.1.6

02 Apr 11:07
083e891

Choose a tag to compare

V0.1.6

本文作者:龙进 [email protected]

2023年4月2日

贡献者名单

DragonOS V0.1.6版本由以下小伙伴贡献代码:

赞助者名单

感谢以下同学的赞赏,我们将不断努力!

更新内容-内核

  • softirq: 重构了软中断 (#223)
  • timer: 重构了系统定时器 (#223)
  • stdio: 新增tty设备,用于标准输入输出 (#202) (#217)
  • lib: 第一套键盘扫描码的状态机 (#216) (#219)
  • syscall: 新增dup,dup2系统调用 (#224)
  • syscall: 新增SystemError枚举类型,使得错误处理更清晰 (#205)
  • driver: 新增x87浮点处理器支持 (#212)
  • driver: VirtIO网卡能够正常发送、接收数据 (#204)
  • filesystem: 修正了FAT32判断逻辑,解决了文件系统为FAT12/16时系统无法正常启动的问题。 (#211)
  • filesystem: 新增VFS文档,以及修改文档配置 (#209)
  • textui: 修复由于textui加锁,更改了preempt_count导致“进程长时间连续输出字符”的情况下,进程调度器不运行的问题。 (#203)
  • scheduler: 解决由于在中断上下文以外,sched_enqueue时,未关中断导致cpu_queue双重加锁的问题 (#201)

更新内容-用户环境

新增仓库

更新内容-其他

  • build: 添加了qemu使用VNC作为图像输出的选项 (#222)

更新内容-软件移植

源码、发布版镜像下载

  您可以通过以下方式获得源代码:

通过Git获取

通过DragonOS软件镜像站获取

  为解决国内访问GitHub慢、不稳定的问题,同时为了方便开发者们下载DragonOS的每个版本的代码,我们特意搭建了镜像站,您可以通过以下地址访问镜像站:

  您可以通过镜像站获取到DragonOS的代码压缩包,以及编译好的可运行的磁盘镜像。

开放源代码声明

为促进DragonOS项目的健康发展,DragonOS以GPLv2开源协议进行发布。所有能获得到DragonOS源代码以及相应的软件制品(包括但不限于二进制副本、文档)的人,都能享有我们通过GPLv2协议授予您的权利,同时您也需要遵守协议中规定的义务。

这是一个相当严格的,保护开源软件健康发展,不被侵占的协议。

对于大部分的善意的人们而言,您不会违反我们的开源协议。

我们鼓励DragonOS的自由传播、推广,但是请确保所有行为没有侵犯他人的合法权益,也没有违反GPLv2协议。

请特别注意,对于违反开源协议的,尤其是商业闭源使用以及任何剽窃、学术不端行为将会受到严肃的追责。(这是最容易违反我们的开源协议的场景)。

并且,请注意,按照GPLv2协议的要求,基于DragonOS修改或二次开发的软件,必须同样采用GPLv2协议开源,并标明其基于DragonOS进行了修改。亦需保证这些修改版本的用户能方便的获取到DragonOS的原始版本。

您必须使得DragonOS的开发者们,能够以同样的方式,从公开渠道获取到您二次开发的版本的源代码,否则您将违反GPLv2协议。

关于协议详细内容,还敬请您请阅读项目根目录下的LICENSE文件。请注意,按照GPLv2协议的要求,只有英文原版才具有法律效力。任何翻译版本都仅供参考。

开源软件使用情况

  DragonOS在开发的过程中,参考了一些开源项目的设计,或者引入了他们的部分代码,亦或是受到了他们的启发。现将他们列在下面。我们对这些开源项目的贡献者们致以最衷心的感谢!

格式:<项目名> - <链接> - <开源协议>

当前版本的所有提交记录

commit bacd691c9ef0502b5cc618aad50517f9e59df5e0
Author: login <[email protected]>
Date:   Sun Apr 2 17:09:33 2023 +0800

    软中断&定时器重构 (#223)
    
    * 软中断&定时器重构
    
    Co-authored-by: houmkh<[email protected]>
    
    * 修改timer的clock()
    
    * 删除debug信息
    
    ---------
    
    Co-authored-by: houmkh <[email protected]>

commit 6d345b774223b0daaf0ee629c7fb595a1912a9e2
Author: HoshuChiu <[email protected]>
Date:   Sun Apr 2 15:55:24 2023 +0800

    添加了qemu使用VNC作为图像输出的选项 (#222)
    
    * 添加了qemu使用VNC作为图像输出的选项
    
    * 设置vnc端口为5900
    
    ---------
    
    Co-authored-by: longjin <[email protected]>

commit 2b771e32f5795e0fdda458e3bb2651ef6b9673ac
Author: Gou Ngai <[email protected]>
Date:   Sun Apr 2 15:43:53 2023 +0800

    Add dup,dup2 (#224)
    
    * dup,dup2
    
    * fix: sys_dup2语义与posix不一致的问题
    
    ---------
    
    Co-authored-by: longjin <[email protected]>

commit d7b31a969ff091224a4929496f0278d024f78c77
Author: Gou Ngai <[email protected]>
Date:   Fri Mar 31 18:23:58 2023 +0800

    Patch keyboard capslock alt (#219)
    
    * keyboard-alt-capslock
    
    * 解决键盘输入'%'字符的时候无法回显的bug
    
    ---------
    
    Co-authored-by: longjin <[email protected]>

commit 20e3152e1eea97f87d644c3023391e172bc83c93
Author: login <[email protected]>
Date:   Fri Mar 31 12:54:37 2023 +0800

    将TTY与stdio进行连接,实现基本的stdio功能 (#217)
    
    * 将stdio与tty接上

commit 5fb12ce447710edf8566f250655a06cb27519fca
Author: Gou Ngai <[email protected]>
Date:   Thu Mar 30 18:19:02 2023 +0800

    第一套键盘扫描码的状态机 (#216)
    
    第一套键盘扫描码的状态机
    ---------
    
    Co-authored-by: guanjinquan <[email protected]>
    Co-authored-by: longjin <[email protected]>

commit 676b8ef62e1a0a1e52d65b40c53c1636a2954040
Author: Mork <[email protected]>
Date:   Wed Mar 29 21:24:11 2023 +0800

    部分函数从返回值为Result<<>,i32>修改为Result<<>,SystemError> (#210)
    
    * 将Result<<>,i32>替换为Result<<>,SystemError>
    * bugfix: 显示双缓冲区初始化的时候,连续注册了两次Video Softirq的问题。
    
    Co-authored-by: longjin <[email protected]>

commit 64aea4b3494bee7375e1c1ee5739c9fab0db0cb7
Author: Gou Ngai <[email protected]>
Date:   Tue Mar 28 20:44:26 2023 +0800

    增加x87FPU支持 (#212)
    
    * remove `ret_from_syscall`
    *修复ps2键盘驱动程序inode在进程fork的时候导致死锁的问题.
    *更新: VFS每次拷贝文件描述符的时候,都会去调用inode的open函数
    
    ---------
    
    Co-authored-by: longjin <[email protected]>

commit 2286eda6526ed1b46afd79b47dc701034b9e903d
Author: WaferJay <[email protected]>
Date:   Mon Mar 27 09:32:43 2023 +0800

    修正了FAT32判断逻辑,解决了文件系统为FAT12/16时系统无法正常启动的问题。 (#211)
    
    * fix(fat): fix determination of fat type casue crash if fs is fat12/16
    
    * refactor(fat): split BiosParameterBlock.validate() into BiosParameterBlockFAT32.validate() and BiosParameterBlockLegacy.validate()
    
    * 调整“最大允许的簇号”的常量放置的位置。
    
    ---------
    
    Co-authored-by: longjin <[email protected]>

commit 45b8371173b070028457f7ee64be33f68b4f9ada
Author: login <[email protected]>
Date:   Sat Mar 25 14:51:16 2023 +0800

    新增VFS文档,以及修改文档配置 (#209)
    
    * 1.新增vfs设计文档
    2.修改文档版权标志为"2022-2023, DragonOS Community"
    3.修改电脑版文档页面的宽度为90%
    
    * layout.html末尾加空行

commit 73c607aaddf6e4634cad179a81d3f1bc589f7220
Author: YJwu2023 <[email protected]>
Date:   Sat Mar 18 20:43:37 2023 +0800

    VirtIO网卡能够正常发送、接收数据 (#204)
    
    * virtio-net小修改
    
    * 移动volatile.rs到libs文件夹
    
    * 使用virtio-drivers 0.3.0
    
    * bugfix: 初始化BAR之后,未正确设置command register的问题
    
    
    ---------
    
    Co-authored-by: longjin <[email protected]>

commit 4454d1a2dd1f1078750151c028a794cfd9a04a1b
Author: login <[email protected]>
Date:   Sat Mar 18 20:26:05 2023 +0800

    新增SystemError枚举类型,使得错误处理更清晰 (#205)

commit 0d48c3c9c21a2dd470d0e1e58b507db60e0887bb
Author: login <[email protected]>
Date:   Thu Mar 16 19:48:59 2023 +0800

    new: tty设备(尚未与stdio接上) (#202)

commit 790d45764090bce3bbfb96b42b2818100a8cef9a
Author: login <[email protected]>
Date:   Wed Mar 15 11:42:41 2023 +0800

    修复由于textui加锁,更改了preempt_count导致“进程长时间连续输出字符”的情况下,进程调度器不运行的问题。 (#203)

commit c2e757d8cbeed01b16f48bea48ed8447685e6f1a
Author: login <[email protected]>
Date:   Mon Mar 13 22:22:23 2023 +0800

    解决由于在中断上下文以外,sched_enqueue时,未关中断导致cpu_queue双重加锁的问题 (#201)

V0.1.5

13 Mar 02:02
33270d0

Choose a tag to compare

V0.1.5

本文作者:龙进 [email protected]

2023年3月13日

贡献者名单

DragonOS V0.1.5版本由以下小伙伴贡献代码:

赞助者名单

感谢以下同学的赞赏,我们将不断努力!

更新内容-内核

  • scheduler: doc: 实时进程调度器文档 (#163)
  • scheduler: rt: RTQueue改用双向链表存储 (#174)
  • scheduler: load balance: 多核负载均衡 (#193)
  • Semaphore: new: 新增了rust实现的信号量 (#183)
  • mm: refactor: 重构了MMIO地址分配器 (#184)
  • RwLock: new: 新增了rust实现的读写锁 (#186)
  • driver: update: 完善pci的功能 (#194)
  • driver: new: VirtIO网卡驱动(仍存在问题) (#194)
  • driver: refactor: Rust版本的AHCI驱动 (#198)
  • block io: delete: 移除Block IO 调度器. (#196)
  • filesystem: refactor: 新版的VFS (#198)
  • filesystem: refactor: 新版的ProcFS (#198)
  • filesystem: refactor: 新版的DevS (#198)
  • filesystem: new: RamFS内存文件系统 (#198)
  • filesystem: new: FAT12/FAT16/FAT32文件系统 (#198)
  • filesystem: new: 新的设备、块设备抽象 (#198)

更新内容-用户环境

  • libc: 调整,将所有的app直接链接到libc.a中,而不是都执行一遍"搜索.o"的过程 (#171)

更新内容-其他

  • bootstrap: 解决ubuntu2210版本无法正确编译grub,以及正确安装qemu的问题 (#176)
  • toolchain: 添加rust的bare bone工具链 (#197)

更新内容-软件移植

源码、发布版镜像下载

  您可以通过以下方式获得源代码:

通过Git获取

通过DragonOS软件镜像站获取

  为解决国内访问GitHub慢、不稳定的问题,同时为了方便开发者们下载DragonOS的每个版本的代码,我们特意搭建了镜像站,您可以通过以下地址访问镜像站:

  您可以通过镜像站获取到DragonOS的代码压缩包,以及编译好的可运行的磁盘镜像。

开放源代码声明

为促进DragonOS项目的健康发展,DragonOS以GPLv2开源协议进行发布。所有能获得到DragonOS源代码以及相应的软件制品(包括但不限于二进制副本、文档)的人,都能享有我们通过GPLv2协议授予您的权利,同时您也需要遵守协议中规定的义务。

这是一个相当严格的,保护开源软件健康发展,不被侵占的协议。

对于大部分的善意的人们而言,您不会违反我们的开源协议。

我们鼓励DragonOS的自由传播、推广,但是请确保所有行为没有侵犯他人的合法权益,也没有违反GPLv2协议。

请特别注意,对于违反开源协议的,尤其是商业闭源使用以及任何剽窃、学术不端行为将会受到严肃的追责。(这是最容易违反我们的开源协议的场景)。

并且,请注意,按照GPLv2协议的要求,基于DragonOS修改或二次开发的软件,必须同样采用GPLv2协议开源,并标明其基于DragonOS进行了修改。亦需保证这些修改版本的用户能方便的获取到DragonOS的原始版本。

您必须使得DragonOS的开发者们,能够以同样的方式,从公开渠道获取到您二次开发的版本的源代码,否则您将违反GPLv2协议。

关于协议详细内容,还敬请您请阅读项目根目录下的LICENSE文件。请注意,按照GPLv2协议的要求,只有英文原版才具有法律效力。任何翻译版本都仅供参考。

开源软件使用情况

  DragonOS在开发的过程中,参考了一些开源项目的设计,或者引入了他们的部分代码,亦或是受到了他们的启发。现将他们列在下面。我们对这些开源项目的贡献者们致以最衷心的感谢!

格式:<项目名> - <链接> - <开源协议>

当前版本的所有提交记录

commit 84407d360511c7699938a0f245ae33ff76f16b17
Author: login <[email protected]>
Date:   Mon Mar 13 00:26:04 2023 +0800

    bugfix:解决touch命令失败的问题 (#199)
    
    * bug fix : 解决touch命令失败的问题

commit 004e86ff19727df303c23b42c7a271b9214c6898
Author: login <[email protected]>
Date:   Sun Mar 12 22:36:11 2023 +0800

    新版文件系统重构完成 (#198)
    
    1.重构:VFS
    2. 重构:ProcFS
    3. 重构:DevFS
    4. 重构:FAT32
    5. 重构:AHCI驱动
    6. 新增:RamFS
    7. 新增:MountFS
    8. 新增:FAT12
    9. 新增:FAT16
    10. 重构:设备抽象
    
    Co-authored-by: guanjinquan <[email protected]>
    Co-authored-by: DaJiYuQia <[email protected]>

commit 17041e0e307eaf9e8d8ddbddfa186cd1f10f1bc0
Author: login <[email protected]>
Date:   Sun Mar 12 21:04:37 2023 +0800

    添加rust的bare bone工具链 (#197)

commit 26d84a31393c50063ff416bc509316e8d342028c
Author: YJwu2023 <[email protected]>
Date:   Sat Mar 11 21:09:50 2023 +0800

    新增VirtIO网卡驱动 (#194)
    
    * 修复内存bug与grub安装脚本的错误
    
    * 修改小bug
    
    * PCI增加功能与virtio-net驱动
    
    * little fix
    
    * virtio-net小修改

commit 1d48996375149279a721777b2c600e1b5c3ee1b5
Author: kong <[email protected]>
Date:   Sat Mar 11 18:17:35 2023 +0800

    多核负载均衡(#193)
    
    * feat(sched):CPU负载检测初步实现
    
    * fix(smp):调整smp中的apic的头文件声明
    
    * fix(smp):简单的负载均衡算法实现
    
    * fix(sched):抽离负载均衡方法
    
    * fix(sched):修改rt中的运行队列bug,调整负载均衡逻辑
    
    * fix(process):移除无用测试代码
    
    * reformat code

commit ef9f9732b09f78d7192f1d0dd3b41be655fb0914
Author: houmkh <[email protected]>
Date:   Thu Mar 9 23:31:25 2023 +0800

    修复了mmio buddy的bug (#189)
    
    * 修改buddy_query

commit c1396d277115b371d09ad6d39a1c419f9224ffd0
Author: Gou Ngai <[email protected]>
Date:   Mon Mar 6 11:28:32 2023 +0800

    Rwlock文档 (#186)
    
    * Rwlock文档

commit a7eb62a47a8d701b90a14f83cc9028cfed07c268
Author: houmkh <[email protected]>
Date:   Mon Mar 6 11:21:29 2023 +0800

    修改mmio-buddy代码结构和函数名 (#184)
    
    * 修改mmio-buddy结构和函数名

commit c2481452f81750ec02adec627ab2edbc93d9cd9c
Author: houmkh <[email protected]>
Date:   Sat Mar 4 18:36:55 2023 +0800

    rust重构mmio_buddy和mmio (#178)
    
    * rust重构mmio_buddy和mmio
    
    * mmio-buddy文档
    
    ---------
    
    Co-authored-by: longjin <[email protected]>

commit f1284c35717a2f9f8cee7cecfc835ba1d23a1161
Author: Gou Ngai <[email protected]>
Date:   Sat Mar 4 17:47:17 2023 +0800

    新增了rust实现的信号量 (#181)
    
    * 新增了rust实现的信号量
    
    ---------
    
    Co-authored-by: longjin <[email protected]>

commit 83b9512c1c1e8289000084adcafddebee6a23f16
Author: Gou Ngai <[email protected]>
Date:   Sat Mar 4 16:54:42 2023 +0800

    新增了rust实现的信号量 (#183)
    
    * 新增了rust实现的信号量

commit e532a536a0b244f4590e6eb7910084bd63049704
Author: login <[email protected]>
Date:   Thu Mar 2 22:50:07 2023 +0800

    添加赞助者:FengWangHao (#179)

commit b66beefd4e9ead61ee55f335246ebeb8277d3011
Author: login <[email protected]>
Date:   Mon Feb 27 01:00:35 2023 +0800

    解决ubuntu2210版本无法正确编译grub,以及正确安装qemu的问题 (#176)

commit 4177d0327c3eacdc606f0b22f99f208fd48cfff3
Author: kong <[email protected]>
Date:   Mon Feb 20 17:03:37 2023 +0800

    RTQueue改用双向链表存储(#174)
    
    * RTQueue改用双向链表存储

commit 2bf5ee0e3cac3a91dee6a13b71c86a9477c07d9b
Author: login <[email protected]>
Date:   Sat Feb 11 13:04:24 2023 +0800

    修改libc的编译相关内容(#171)
    
    1.将libc的include文件夹分为export和internal
    2.将所有app都直接链接libc.a,而不是都执行一遍"搜索.o"的过程

commit 90b077f9d3ecd48ca46f8bbb32363620db6ddbe6
Author: kong <[email protected]>
Date:   Thu Feb 9 15:24:37 2023 +0800

    Sched rt doc (#163)
    
    * update
    
    * 完善调度器文档
    
    * 更新RT调度器文档
    
    * 更新实时调度文档

commit 009f92d50fe2e52e425bce397801d3fa204daecd
Author: Satin Wuker <[email protected]>
Date:   Tue Feb 7 19:29:09 2023 -0800

    fix typos 改正README_EN的错别字和语法错误 (#167)

V0.1.4

04 Feb 05:15
34e05fe

Choose a tag to compare

V0.1.4

本文作者:龙进 [email protected]

2023年2月4日

贡献者名单

DragonOS V0.1.4版本由以下小伙伴贡献代码:

赞助者名单

感谢以下同学的赞赏,我们将不断努力!

  • David Wen (人民币2000元)
  • Seele.Clover (人民币500元)
  • 叶锦毅 (人民币100元)
  • 林 (人民币50元)
  • Albert (人民币9.99元)
  • TerryLeeSCUT (人民币6.66元)
  • slientbard (人民币6.66元)
  • 悟 (人民币2.00元)
  • 【其他匿名的热心人士】(人民币1.00元)

更新内容-内核

  • Spinlock: new: 新增具有守卫的自旋锁SpinLock,支持编译期对锁的使用进行检查。 (#148)
  • Spinlock: feature: Raw spin lock 增加lock_irqsave、unlock_irqrestore(#151)
  • Mutex: new: Rust版本的Mutex (#157)
  • doc: new: Rust代码风格文档 (#161)
  • WaitQueue: new: Rust版本的WaitQueue (#162)
  • WaitQueue: update: C版本的wait_queue的唤醒,改为立即唤醒 (#158)
  • block io: new: Block IO 调度器. 当具有多核时,io调度器在核心1上运行。 (#158)
  • smp: bugfix: 为AP核启动apic_timer,使其能够运行调度 (#158)
  • smp: new: 增加kick_cpu功能,支持让某个特定核心立即运行调度器 (#158)
  • smp: new: 增加进程在核心间迁移的功能 (#158)
  • scheduler: new: 增加实时进程调度器(支持FIFO、RR策略) (#139)
  • scheduler: update: CFS调度器为每个核心设置单独的IDLE进程pcb(pid均为0) (#158)
  • scheduler: bugfix: process_wakeup时,对cfs的进程,重设虚拟运行时间。解决由于休眠的进程,其虚拟运行时间过小,导致其他进程饥饿的问题 (#158)
  • process: new: pcb中增加migrate_to字段 (#158)

更新内容-用户环境

更新内容-其他

更新内容-软件移植

源码、发布版镜像下载

  您可以通过以下方式获得源代码:

通过Git获取

通过DragonOS软件镜像站获取

  为解决国内访问GitHub慢、不稳定的问题,同时为了方便开发者们下载DragonOS的每个版本的代码,我们特意搭建了镜像站,您可以通过以下地址访问镜像站:

  您可以通过镜像站获取到DragonOS的代码压缩包,以及编译好的可运行的磁盘镜像。

开放源代码声明

为促进DragonOS项目的健康发展,DragonOS以GPLv2开源协议进行发布。所有能获得到DragonOS源代码以及相应的软件制品(包括但不限于二进制副本、文档)的人,都能享有我们通过GPLv2协议授予您的权利,同时您也需要遵守协议中规定的义务。

这是一个相当严格的,保护开源软件健康发展,不被侵占的协议。

对于大部分的善意的人们而言,您不会违反我们的开源协议。

我们鼓励DragonOS的自由传播、推广,但是请确保所有行为没有侵犯他人的合法权益,也没有违反GPLv2协议。

请特别注意,对于违反开源协议的,尤其是商业闭源使用以及任何剽窃、学术不端行为将会受到严肃的追责。(这是最容易违反我们的开源协议的场景)。

并且,请注意,按照GPLv2协议的要求,基于DragonOS修改或二次开发的软件,必须同样采用GPLv2协议开源,并标明其基于DragonOS进行了修改。亦需保证这些修改版本的用户能方便的获取到DragonOS的原始版本。

您必须使得DragonOS的开发者们,能够以同样的方式,从公开渠道获取到您二次开发的版本的源代码,否则您将违反GPLv2协议。

关于协议详细内容,还敬请您请阅读项目根目录下的LICENSE文件。请注意,按照GPLv2协议的要求,只有英文原版才具有法律效力。任何翻译版本都仅供参考。

开源软件使用情况

  DragonOS在开发的过程中,参考了一些开源项目的设计,或者引入了他们的部分代码,亦或是受到了他们的启发。现将他们列在下面。我们对这些开源项目的贡献者们致以最衷心的感谢!

格式:<项目名> - <链接> - <开源协议>

当前版本的所有提交记录

commit f6ba114bb0420e848ef7fc844c96c0d7a0552d93
Author: houmkh <[email protected]>
Date:   Sat Feb 4 12:31:15 2023 +0800

    Block IO Scheduler (#158)
    
    * Block io调度器
    * process_wakeup时,对cfs的进程,重设虚拟运行时间。解决由于休眠的进程,其虚拟运行时间过小,导致其他进程饥饿的问题
    
    * 1、为AP核启动apic_timer,使其能够运行调度
    2、增加kick_cpu功能,支持让某个特定核心立即运行调度器
    3、wait_queue的唤醒,改为立即唤醒。
    4、增加进程在核心间迁移的功能
    5、CFS调度器为每个核心设置单独的IDLE进程pcb(pid均为0)
    6、pcb中增加migrate_to字段
    7、当具有多核时,io调度器在核心1上运行。
    
    * io调度器文件位置修改
    
    * 修改io的makefile
    
    * 更新makefile中的变量名
    
    * 修改io调度器函数名
    
    ---------
    
    Co-authored-by: login <[email protected]>

commit 151251b50b7ed55596edd32ffec49a4041010e2a
Author: login <[email protected]>
Date:   Tue Jan 31 19:27:02 2023 +0800

    Patch add rust waitqueue (#162)
    
    * new: rust版本的waitqueue
    
    * new:等待队列的文档

commit 3c369b1430e8d571bcc74a8ef7fefc1c4cae5dd2
Author: login <[email protected]>
Date:   Mon Jan 30 15:43:42 2023 +0800

    new:新增rust代码风格 (#161)

commit c28bd540ac856cd9d8d5597852af8f2588a660e4
Author: login <[email protected]>
Date:   Mon Jan 30 15:10:24 2023 +0800

    更新赞助者名单 (#160)
    
    * 更新赞赏者列表

commit 935f40ec174fec217aed4553d45996327443bc0e
Author: login <[email protected]>
Date:   Tue Jan 17 21:30:16 2023 +0800

    new: Rust版本的Mutex (#157)

commit d8a064128a8a06b90ff4c7b87c193518d9572641
Author: Gou Ngai <[email protected]>
Date:   Mon Jan 16 19:58:50 2023 +0800

    Raw spin lock 增加lock_irqsave、unlock_irqrestore(#151)
    
    Raw spin lock 增加lock_irqsave、unlock_irqrestore

commit 06b09f34ed64a006a80ae8df383e3c8b176f02e0
Author: kong <[email protected]>
Date:   Sat Jan 14 22:38:05 2023 +0800

    Patch sched rust (#139)
    
    * update
    
    * 添加rt调度器的rust初步实现
    
    * 完善rt调度逻辑
    
    * 调试rt调度器
    
    * 修改sched的返回值
    
    * cargo fmt 格式化
    
    * 删除无用代码,修补rt bug
    
    * 删除无用的代码,和重复的逻辑
    
    * 软中断bugfix
    
    * 删除一些代码
    
    * 添加kthread_run_rt文档
    
    * 解决sphinix警告_static目录不存在的问题
    
    Co-authored-by: longjin <[email protected]>

commit ec53d23ed03347854189d92b7e175f309779321b
Author: login <[email protected]>
Date:   Sat Jan 14 10:35:49 2023 +0800

    new: 新增具有守卫的自旋锁SpinLock,支持编译期对锁的使用进行检查。 (#148)

commit 41474ba3df99b6822ce452dc94dc53a4da62cba1
Author: login <[email protected]>
Date:   Tue Jan 10 22:07:41 2023 +0800

    更新Readme中关于DragonOS的介绍部分 (#146)

commit 8ad2e358fd3b05eed2919de50640682e51687fb5
Author: login <[email protected]>
Date:   Sun Jan 8 15:51:59 2023 +0800

    更新about app中的版本号 (#145)
    
    * 更新about app中的版本号

commit a8b621c8d1fe77251b8e4eafe258dc0ee7366dd5
Author: login <[email protected]>
Date:   Sun Jan 8 15:47:44 2023 +0800

    修正由于libc中具有crti.S和crtn.S,造成的与x86_64-elf-gcc不兼容的问题 (#144)

commit 9358ff0f6f7daa18d6fab4497de025736b3d6725
Author: login <[email protected]>
Date:   Sun Jan 8 15:06:52 2023 +0800

    Add v0.1.3 changelog (#143)
    
    * new: 0.1.3发行日志
    
    * 新增输出指定时间范围内的贡献者名单的脚本
    
    * 更新bootloader文档
    
    * update: 简介文档
    
    * new: 镜像站文档
    
    * update: 功能特性文档