diff --git a/README.md b/README.md index fd07ea68..2d7c7dc7 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,8 @@ - 开源论坛 **[bbs.DragonOS.org](https://bbs.dragonos.org)** +- 软件镜像站 **[mirrors.DragonOS.org](https://mirrors.DragonOS.org)** + - 开发交流QQ群 **115763565** - 代码搜索引擎 [code.DragonOS.org](http://code.dragonos.org) @@ -64,24 +66,33 @@ 我的博客:[longjin666.cn](https://longjin666.cn) -## 赞赏 +## 赞助 -  DragonOS是一个公益性质的开源项目,但是其日常维护仍需要一些资金,如果你愿意的话,可以通过[赞助 - DragonOS](https://dragonos.org/donate/),从而促进这个项目的发展。所有的赞助者的名单都会被公示。 +  DragonOS是一个公益性质的开源项目,但是它的发展离不开资金的支持,如果您愿意的话,可以通过**[赞助 - DragonOS](https://dragonos.org/donate/)**,从而促进这个项目的发展。所有的赞助者的名单都会被公示。您的每一分赞助,都会为DragonOS的发展作出贡献! ### 赞助的资金都会被用到哪里? -- 官网及社区论坛的服务器开支 +我们保证,所有赞助的资金及物品,将会用于: -- 代码搜索引擎服务器的开支(这不是一个小数目) +- 为活跃的社区开发者发放补贴或设备支持 -- 域名、CDN等服务的开支 +- DragonOS的云服务开支 + +- 设备购置 - 任何有助于DragonOS发展建设的用途 -### 赞赏者列表 +### 赞助商列表 + +**暂无** + +我们期望在未来,能有企业赞助DragonOS,为它的发展注入资金动力! + +### 个人赞赏者列表 - 悟 - [TerryLeeSCUT · GitHub](https://github.com/TerryLeeSCUT) +- slientbard ## 开放源代码声明 diff --git a/README_EN.md b/README_EN.md index 4934ae42..660c510c 100644 --- a/README_EN.md +++ b/README_EN.md @@ -13,8 +13,9 @@ - Home Page **[DragonOS.org](https://dragonos.org)** - Documentation **[docs.DragonOS.org](https://docs.dragonos.org)** - BBS **[bbs.DragonOS.org](https://bbs.dragonos.org)** +- Software mirror website **[mirrors.DragonOS.org](https://mirrors.DragonOS.org)** - QQ group **115763565** -- code search engine [code.DragonOS.org](http://code.dragonos.org)  +- Code search engine [code.DragonOS.org](http://code.dragonos.org)  ## How to run? @@ -60,22 +61,28 @@ Blog:[longjin666.cn](https://longjin666.cn) ## Reward -  Dragonos is a public welfare open source project, but its daily maintenance still needs some funds. If you want, you can visit [Sponsor - DragonOS](https://dragonos.org/donate/), so as to promote the development of this project. The list of all sponsors will be published. +  DragonOS is an open source public welfare project, but its development cannot be separated from the support of funds. If you want, you can visit **[Sponsor - DragonOS](https://dragonos.org/donate/)**, so as to promote the development of this project. The list of all sponsors will be published. Every bit of your sponsorship will contribute to the development of DragonOS! ### Where will the sponsorship funds be used? -- Server expenses of official website and community forum +We guarantee that all sponsorship funds and items will be used for: -- Code search engine server expenses (this is not a small amount) +- Subsidies or equipment support for active community developers +- Cloud service expenditure of DragonOS +- Equipment purchase +- Any use conducive to the development and construction of DragonOS -- Expenses for domain name, CDN and other services +### Sponsor List -- Any use that is conducive to the development and construction of DragonOS +**None** -## Sponsors +We hope that in the future, some enterprises can sponsor DragonOS and inject financial power into its development! + +### Individual Sponsor List - 悟 - [TerryLeeSCUT · GitHub](https://github.com/TerryLeeSCUT) +- slientbard ## Open source statement diff --git a/docs/community/ChangeLog/V0.1.x/V0.1.0.md b/docs/community/ChangeLog/V0.1.x/V0.1.0.md new file mode 100644 index 00000000..4136c0b7 --- /dev/null +++ b/docs/community/ChangeLog/V0.1.x/V0.1.0.md @@ -0,0 +1,290 @@ +# V0.1.0 + +:::{note} +本文作者:龙进 + +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](https://github.com/Codetector1374)**: 在Bilibili上认识了这位非常厉害的老哥,解答了我的很多问题,很多次在我毫无头绪的debug了几天之后,几句话点醒了我,让我找到解决问题的路径。并且,他也跟我分享了容易踩坑的地方,让我在将要踩坑的时候能够有个心理预期,不至于那么难受哈哈哈哈。 + +## 贡献者名单 + +DragonOS V0.1.0版本的发布,离不开以下小伙伴们的共同努力: + +- 龙进 +- zzy666-hw +- 关锦权 +- 周于喆 +- kkkkkong +- houmkh +- wang904 <1234366@qq.com> +- Liric Mechan +- Mustang +- Eugene +- kun <1582068144@qq.com> +- zhujikuan <1335289286@qq.com> +- Alloc Alice <1548742234@qq.com> + +## 赞助者名单 + +感谢以下同学的赞赏,我们将不断努力! + +- 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获取 + +- 您可以访问[https://github.com/fslongjin/DragonOS/releases](https://github.com/fslongjin/DragonOS/releases)下载发布版的代码,以及编译好的,可运行的磁盘镜像。 +- 我们在gitee上也有镜像仓库可供下载:[https://gitee.com/DragonOS/DragonOS](https://gitee.com/DragonOS/DragonOS) + +### 通过DragonOS软件镜像站获取 + +  为解决国内访问GitHub慢、不稳定的问题,同时为了方便开发者们下载DragonOS的每个版本的代码,我们特意搭建了镜像站,您可以通过以下地址访问镜像站: + +  您可以通过镜像站获取到DragonOS的代码压缩包,以及编译好的可运行的磁盘镜像。 + +- [https://mirrors.DragonOS.org](https://mirrors.DragonOS.org) +- [https://mirrors.DragonOS.org.cn](https://mirrors.DragonOS.org.cn) + + +## 开放源代码声明 + + +:::{note} +为促进DragonOS项目的健康发展,DragonOS以GPLv2开源协议进行发布。所有能获得到DragonOS源代码以及相应的软件制品(包括但不限于二进制副本、文档)的人,都能享有我们通过GPLv2协议授予您的权利,同时您也需要遵守协议中规定的义务。 + +这是一个相当严格的,保护开源软件健康发展,不被侵占的协议。 + +对于大部分的善意的人们而言,您不会违反我们的开源协议。 + +我们鼓励DragonOS的自由传播、推广,但是请确保所有行为没有侵犯他人的合法权益,也没有违反GPLv2协议。 + +请特别注意,对于违反开源协议的,尤其是**商业闭源使用以及任何剽窃、学术不端行为将会受到严肃的追责**。(这是最容易违反我们的开源协议的场景)。 + +并且,请注意,按照GPLv2协议的要求,基于DragonOS修改或二次开发的软件,必须同样采用GPLv2协议开源,并标明其基于DragonOS进行了修改。亦需保证这些修改版本的用户能方便的获取到DragonOS的原始版本。 + +您必须使得DragonOS的开发者们,能够以同样的方式,从公开渠道获取到您二次开发的版本的源代码,否则您将违反GPLv2协议。 + +关于协议详细内容,还敬请您请阅读项目根目录下的**LICENSE**文件。请注意,按照GPLv2协议的要求,**只有英文原版才具有法律效力**。任何翻译版本都仅供参考。 +::: + +### 开源软件使用情况 + +  DragonOS在开发的过程中,参考了一些开源项目的设计,或者引入了他们的部分代码,亦或是受到了他们的启发。现将他们列在下面。我们对这些开源项目的贡献者们致以最衷心的感谢! + +格式:<项目名> - <链接> - <开源协议> + +- Linux - https://git.kernel.org/ - GPLv2 +- skiftOS - https://github.com/skiftOS/skift - MIT +- FYSOS - https://github.com/fysnet/FYSOS - [FYSOS' License](https://github.com/fysnet/FYSOS/blob/9a8968e3d6600de34539c028c843f4c06d134039/license.txt) +- LemonOS - https://github.com/LemonOSProject/LemonOS.git - BSD 2-Clause License +- LZ4 - https://github.com/lz4/lz4 - BSD 2-Clause license +- SerenityOS - https://github.com/SerenityOS/serenity.git - BSD 2-Clause license +- MINE - 《一个64位操作系统的设计与实现》田宇; 人民邮电出版社 +- chcore - 《现代操作系统:设计与实现》陈海波,夏虞斌; 机械工业出版社 +- SimpleKernel - https://github.com/Simple-XX/SimpleKernel - MIT diff --git a/docs/community/ChangeLog/index.rst b/docs/community/ChangeLog/index.rst new file mode 100644 index 00000000..569d3c8a --- /dev/null +++ b/docs/community/ChangeLog/index.rst @@ -0,0 +1,9 @@ +发行日志 +===================== + +这里是DragonOS的发行日志,会记录DragonOS的每一个版本的更新内容。 + +.. toctree:: + :maxdepth: 1 + + V0.1.x/V0.1.0 \ No newline at end of file diff --git a/docs/community/contact/index.rst b/docs/community/contact/index.rst index c72e8ec7..babd98d0 100644 --- a/docs/community/contact/index.rst +++ b/docs/community/contact/index.rst @@ -1,8 +1,12 @@ 与社区建立联系 ==================================== -开发者: fslongjin +社区公共邮箱:contact@DragonOS.org + +DragonOS负责人: longjin 工作邮箱: longjin@RinGoTek.cn 开发交流QQ群: 115763565 + +DragonOS官网: https://DragonOS.org diff --git a/docs/index.rst b/docs/index.rst index 216ed6fd..238cb7ed 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -47,6 +47,7 @@ community/code_contribution/index community/contact/index + community/ChangeLog/index Indices and tables diff --git a/docs/introduction/features.md b/docs/introduction/features.md index 3ccb5c14..61809ec0 100644 --- a/docs/introduction/features.md +++ b/docs/introduction/features.md @@ -67,6 +67,7 @@ - [x] 普通二叉树 - [x] kfifo缓冲区 - [x] 循环链表 +- [x] IDR ### 内核实用库 @@ -77,6 +78,7 @@ - [x] 基础数学库 - [x] 屏幕管理器 - [x] textui框架 +- [x] CRC函数库 ### 系统调用 diff --git a/kernel/syscall/syscall_num.h b/kernel/syscall/syscall_num.h index 1ffbe9b7..d2253fa5 100644 --- a/kernel/syscall/syscall_num.h +++ b/kernel/syscall/syscall_num.h @@ -3,10 +3,10 @@ /** * 系统调用说明 * 1 printf - * - * + * + * * 255 AHCI end_request - * + * */ #define SYS_NOT_EXISTS 0 @@ -21,19 +21,18 @@ #define SYS_BRK 9 #define SYS_SBRK 10 -#define SYS_REBOOT 11 // 重启 -#define SYS_CHDIR 12 // 切换工作目录 +#define SYS_REBOOT 11 // 重启 +#define SYS_CHDIR 12 // 切换工作目录 #define SYS_GET_DENTS 13 // 获取目录中的数据 -#define SYS_EXECVE 14 // 执行新的应用程序 -#define SYS_WAIT4 15 // 等待进程退出 -#define SYS_EXIT 16 // 进程退出 -#define SYS_MKDIR 17 // 创建文件夹 +#define SYS_EXECVE 14 // 执行新的应用程序 +#define SYS_WAIT4 15 // 等待进程退出 +#define SYS_EXIT 16 // 进程退出 +#define SYS_MKDIR 17 // 创建文件夹 #define SYS_NANOSLEEP 18 // 纳秒级休眠 -#define SYS_CLOCK 19 // 获取当前cpu时间 -#define SYS_PIPE 20 +#define SYS_CLOCK 19 // 获取当前cpu时间 +#define SYS_PIPE 20 // 创建管道 -#define SYS_MSTAT 21 // 获取系统的内存状态信息 -#define SYS_UNLINK_AT 22 // 删除文件夹/删除文件链接 +#define SYS_MSTAT 21 // 获取系统的内存状态信息 +#define SYS_UNLINK_AT 22 // 删除文件夹/删除文件链接 - -#define SYS_AHCI_END_REQ 255 // AHCI DMA请求结束end_request的系统调用 \ No newline at end of file +#define SYS_AHCI_END_REQ 255 // AHCI DMA请求结束end_request的系统调用 \ No newline at end of file