Skip to content

Releases: DragonOS-Community/DragonOS

V0.1.9

13 Mar 16:46
e3b8983
Compare
Choose a tag to compare

V0.1.9

:::{note}
本文作者:何懿聪 heyicong@dragonos.org

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
Compare
Choose a tag to compare

V0.1.8

:::{note}
本文作者:龙进 longjin@DragonOS.org

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 <longjin@RinGoTek.cn>
Date:   Tue Aug 15 15:06:57 2023 +0000

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

commit 67b481888770c6469f572f244a4f97e42da77d1f
Author: houmkh <1119644616@qq.com>
Date:   Mon Aug 14 12:18:46 2023 +0800

    移动fstat (#330)
    
    * 移动fstat

commit 90a0a49048fdaf5e31320d0c87f8bed8db1bd882
Author: LoGin <longjin@DragonOS.org>
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 <longjin@DragonOS.org>
Date:   Sun Aug 13 16:28:24 2023 +0800

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

commit 42c97fa7f4fee7eeefeda5d2b7ed14f598a58493
Author: LoGin <longjin@DragonOS.org>
Date:   Tue Aug 8 23:45:04 2023 +0800

    删除旧的libELF (#324)

commit 6d81180b3b7328466b976b69c5f7782aa66d8a89
Author: LoGin <longjin@DragonOS.org>
Date:   Tue Aug 8 23:39:22 2023 +0800

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

commit 26887c6334cdca2d13ad71dec27fb69faa0a57be
Author: LoGin <longjin@DragonOS.org>
Date:   Mon Aug 7 01:38:52 2023 +0800

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

commit 729a96ef47f473d535d8317a2ace5ba141fd282a
Author: Xshine <gshine@m.scnu.edu.cn>
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 <1119644616@qq.com>
Date:   Sat Aug 5 18:52:46 2023 +0800

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

commit 9550910ae1de900e0291a84d268e8873fa142902
Author: Chiichen <39649411+Chiichen@users.noreply.github.com>
Date:   Sat Aug 5 18:30:55 2023 +0800

     替换 local_irq_save 为 IrqFlagsGuard 实现 (#317)

commit abf3f634bf7e13e829556e962e7c73a85d163335
Author: LoGin <longjin@DragonOS.org>
Date:   Sat Aug 5 15:30:06 2023 +0800

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

commit d6fd9c1e8025dd679339f9156477cb7d26d3db0d
Author: LoGin <longjin@DragonOS.org>
Date:   Sat Aug 5 15:04:08 2023 +0800

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

commit 1a62e7767c1215f9668915b42de770e7993711bf
Author: LoGin <longjin@DragonOS.org>
Date:   Wed Aug 2 18:11:05 2023 +0800

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

commit 06500303303ec14711b4f995e2058e12703f0f2c
Author: LoGin <longjin@DragonOS.org>
Date:   Wed Aug 2 17:33:16 2023 +0800

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

commit 4da3758acf0327d429dfce3d313b50c2e0fc7723
Author: Chiichen <39649411+Chiichen@users.noreply.github.com>
Date:   Wed Aug 2 14:29:59 2023 +0800

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

commit 821bb9a2dcfd28f9878d53ba722bdf164cf00f69
Author: Xshine <caijiaxin@dragonos.org>
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 <longjin@RinGoTek.cn>

commit 7cc4a02c7ff7bafd798b185beb7b0c2986b9f32f
Author: zhaoyao73 <zhaoyao73@users.noreply.github.com>
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 <dragonlinux@gmail.com>

commit a30434f5201ca4c60b9515c8c23444fea3b5a8c6
Author: zhaoyao73 <zhaoyao73@users.noreply.github.com>
Date:   Tue Jul 25 10:02:42 2023 -0400

    fix some script bugs (#304)
    
    add arch linux prerequisited packages
    
    Co-authored-by: Yao Zhao <dragonlinux@gmail.com>

commit 40fe15e0953f989ccfeb74826d61621d43dea6bb
Author: LoGin <longjin@DragonOS.org>
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
Compare
Choose a tag to compare

V0.1.7

本文作者:龙进 longjin@DragonOS.org

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 <92705854+TingSHub@users.noreply.github.com>
Date:   Sun Apr 23 22:55:57 2023 +0800

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

commit f678331a3315b7847f08ab32b42d5bf49a9f3a6a
Author: hanjiezhou <zhouhanjie@dragonos.org>
Date:   Sun Apr 23 21:05:10 2023 +0800

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

commit 8a1e95abb5e4df5e872bb452efc26c9e9631157d
Author: Bullet <93781792+GP-Bullet@users.noreply.github.com>
Date:   Fri Apr 21 23:36:54 2023 +0800

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

commit dd9f1fc1a42406461e6f0d38cce1e56e22a1a15f
Author: TingHuang <92705854+TingSHub@users.noreply.github.com>
Date:   Fri Apr 21 16:03:42 2023 +0800

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

commit cde5492f725681ed89abe1e6eb088e05d943d793
Author: login <longjin@DragonOS.org>
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 <1666320330@qq.com>

commit 8fd71f277271ae68e648f290c67f187b030feae0
Author: houmkh <1119644616@qq.com>
Date:   Mon Apr 17 17:17:06 2023 +0800

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

commit 77c928f6ce3192c79ea42ab7bcba2713e289f73b
Author: login <longjin@DragonOS.org>
Date:   Sun Apr 16 20:29:04 2023 +0800

    new: DowncastArc and its docs (#244)

commit 7149abaa49a4ca70f0e42ad3b61fdfd6a941a092
Author: HoshuChiu <129569557+HoshuChiu@users.noreply.github.com>
Date:   Sun Apr 16 14:47:51 2023 +0800

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

commit 5c1e552cc7f0a6ad75c8a1fa2928e3b9cc619657
Author: YJwu2023 <yujianwu2019@gmail.com>
Date:   Fri Apr 14 12:21:08 2023 +0800

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

commit 79a452ce8f27ad9c7283ac0bcf4078ed6fa018d7
Author: houmkh <1119644616@qq.com>
Date:   Tue Apr 11 17:05:33 2023 +0800

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

commit ac48398d3f17f24ff9b5da5e400ce912d05f0ba2
Author: login <longjin@DragonOS.org>
Date:   Tue Apr 11 16:54:14 2023 +0800

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

commit 13776c114b15c406b1e0aaeeb71812ea6e471d2e
Author: login <longjin@DragonOS.org>
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 <1666320330@qq.com>

commit 78bf93f02f84bf5e024ddfb559f040e68ce39ccf
Author: YJwu2023 <yujianwu2019@gmail.com>
Date:   Sun Apr 9 12:30:02 2023 +0800

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

commit 5c9a63df836eedaca33c8c4c600b7aaeb2caf9a6
Author: login <longjin@DragonOS.org>
Date:   Sat Apr 8 23:53:53 2023 +0800

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

commit 766127209ee49465a8086cfd0bec90d8b79a96c0
Author: login <longjin@DragonOS.org>
Date:   Thu Apr 6 19:01:30 2023 +0800

    new: lazy_init (#230)

commit e0dfd4d5d70d1b50fc7ad3ed4bf84b7ba6dad19d
Author: hanjiezhou <zhouhanjie@dragonos.org>
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 <tickdream125@hotmail.com>

commit 2a7d773d3d39f1cb3d59d6baa817c896c6fd52d1
Author: TingHuang <92705854+TingSHub@users.noreply.github.com>
Date:   Wed Apr 5 13:02:05 2023 +0800

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

commit 5d00b1852818dd4b25952fd6a30deb20e7c7df53
Author: login <longjin@DragonOS.org>
Date:   Wed Apr 5 00:53:35 2023 +0800

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

V0.1.6

02 Apr 11:07
083e891
Compare
Choose a tag to compare

V0.1.6

本文作者:龙进 longjin@DragonOS.org

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 <longjin@DragonOS.org>
Date:   Sun Apr 2 17:09:33 2023 +0800

    软中断&定时器重构 (#223)
    
    * 软中断&定时器重构
    
    Co-authored-by: houmkh<houjiaying@DragonOS.org>
    
    * 修改timer的clock()
    
    * 删除debug信息
    
    ---------
    
    Co-authored-by: houmkh <1119644616@qq.com>

commit 6d345b774223b0daaf0ee629c7fb595a1912a9e2
Author: HoshuChiu <129569557+HoshuChiu@users.noreply.github.com>
Date:   Sun Apr 2 15:55:24 2023 +0800

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

commit 2b771e32f5795e0fdda458e3bb2651ef6b9673ac
Author: Gou Ngai <sujintao@dragonos.org>
Date:   Sun Apr 2 15:43:53 2023 +0800

    Add dup,dup2 (#224)
    
    * dup,dup2
    
    * fix: sys_dup2语义与posix不一致的问题
    
    ---------
    
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit d7b31a969ff091224a4929496f0278d024f78c77
Author: Gou Ngai <sujintao@dragonos.org>
Date:   Fri Mar 31 18:23:58 2023 +0800

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

commit 20e3152e1eea97f87d644c3023391e172bc83c93
Author: login <longjin@DragonOS.org>
Date:   Fri Mar 31 12:54:37 2023 +0800

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

commit 5fb12ce447710edf8566f250655a06cb27519fca
Author: Gou Ngai <sujintao@dragonos.org>
Date:   Thu Mar 30 18:19:02 2023 +0800

    第一套键盘扫描码的状态机 (#216)
    
    第一套键盘扫描码的状态机
    ---------
    
    Co-authored-by: guanjinquan <1666320330@qq.com>
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit 676b8ef62e1a0a1e52d65b40c53c1636a2954040
Author: Mork <91721145+MorkCarpenter@users.noreply.github.com>
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 <longjin@RinGoTek.cn>

commit 64aea4b3494bee7375e1c1ee5739c9fab0db0cb7
Author: Gou Ngai <sujintao@dragonos.org>
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 <longjin@RinGoTek.cn>

commit 2286eda6526ed1b46afd79b47dc701034b9e903d
Author: WaferJay <17383312+WaferJay@users.noreply.github.com>
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 <longjin@RinGoTek.cn>

commit 45b8371173b070028457f7ee64be33f68b4f9ada
Author: login <longjin@DragonOS.org>
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 <119829947+YJwu2023@users.noreply.github.com>
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 <longjin@dragonos.org>

commit 4454d1a2dd1f1078750151c028a794cfd9a04a1b
Author: login <longjin@DragonOS.org>
Date:   Sat Mar 18 20:26:05 2023 +0800

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

commit 0d48c3c9c21a2dd470d0e1e58b507db60e0887bb
Author: login <longjin@DragonOS.org>
Date:   Thu Mar 16 19:48:59 2023 +0800

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

commit 790d45764090bce3bbfb96b42b2818100a8cef9a
Author: login <longjin@DragonOS.org>
Date:   Wed Mar 15 11:42:41 2023 +0800

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

commit c2e757d8cbeed01b16f48bea48ed8447685e6f1a
Author: login <longjin@DragonOS.org>
Date:   Mon Mar 13 22:22:23 2023 +0800

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

V0.1.5

13 Mar 02:02
33270d0
Compare
Choose a tag to compare

V0.1.5

本文作者:龙进 longjin@DragonOS.org

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 <longjin@DragonOS.org>
Date:   Mon Mar 13 00:26:04 2023 +0800

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

commit 004e86ff19727df303c23b42c7a271b9214c6898
Author: login <longjin@DragonOS.org>
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 <1666320330@qq.com>
    Co-authored-by: DaJiYuQia <88259094+DaJiYuQia@users.noreply.github.com>

commit 17041e0e307eaf9e8d8ddbddfa186cd1f10f1bc0
Author: login <longjin@DragonOS.org>
Date:   Sun Mar 12 21:04:37 2023 +0800

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

commit 26d84a31393c50063ff416bc509316e8d342028c
Author: YJwu2023 <119829947+YJwu2023@users.noreply.github.com>
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 <45937622+kkkkkong@users.noreply.github.com>
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 <100781004+houmkh@users.noreply.github.com>
Date:   Thu Mar 9 23:31:25 2023 +0800

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

commit c1396d277115b371d09ad6d39a1c419f9224ffd0
Author: Gou Ngai <sujintao@dragonos.org>
Date:   Mon Mar 6 11:28:32 2023 +0800

    Rwlock文档 (#186)
    
    * Rwlock文档

commit a7eb62a47a8d701b90a14f83cc9028cfed07c268
Author: houmkh <100781004+houmkh@users.noreply.github.com>
Date:   Mon Mar 6 11:21:29 2023 +0800

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

commit c2481452f81750ec02adec627ab2edbc93d9cd9c
Author: houmkh <100781004+houmkh@users.noreply.github.com>
Date:   Sat Mar 4 18:36:55 2023 +0800

    rust重构mmio_buddy和mmio (#178)
    
    * rust重构mmio_buddy和mmio
    
    * mmio-buddy文档
    
    ---------
    
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit f1284c35717a2f9f8cee7cecfc835ba1d23a1161
Author: Gou Ngai <sujintao@dragonos.org>
Date:   Sat Mar 4 17:47:17 2023 +0800

    新增了rust实现的信号量 (#181)
    
    * 新增了rust实现的信号量
    
    ---------
    
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit 83b9512c1c1e8289000084adcafddebee6a23f16
Author: Gou Ngai <sujintao@dragonos.org>
Date:   Sat Mar 4 16:54:42 2023 +0800

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

commit e532a536a0b244f4590e6eb7910084bd63049704
Author: login <longjin@ringotek.cn>
Date:   Thu Mar 2 22:50:07 2023 +0800

    添加赞助者:FengWangHao (#179)

commit b66beefd4e9ead61ee55f335246ebeb8277d3011
Author: login <longjin@ringotek.cn>
Date:   Mon Feb 27 01:00:35 2023 +0800

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

commit 4177d0327c3eacdc606f0b22f99f208fd48cfff3
Author: kong <45937622+kkkkkong@users.noreply.github.com>
Date:   Mon Feb 20 17:03:37 2023 +0800

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

commit 2bf5ee0e3cac3a91dee6a13b71c86a9477c07d9b
Author: login <longjin@ringotek.cn>
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 <45937622+kkkkkong@users.noreply.github.com>
Date:   Thu Feb 9 15:24:37 2023 +0800

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

commit 009f92d50fe2e52e425bce397801d3fa204daecd
Author: Satin Wuker <74630829+SatinWuker@users.noreply.github.com>
Date:   Tue Feb 7 19:29:09 2023 -0800

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

V0.1.4

04 Feb 05:15
34e05fe
Compare
Choose a tag to compare

V0.1.4

本文作者:龙进 longjin@RinGoTek.cn

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 <100781004+houmkh@users.noreply.github.com>
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 <longjin@ringotek.cn>

commit 151251b50b7ed55596edd32ffec49a4041010e2a
Author: login <longjin@ringotek.cn>
Date:   Tue Jan 31 19:27:02 2023 +0800

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

commit 3c369b1430e8d571bcc74a8ef7fefc1c4cae5dd2
Author: login <longjin@ringotek.cn>
Date:   Mon Jan 30 15:43:42 2023 +0800

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

commit c28bd540ac856cd9d8d5597852af8f2588a660e4
Author: login <longjin@ringotek.cn>
Date:   Mon Jan 30 15:10:24 2023 +0800

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

commit 935f40ec174fec217aed4553d45996327443bc0e
Author: login <longjin@ringotek.cn>
Date:   Tue Jan 17 21:30:16 2023 +0800

    new: Rust版本的Mutex (#157)

commit d8a064128a8a06b90ff4c7b87c193518d9572641
Author: Gou Ngai <94795048+AlbertSanoe@users.noreply.github.com>
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 <45937622+kkkkkong@users.noreply.github.com>
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 <longjin@RinGoTek.cn>

commit ec53d23ed03347854189d92b7e175f309779321b
Author: login <longjin@ringotek.cn>
Date:   Sat Jan 14 10:35:49 2023 +0800

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

commit 41474ba3df99b6822ce452dc94dc53a4da62cba1
Author: login <longjin@ringotek.cn>
Date:   Tue Jan 10 22:07:41 2023 +0800

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

commit 8ad2e358fd3b05eed2919de50640682e51687fb5
Author: login <longjin@ringotek.cn>
Date:   Sun Jan 8 15:51:59 2023 +0800

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

commit a8b621c8d1fe77251b8e4eafe258dc0ee7366dd5
Author: login <longjin@ringotek.cn>
Date:   Sun Jan 8 15:47:44 2023 +0800

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

commit 9358ff0f6f7daa18d6fab4497de025736b3d6725
Author: login <longjin@ringotek.cn>
Date:   Sun Jan 8 15:06:52 2023 +0800

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


V0.1.3

08 Jan 08:00
8ad2e35
Compare
Choose a tag to compare

V0.1.3

本文作者:龙进 longjin@RinGoTek.cn

2023年1月8日

贡献者名单

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

赞助者名单

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

更新内容-内核

  • syscall: new: 增加getpid系统调用 (#120)
  • signal: update: 对于除了SIGKILL以外的信号,也将他们加入SigQueue (#120)
  • rtc: refactor: 使用Rust重构RTC驱动 (#118)
  • doc: new: 新增signal的文档 (#126)
  • Spinlock: new: 新增rust写的RawSpinlock (#127)
  • arch: update: 在lib.rs中,将arch模块的路径进行更改,使得其他模块使用arch的代码时,不需要指定arch::x86_64 (#128)
  • mm: bugfix: 修复页面分配器在初始化时,ZONE_NORMAL_INDEX始终为0的bug (#129)
  • scheduler: new: 使用Rust重构CFS调度器 (#131)
  • smp: 删除已经在smp中废弃的HPET中断转发函数 (#131)
  • process: bugfix: 修复init进程忘记设定fs gs寄存器的问题。 (#132)
  • vfs: update: 将VFS文件夹重命名为vfs (#133)
  • lockref: new: 新增rust版本的lockref (#135)
  • cpu: new: new:Rust封装cpu_relax(),通过pause指令,让cpu休息一会儿,降低空转功耗. (#135)
  • 使用rust重构softirq机制 (#138)

更新内容-用户环境

  • libc: bugfix: 注册信号处理函数时,总是注册sigkill的问题 (#120)
  • libc: new: 增加了raise、kill、abort (#120)
  • libc: new: 新增arch文件夹,在下面新增crt0 crti crtn文件 (#134)
  • libc: new: 新增fflush(), fprintf(), stdin, stdout, stderr, ferror(), fopen(), fclose(), putchar(), puts() (#136)
  • libc: new: 简单添加了fopen()对mode参数的处理。请注意,它没有完全遵循posix,也与Linux的不一致,将来使用Rust的时候完善它。 (#141)
  • 移植: new: 新增了gmp, mpfr, mpc的移植构建脚本 (#136)
  • 移植: new: 新增了gcc、binutils的交叉编译构建脚本以及gcc-11.3.0, binutils-2.38的补丁(在DragonOS-community下的仓库中)(#136)
  • compile: update: 更改编译器的Include路径,使得include时不需要加<libc/src/include/>前缀 (#124)

更新内容-其他

  • bugfix: 修复docker安装时异常退出的bug (#116)
  • new: 新增目标为x86_64-elf的GCC裸机编译器,并使用它来编译DragonOS (#111)
  • update: 更新Docker编译镜像至版本dragonos/dragonos-dev:v1.2, 并支持从Dockerfile构建这个编译镜像 (#111)
  • bugfix: 修复MBR磁盘镜像未设置启动标志的bug (#111)
  • update: 更新github workflow,增加cache,加快build check的速度
  • bugfix: 修复下载grub2.06时的提示错误 (#125)

更新内容-软件移植

源码、发布版镜像下载

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

通过Git获取

通过DragonOS软件镜像站获取

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

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

开放源代码声明

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

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

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

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

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

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

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

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

开源软件使用情况

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

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

当前版本的所有提交记录

commit a8b621c8d1fe77251b8e4eafe258dc0ee7366dd5
Author: login <longjin@ringotek.cn>
Date:   Sun Jan 8 15:47:44 2023 +0800

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

commit 9358ff0f6f7daa18d6fab4497de025736b3d6725
Author: login <longjin@ringotek.cn>
Date:   Sun Jan 8 15:06:52 2023 +0800

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

commit fd91905f022b3ceaa59e666d1ff42d91fb8d40ef
Author: login <longjin@ringotek.cn>
Date:   Sun Jan 8 11:38:59 2023 +0800

    解决编译gcc、binutils的脚本中,变量名称错误的问题 (#142)

commit 62e4613978193aaf5d949a331df0398f2d085a30
Author: Gou Ngai <94795048+AlbertSanoe@users.noreply.github.com>
Date:   Sat Jan 7 23:15:37 2023 +0800

    使用rust重构softirq机制;解决Rtc驱动的编译警告问题 (#138)
    
    * 使用rust重构softirq机制
    * 解决Rtc驱动的编译警告问题
    
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit e9fdc57bf878f1bc5cc5743dfaeeaef743439291
Author: login <longjin@ringotek.cn>
Date:   Sat Jan 7 22:36:49 2023 +0800

    简单添加了fopen对mode参数的处理。请注意,它没有完全遵循posix,也与Linux的不一致,将来使用Rust的时候完善它。 (#141)

commit 2224c93ea968bc74621f7e124b4aca04875b3e6a
Author: guanjinquan <1666320330@qq.com>
Date:   Fri Jan 6 21:29:23 2023 +0800

    完善libc,构建了OS-specific工具链,编译了基于gcc-11.3.0的DragonOS userland compiler,移植了mpfr,gmp,mpc库 (#134)
    
    * 修改include路径
    
    * 添加了创建libsysapi.a和/bin/sysroot/usr/include/+lib/的代码
    
    * 修补.gitignore
    
    * 删除多余项
    
    * 优化脚本可读性
    
    * 新增crt0 crti crtn
    
    * 编译binutils所需的东西
    
    * fflush()和fprintf()的简单实现
    
    * 应用程序启动前,调用初始化libc的函数
    
    * 自动创建sysroot
    
    * 添加了stderr的初始化
    
    * 修改了stderr的初始化
    
    * 内核添加对stdio的简略处理
    
    * 格式化代码
    
    * 修正打开stdio文件描述符的问题
    
    * bugfix: 修复fprintf忘记释放buf的问题
    
    * 修复shell错误地把入口设置为main而不是_start的问题
    
    * 新增__cxa_atexit  (gcc要求libc提供这个)
    
    * 增加putchar puts
    
    * 更新写入磁盘镜像的脚本,默认无参数时,使用legacy方式安装
    
    * 更新编译脚本
    
    * stdio增加eof的定义
    
    * 新增extern cplusplus
    
    * mpfr gmp mpc 构建脚本
    
    * 更新libsysapi.a为libc.a
    
    * 加上ferror fopen fclose
    
    * 更新移植的软件的构建脚本
    
    * 更改build_gcc_toolchain.sh中的-save参数名为-save-cache
    
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit 61de2cdc3f29cdc6c441f128119e01e003e6f3ca
Author: login <longjin@ringotek.cn>
Date:   Tue Jan 3 23:09:25 2023 +0800

    新增rust版本的lockref (#135)
    
    * new:Rust封装cpu_relax(),通过pause指令,让cpu休息一会儿。降低空转功耗
    
    * new: Rust版本的lockref
    
    * Rust的RawSpinlock新增is_locked()和set_value()方法。
    
    * lockref文档

commit 2726f101b4cc787bbd36a69afffb0112f3a6567f
Author: login <longjin@ringotek.cn>
Date:   Tue Jan 3 21:01:56 2023 +0800

    删除无用的cfs.h (#136)

commit 587086d3f299f7394559d547c828191be20cfc11
Author: login <longjin@ringotek.cn>
Date:   Sun Jan 1 16:53:57 2023 +0800

    1、在文件系统目录下增加mod.rs 2、将VFS的路径改为vfs(#133)
    
    2、将VFS的路径改为vfs

commit 843e442971a47693f37a5f8d3452c383f7325359
Author: login <longjin@ringotek.cn>
Date:   Sat Dec 31 18:43:05 2022 +0800

    修复init进程忘记设定fs gs寄存器的问题。 (#132)

commit 74bde36e014ff501241bf40dd83653db47a2c8e4
Author: guanjinquan <1666320330@qq.com>
Date:   Sat Dec 31 17:35:39 2022 +0800

    Patch porting gcc v2 (#124)
    
    * 更改编译器的Include路径,使得include时不需要加`<libc/src/include/>`前缀
    
    * 修改include路径
    
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit d4f3de93a23e4bd4f000a3663768d47d094bf188
Author: login <longjin@ringotek.cn>
Date:   Sat Dec 31 17:26:12 2022 +0800

    使用Rust重构CFS调度器 (#131)
    
    * 新建调度器的文件
    
    * 把softirq vector移动到c文件中(原来在.h)
    
    * 将进程切换方式改为“中断返回时切换”
    
    * new:使用rust重构CFS
    
    * 删除已经在smp中废弃的HPET中断转发函数
    
    * 代码格式化
    
    * 删除多余的dunce依赖

commit 156949680c83f2d7e3b21ed68b11698b88eaf396
Author: login <longjin@ringotek.cn>
Date:   Sat Dec 31 13:47:49 2022 +0800

    bugfix:修复当使用sched()运行调度器,在切换进程的时候,由于不在中断上下文内,导致当前进程的上下文丢失的问题。 (#130)
    
    bugfix:修复当使用sched()运行调度器,在切换进程的时候,由于不在中断上下文内,导致当前进程的上下文丢失的问题。
    bugfix:修复切换进程的宏的汇编代码的损坏部分,未声明rax寄存器,从而导致的编译器未定义行为问题。

commit 882f0b7e7498dbff8de527b2b9159b7f6e6359c9
Author: YJwu2023 <119829947+YJwu2023@users.noreply.github.com>
Date:   Wed Dec 28 19:35:17 2022 +0800

    修复内存bug与grub安装脚本的错误 (#129)
    
    * 修复内存bug与grub安装脚本的错误
    
    * 修改小bug

commit adc1846b06fb862caed049f435fc0061488a6ff9
Author: login <longjin@ringotek.cn>
Date:   Mon Dec 26 13:13:12 2022 +0800

    内核:在lib.rs中,将arch模块的路径进行更改,使得其他模块使用arch的代码时,不需要指定arch::x86_64 (#128)

commit ac643d420b22f9d454ecefccd51ed34a9664586b
Author: login <longjin@ringotek.cn>
Date:   Sun Dec 25 23:53:35 2022 +0800

    new:新增rust写的RawSpinlock (#127)

commit 998390210549b47e6bdcc3fdab49eff4086ad18b
Author: login <longjin@ringotek.cn>
Date:   Sat Dec 24 23:30:26 2022 +0800
...
Read more

V0.1.2

17 Dec 12:02
42ec8d1
Compare
Choose a tag to compare

V0.1.2

:::{note}
本文作者:龙进 longjin@RinGoTek.cn

2022年12月17日
:::

贡献者名单

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

赞助者名单

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

其中,非常感谢Seele.Clover给予DragonOS项目人民币500元的赞助与支持!我们对于每一笔赞助款项,将仔细登记,并确保其能被妥善的使用。

更新内容-内核

  • 删除rust_helloworld文件 (#113)
  • Signal: 允许用户注册信号处理函数,能够进入自定义的handler。(#112)
    • 支持kill命令
    • 允许用户自定义信号处理函数
    • 新增2个系统调用:SYS_SIGACTION , SYS_RT_SIGRETURN
    • libc增加signal(),sigaction()函数。
    • 暂时只支持旧版的sighandler,即:只有1个参数的void handler(int signum)类型的信号处理函数。对于另一种信号处理函数void handler(int signum, siginfo_t *info, void* data),尚不支持传递第三个参数。
  • 在内核代码中加入自定义的stdint.h文件 (#109)
  • 调整编译grub的脚本的部分 (#108)
  • 新增32、64位uefi启动 (#105)(#101)
  • 使用编译安装的grub-2.06,解决客户机上grub版本不对导致的编译无法运行的问题。
  • 增加了timekeeping模块 (#106)
  • bugfix: 修复rtc时钟对BCD码进行转换的时候,忘了处理day字段的问题 (#104)
  • new: 开发过程文档(完成了一半)
  • bootstrap.sh解决下载rust慢的问题
  • 更新“构建系统”文档
  • procfs->status增加显示preempt和虚拟运行时间 (#100)
  • ffz函数:获取u64中的第一个值为0的bit (#100)
  • 解决由于编译器优化导致local_irq_restore无法获取到正确的rflags的值的问题
  • 使用Rust重构串口驱动 (#99)

更新内容-用户环境

  • about app: 显示当前构建的git commit sha1以及构建时间(#114)
  • shell: 修复shell的exec命令对绝对路径的拼接错误问题(#114)
  • shell: exec命令增加"&"后台运行选项 (#100)
  • new: 测试signal用的app
  • 将libc目录进行调整,加入cargo作为rust的包管理器

源码、发布版镜像下载

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

通过Git获取

通过DragonOS软件镜像站获取

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

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

开放源代码声明

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

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

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

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

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

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

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

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

开源软件使用情况

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

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

当前版本的所有提交记录

commit 7a818da88a1c7a1760de7671141b0ce1ca4e3dde
Author: login <longjin@ringotek.cn>
Date:   Sat Dec 17 17:49:12 2022 +0800

    Patch about auto gen version string (#114)
    
    * new: about app中,显示当前构建的git commit sha1以及构建时间
    
    * bugfix: 修复shell的exec命令对绝对路径的拼接错误问题

commit 83a7aaa46bbc411c43d4fc099c6c8884efbe4771
Author: login <longjin@ringotek.cn>
Date:   Sat Dec 17 16:31:50 2022 +0800

    删除rust_helloworld文件 (#113)

commit 6efd4740336205c9bfdd8b164e667cee2f38781e
Author: login <longjin@ringotek.cn>
Date:   Sat Dec 17 16:27:50 2022 +0800

    允许用户自定义信号处理函数 (#112)
    
    * new: 用户注册信号处理函数,能够进入自定义的handler
    
    * 修复忘了传信号的数字给用户的处理函数的bug
    
    * new:sigreturn
    
    * 删除注释

commit 0e0c187484281768391e131495f0655e40d70cf7
Author: login <longjin@ringotek.cn>
Date:   Fri Dec 16 16:20:09 2022 +0800

    在内核代码中加入自定义的stdint.h文件 (#109)

commit d02e6ea4112ad520aa4090ff73cdf592e14c0a82
Author: login <longjin@ringotek.cn>
Date:   Wed Dec 14 20:01:55 2022 +0800

    调整编译grub的脚本的部分 (#108)
    
    1、bugfix: 修复编译grub的脚本的部分错误
    2、将grub下载源替换为tuna
    3、优化写入磁盘镜像的脚本
    4、将bios文件夹改名为legacy

commit 38b341b8aa671f75ac26d05059aa2e9a09e653b7
Author: YJwu2023 <119829947+YJwu2023@users.noreply.github.com>
Date:   Wed Dec 14 16:58:49 2022 +0800

    新增32位uefi启动 (#105)
    
    * 新增32位uefi启动
    
    * 修复小bug
    
    * 增加grub本地编译安装
    
    * 增加本地grub编译安装脚本
    
    * 修正小错误
    
    * 修复空文件夹不上传的bug

commit 01876902fbf6ed43992cc7d153bd8c505cb5224b
Author: Gou Ngai <94795048+AlbertSanoe@users.noreply.github.com>
Date:   Wed Dec 14 15:13:54 2022 +0800

    增加了timekeeping模块 (#106)
    
    * 增加了timekeeping模块
    
    * 格式化文档和细节更改
    
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit 728aca308917a7d4d0ba10fe8174e9408d77a9a6
Author: login <longjin@ringotek.cn>
Date:   Sun Dec 11 22:59:47 2022 +0800

    bugfix: 修复rtc时钟对BCD码进行转换的时候,忘了处理day字段的问题 (#104)

commit 237e95c6ddce72d72ae7fedfeca412fab82b3622
Author: wwc-15172310230 <78997674+wwc-15172310230@users.noreply.github.com>
Date:   Sun Dec 11 22:22:10 2022 +0800

    调整user下libs的libc目录结构 (#103)
    
    * 调整user下libs的libc目录结构
    
    * 修正.gitignore文件的问题
    
    * 修复无法编译的问题
    
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit 2291ffdece1dc5a703602f79f74df8a4854d215b
Author: login <longjin@ringotek.cn>
Date:   Sun Dec 11 20:09:58 2022 +0800

    文档更新 (#102)
    
    * new: 开发过程文档(完成了一半)
    
    * bootstrap.sh解决下载rust慢的问题
    
    * 更新“构建系统”文档

commit 7f439c5ddbd2ecffc112149d16983975f523052c
Author: YJwu2023 <119829947+YJwu2023@users.noreply.github.com>
Date:   Fri Dec 9 16:08:54 2022 +0800

    增加uefi启动 (#101)
    
    * 增加uefi启动
    
    * 修改脚本
    
    * uefi修改
    
    * 删除错误的注释
    
    * 修正写入磁盘镜像的脚本
    
    * 修改X86_64为x86_64
    
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit 1a2eaa402f05f82aaeebe1e03824534a0a425d4d
Author: login <longjin@ringotek.cn>
Date:   Thu Dec 8 22:59:51 2022 +0800

    signal的处理(kill命令)以及一些其他的改进 (#100)
    
    * 将entry.S中冗余的ret_from_syscall代码删除,改为jmp Restore_all
    
    * new: 增加判断pt_regs是否来自用户态的函数
    
    * new: rust的cli和sti封装
    
    * 将原有的判断pt_regs是否来自用户态的代码,统一改为调用user_mode函数
    
    * ffz函数:获取u64中的第一个值为0的bit
    
    * spinlock增加 spinlock irq spin_unlock_irq
    
    * 临时解决显示刷新线程迟迟不运行的问题
    
    * 更改ffi_convert的生命周期标签
    
    * new: 测试signal用的app
    
    * 解决由于编译器优化导致local_irq_restore无法获取到正确的rflags的值的问题
    
    * new: exec命令增加"&"后台运行选项
    
    * procfs->status增加显示preempt和虚拟运行时间
    
    * 更改引用计数的FFIBind2Rust trait中的生命周期标签
    
    * new: signal处理(kill)
    
    * 更正在review中发现的一些细节问题

commit f8b55f6d3fcbf152a1cb6d6fc722bf1607418b28
Author: TingHuang <92705854+TingSHub@users.noreply.github.com>
Date:   Tue Dec 6 22:15:03 2022 +0800

    Patch uart (#99)
    
    * 添加UART驱动相关文件
    
    * 添加驱动核心文件,将rust编写的驱动代码加入Package中
    
    * 添加glib.h文件生成rust代码,添加uart驱动代码
    
    * 添加串口发送及接收相关代码
    
    * 添加字符串发送函数,未实现具体功能
    
    * 为调用uart驱动的代码添加rust接口
    
    * 添加字符串发送函数,修改C语言调用接口
    
    * 添加rust串口驱动
    
    * 添加uart.h头文件,将串口端口类型改为enum
    
    * 添加注释,规范代码

commit 036acc52ce9d0fb9e7d92768ff74939a29c07f32
Author: login <longjin@ringotek.cn>
Date:   Tue Nov 29 21:46:13 2022 +0800

    将entry.S中冗余的ret_from_syscall代码删除,改为jmp Restore_all (#98)
    
    * 将entry.S中冗余的ret_from_syscall代码删除,改为jmp Restore_all

V0.1.1

27 Nov 07:59
d85ebf1
Compare
Choose a tag to compare

V0.1.1

:::{note}
本文作者:龙进 longjin@RinGoTek.cn

2022年11月27日
:::

贡献者名单

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

赞助者名单

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

  • David Wen
  • TerryLeeSCUT
  • slientbard

其中,非常感谢David Wen给予DragonOS项目人民币1000元的赞助与支持!我们对于每一笔赞助款项,将仔细登记,并确保其能被妥善的使用。

更新内容-内核

  • 新增rust ffi (#77)
  • port kmalloc and printk to rust
  • rust下的kdebug kinfo kwarn kBUG kerror宏
  • bugfix: 修复进程pcb被回收时,未将其从链表中删除的问题
  • 目录结构优化:移动asm.h和cmpxchg.h
  • signal的发送
  • procfs:查看进程的status
  • 解决第一次编译时磁盘镜像权限错误的问题
  • 将fork相关代码移动到fork.c

更新内容-用户环境

  • shell:增加kill命令,可向目标进程发送信号。但由于仍未完善signal机制,因此目标进程暂时不能响应这个信号。

源码、发布版镜像下载

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

通过Git获取

通过DragonOS软件镜像站获取

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

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

开放源代码声明

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

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

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

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

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

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

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

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

开源软件使用情况

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

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

当前版本的所有提交记录

commit d65ade9c5909076747bd00966a398fe27fbd290d
Author: DaJiYuQia <88259094+DaJiYuQia@users.noreply.github.com>
Date:   Sun Nov 27 14:21:31 2022 +0800

    Patch procf (#95)
    
    * debug color problem
    
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit 6cb769c423b09e88fea1763210200a716477be0a
Author: login <longjin@ringotek.cn>
Date:   Sun Nov 27 14:17:36 2022 +0800

    将include目录下的rust代码转移到他们应当属于的模块中 (#96)
    
    * 将include目录下的rust代码转移到他们应当属于的模块下。

commit 27a97abd2474b03ad09b562e5ed11e1fdae8eb32
Author: DaJiYuQia <88259094+DaJiYuQia@users.noreply.github.com>
Date:   Sat Nov 26 17:34:00 2022 +0800

    Patch procf (#90)
    
    * 1234
    
    * 123
    
    * 合并master
    
    * procfs
    
    * 1
    
    * procfs展示进程基本信息
    
    * modified code
    
    * 恢复权限
    
    * 恢复权限
    
     #恢复权限
    
    * modify permission
    
    * 删除run.sh
    
    * 解决第一次编译时磁盘镜像权限错误的问题
    
    * 恢复.vscode/c_cpp_properties.json
    
    * 删除process.c中错误的do_fork
    
    * remake procfs
    
    * 修改一些变量名
    
    * 修改类型
    
    * modified
    
    * data_puts缓冲区溢出后return
    
    Co-authored-by: longjin <longjin@RinGoTek.cn>

commit ad23fcddf893d7f92d2bf3efdb66e969416d2852
Author: login <longjin@ringotek.cn>
Date:   Wed Nov 23 21:34:35 2022 +0800

    bugfix: 修复进程退出时未释放signal和sighand && 增加赞赏者名单:David Wen (#93)
    
    * bugfix: 修复进程退出时未释放signal和sighand的bug
    
    * 增加赞赏者名单:David Wen

commit 0274cd6eeec01885232e7418a501857cb76da69e
Author: login <longjin@ringotek.cn>
Date:   Wed Nov 23 20:43:18 2022 +0800

    修正drop signal结构体的box对象的的问题 (#92)
    
    * fix: exit signal and exit sighand

commit c8025a88798dc57ecc5d7f20ad69de695445638f
Author: login <longjin@ringotek.cn>
Date:   Wed Nov 23 20:18:22 2022 +0800

    new:在fork时拷贝signal和sighand (#91)
    
    * refcount初始化
    
    * new: 实现copy_sighand
    del: 删除sighand_struct的wqh, 待将来有需要时,替换成rust版本的
    
    * new: 拷贝signal
    bugfix: 解决拷贝sighand时的uaf问题

commit 66f67c6a95b8aad85cfd2146a86e5e3e6a3568e7
Author: login <longjin@ringotek.cn>
Date:   Wed Nov 23 11:38:20 2022 +0800

    signal的发送(暂时父子进程之间共享信号及相应的结构体) (#89)
    
    * 解决由于spinlock.h中包含preempt_enable()带来的循环include问题
    
    * new: 初步实现signal的数据结构
    
    * new:signal相关数据结构
    
    * fix: 解决bindings.rs报一堆警告的问题
    
    * new: rust下的kdebug kinfo kwarn kBUG kerror宏
    
    * 移动asm.h和cmpxchg.h
    
    * new: signal的发送(暂时只支持父子进程共享信号及处理函数)

commit 3d729e2069e01ee07525ff83167566dac5322a40
Author: login <longjin@ringotek.cn>
Date:   Fri Nov 18 17:59:33 2022 +0800

    bugfix: 修复进程pcb被回收时,未将其从链表中删除的问题 (#87)
    
    * bugfix: 修复进程pcb被回收时,未将其从链表中删除的问题
    new: pcb相关api文档
    
    * 将文档加入目录

commit 0bfe94f46be9bdde1ade81a20e803aa2aafd2964
Author: login <longjin@ringotek.cn>
Date:   Fri Nov 18 16:32:15 2022 +0800

    new: rust下的kdebug kinfo kwarn kBUG kerror宏 (#86)
    
    * new: rust下的kdebug kinfo kwarn kBUG kerror宏

commit c6174797dcf3427f38bfa0f4bd3e039c319f7c5b
Author: login <longjin@ringotek.cn>
Date:   Thu Nov 17 20:29:29 2022 +0800

    fix: 解决bindings.rs报了很多警告的问题 (#85)
    
    * fix: 解决bindings.rs报一堆警告的问题

commit cffd7144fbed84f9775e89d7b99602c6ccc5a510
Author: login <longjin@ringotek.cn>
Date:   Wed Nov 16 15:18:03 2022 +0800

    signal相关数据结构&代码结构优化 (#84)
    
    * 解决由于spinlock.h中包含preempt_enable()带来的循环include问题
    
    * new: 初步实现signal的数据结构

commit fb6c29d01d4cf92368efec08c01e419c2a941f7d
Author: login <longjin@ringotek.cn>
Date:   Sun Nov 13 16:43:58 2022 +0800

    port kmalloc and printk to rust (#83)
    
    * 暂时移除cbindgen
    
    * 将lib文件夹更名为libs文件夹(解决rust的冲突)
    
    * 实现了全局的allocator
    
    * 实现了printk宏
    
    * new: 完善了printk的颜色

commit 82d2e446a401e7eee57a847f48a6d162931170c3
Author: login <longjin@ringotek.cn>
Date:   Sat Nov 12 15:25:54 2022 +0800

    new: 暂时移除cbindgen (#82)

commit 2aaf7808efe44ecfaadd51ae4f8892e667108578
Author: login <longjin@ringotek.cn>
Date:   Fri Nov 11 22:21:44 2022 +0800

    在内核中引入cbindgen,生成rust-C的FFI (#81)
    
    
    * 解决codeql失败问题
    
    * new: 为内核引入cbindgen

commit 2813126e3190c9b3c1a836a647b259a7adbe0cf3
Author: login <longjin@ringotek.cn>
Date:   Fri Nov 11 15:35:37 2022 +0800

    新增rust ffi (#77)
    
    * 引入cargo
    
    * 取消对Cargo.lock的跟踪
    
    * 解决vscode报错问题
    
    * new: rust的代码能够调用c语言的printk_color
    
    * 1、将原本run.sh的工作拆解,变为几个不同的make命令
    2、在docker镜像中编译rust
    
    * 更改workflow
    
    * update workflow
    
    * new: 解决workflow无法通过编译的问题

commit 5e023cf7911333eb05bfe65704dce4b01fa4d0a7
Author: login <longjin@ringotek.cn>
Date:   Fri Nov 11 15:21:45 2022 +0800

    Update makefile.yml

commit e44795008f7e34d2068cf28dcedbcb91f5ccd66b
Author: login <longjin@ringotek.cn>
Date:   Fri Nov 11 15:18:13 2022 +0800

    Update makefile.yml (#80)

commit ec5fb84b61c313824cc2199ab64e3af4b7e5f895
Author: login <longjin@ringotek.cn>
Date:   Fri Nov 11 15:08:09 2022 +0800

    Update makefile.yml

commit 6d9dff5f1ff347ea780a0249e54eef356cdcaaea
Author: login <longjin@ringotek.cn>
Date:   Fri Nov 11 15:07:48 2022 +0800

    Revert "Update makefile.yml (#78)" (#79)
    
    This reverts commit badc7d238f2341e844a90be3e357e5dd77a447fc.

commit badc7d238f2341e844a90be3e357e5dd77a447fc
Author: login <longjin@ringotek.cn>
Date:   Fri Nov 11 15:05:52 2022 +0800

    Update makefile.yml (#78)

V0.1.0

05 Nov 16:07
325c103
Compare
Choose a tag to compare

V0.1.0

本文作者:龙进 longjin@RinGoTek.cn

2022年11月4日

发布时间:2022年11月6日

前言

  DragonOS从2022年1月15日开始开发,到如今已经经历了将近300天。在这么多个日夜里,已经数不清到底花了多少时间在DragonOS的开发之中,
我基本上把所有的空闲时间都给了DragonOS,保守估计总工时已经在1000小时以上。能够发布第一个版本,我感到十分有成就感。

  在2022年7月以来,陆陆续续的,有来自6所高校或企业的小伙伴/大佬加入了DragonOS的开发。我当时非常的欣喜,我想,也许在大家的一同努力下,我们能创造出一个真正具有实用性的操作系统呢!我们累计召开了14次交流讨论会。我相信,在大家的共同努力下,将来,我们一定能创造出真正独立自主的、开放的、面向服务器领域应用的开源操作系统,并在生产环境中得到应用。

  尽管DragonOS目前只是一个玩具水平的操作系统,只是“比本科生毕业设计难度略高的”操作系统。但是,请不要小看它,它的内在的架构设计,瞄准了Linux5.18及以后的发行版,
虽尚未能达到Linux的水平,但我们正努力追赶。得益于Linux的相关资料,DragonOS在架构设计之时,学习了Linux的很多设计思想,相关组件都尽量考虑了可扩展性与可移植性。

  千里之行,始于足下。DragonOS V0.1.0版本的发布,是一个全新的开始。希望在未来的十年里,我们能与众多伙伴们一同努力,在2032年,将DragonOS建设成为具有实用意义的,能够在服务器领域取得
广泛应用的开源操作系统!

特别鸣谢

  在DragonOS V0.1.0版本的发布之际,我想对我的老师、前辈以及学校表示衷心的感谢!

  • 佛山市南海区大沥镇中心小学 姚志城老师: 您是带领我接触计算机,学会编程的领路人。十年前,与您交谈时,您说过:“我们国家目前还没有自主的、成熟的操作系统”。这句话,为我的梦想埋下了种子。您培养了我对计算机的热爱,因此我选择了软件工程这个专业。感谢当年您的教导,师恩难忘!

  • 佛山市南海区石门实验学校: 在石实就读的三年里,非常感谢石实的“扬长教育”理念,在老师们的培养下,让我充分发挥了自己的个性和特长,也取得了不错的成绩。在石实的三年里,我学会了C++、Java以及简单的算法,也自己开发了几个安卓app,积累了将近6千行的代码量。

  • 佛山市南海区石门中学:“任重道远,毋忘奋斗”是石中的校训,我想,这句校训,也应当成为我们每个新时代青年人的座右铭。在石门中学的三年,家国情怀教育对我产生了很大的影响。我想,我们作为新时代的青年,更应当肩负起时代的重任,奋勇拼搏,为祖国的发展,为民族的自强,为人类的未来,努力奋斗!

  • 华南理工大学:“博学慎思,明辨笃行”,在华工,我得到了进一步的学习与发展。开拓了自己的视野,学会了跟很多人打交道。并且,在软件学院,我遇到了一群认真负责的老师。非常感谢学院对我的支持,支持我们成立项目组。我相信,在学院的支持下,能让DragonOS取得更好的发展,走的更远!

  • 华南理工大学软件学院 王国华老师:王老师是我《操作系统》课程的老师,在她的指导下,我对操作系统的原理有了更深的理解,并参加了“泛珠三角+大学生计算机作品赛“,在2022年6月的广东省选拔赛中,DragonOS取得了一等奖、最佳创新奖的好成绩。

  • 华南理工大学软件学院 汤峰老师: 汤老师是我们在校内的项目组的指导老师。在她的悉心指导下,我们将不断前行,保持我们前进的方向,持续构建开源社区。我由衷地感谢汤老师的指导!

  • Yaotian Feng: 在Bilibili上认识了这位非常厉害的老哥,解答了我的很多问题,很多次在我毫无头绪的debug了几天之后,几句话点醒了我,让我找到解决问题的路径。并且,他也跟我分享了容易踩坑的地方,让我在将要踩坑的时候能够有个心理预期,不至于那么难受哈哈哈哈。

贡献者名单

DragonOS V0.1.0版本的发布,离不开以下小伙伴们的共同努力:

赞助者名单

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

  • TerryLeeSCUT
  • slientbard

内核

遵循的一些标准规范

  • 启动引导:Multiboot2
  • 系统接口:posix 2008

硬件架构

  • 目前支持在x86-64架构的处理器上运行

Bootloader

  • 使用Grub 2.06作为bootloader

内存管理

  • 实现了基于bitmap的页分配器
  • 实现了slab分配器,用来分配小块的、具有对齐要求的内存
  • 抽象出VMA(虚拟内存区域)
  • 实现VMA反向映射机制
  • 实现MMIO地址空间自动映射机制

多核

  • 支持多核引导。也就是说,在DragonOS启动后,将会启动AP处理器。但是,为了简化其他内核模块的实现,目前AP处理器上,暂时没有任务在运行。
  • 粗略实现了IPI(处理器核间通信)框架

进程管理

  • 支持进程的创建、回收
  • 内核线程
  • kthread机制
  • 用户态、内核态进程/线程的fork/vfork(注意,用户态的fork和内核态的有一定的区别,内核态的fork更复杂)
  • exec 让进程去执行一个新的可执行文件
  • 进程的定时睡眠(sleep)(支持spin/rdtsc高精度睡眠、支持上下文切换方式的睡眠)

同步原语

  • spinlock 自旋锁
  • mutex 互斥量
  • atomic 原子变量
  • wait_queue 等待队列
  • semaphore 信号量

调度相关

  • CFS调度器
  • 单核调度(暂时不支持多核负载均衡)
  • completion “完成”机制,让一个进程能等待某个任务的完成。

IPC进程间通信

  • 匿名管道

文件系统

  • VFS虚拟文件系统的基本功能
  • FAT32文件系统(尚不支持删除文件夹)
  • devfs设备文件系统。目前只将键盘文件注册到其中。
  • rootfs根文件系统,在真实的磁盘文件系统被挂载前,为其他的伪文件系统提供支持。
  • 挂载点抽象。目前实现了文件系统的挂载,使用类似于栈的方式管理所有的挂载点。(将来需要优化这部分)

异常及中断处理

  • 处理器异常的捕获
  • 对APIC的支持
  • softirq软中断机制
  • 能够对内核栈进行traceback

内核数据结构

  • 普通的二叉树
  • kfifo先进先出缓冲区
  • 循环链表
  • IDR 映射数据结构
  • IDA ID分配数据组件

屏幕显示

  • VESA VBE显示芯片驱动
  • 实现了屏幕管理器,支持多个显示框架注册到屏幕管理器中。
  • 实现了TextUI文本界面框架,能够渲染文本到屏幕上。并且预留了上下滚动翻页、多显示窗口的支持。
  • printk

内核实用库

  • 字符串操作库
  • ELF可执行文件支持组件
  • 基础数学库
  • CRC函数库

软件移植

  • 移植了LZ4压缩库(V1.9.3),为将来实现页面压缩机制打下基础。

内核测试

  • ktest单元测试框架
  • 支持使用串口(COM1)输出屏幕内容到文件之中。

驱动程序支持

  • IDE硬盘
  • AHCI硬盘(SATA Native)
  • ACPI 高级电源配置模块
  • PCI总线驱动
  • XHCI主机控制器驱动(usb3.0)
  • ps/2键盘
  • ps/2鼠标
  • HPET高精度定时器
  • RTC时钟
  • local APIC定时器
  • UART串口(支持RS-232)
  • VBE显示
  • 虚拟tty设备

系统调用

DragonOS目前一共有22个有效的系统调用。

  • SYS_PUT_STRING 往屏幕上打印字符
  • SYS_OPEN 打开文件
  • SYS_CLOSE 关闭文件
  • SYS_READ 读取文件
  • SYS_WRITE 写入文件
  • SYS_LSEEK 调整文件指针
  • SYS_FORK fork系统调用
  • SYS_VFORK vfork系统调用
  • SYS_BRK 调整堆大小为指定值
  • SYS_SBRK 调整堆大小为相对值
  • SYS_REBOOT 重启 (将来sysfs完善后,将删除这个系统调用,请勿过度依赖这个系统调用)
  • SYS_CHDIR 切换进程的工作目录
  • SYS_GET_DENTS 获取目录中的目录项的元数据
  • SYS_EXECVE 让当前进程执行新的程序文件
  • SYS_WAIT4 等待进程退出
  • SYS_EXIT 退出当前进程
  • SYS_MKDIR 创建文件夹
  • SYS_NANOSLEEP 纳秒级睡眠(最长1秒)在小于500ns时,能够进行高精度睡眠
  • SYS_CLOCK 获取当前cpu时间
  • SYS_PIPE 创建管道
  • SYS_MSTAT 获取系统当前的内存状态信息
  • SYS_UNLINK_AT 删除文件夹或删除文件链接

用户环境

LibC

  LibC是应用程序与操作系统交互的纽带。DragonOS的LibC实现了一些简单的功能。

  • malloc堆内存分配器
  • 基础数学库
  • 简单的几个与文件相关的函数
  • pipe
  • fork/vfork
  • clock
  • sleep
  • printf

Shell命令行程序

  • 基于简单的字符串匹配的解析(不是通过编译课程学的的那一套东西做的,因此比较简单,粗暴)
  • 支持的命令:ls,cd,mkdir,exec,about,rmdir,rm,cat,touch,reboot

用户态驱动程序

  • 用户态键盘驱动程序

源码、发布版镜像下载

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

通过Git获取

通过DragonOS软件镜像站获取

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

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

开放源代码声明

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

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

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

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

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

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

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

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

开源软件使用情况

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

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