1*42ec8d16Slogin# V0.1.2 2*42ec8d16Slogin 3*42ec8d16Slogin:::{note} 4*42ec8d16Slogin本文作者:龙进 <longjin@RinGoTek.cn> 5*42ec8d16Slogin 6*42ec8d16Slogin2022年12月17日 7*42ec8d16Slogin::: 8*42ec8d16Slogin 9*42ec8d16Slogin## 贡献者名单 10*42ec8d16Slogin 11*42ec8d16SloginDragonOS V0.1.2版本由以下小伙伴贡献代码: 12*42ec8d16Slogin 13*42ec8d16Slogin- 龙进 <longjin@ringotek.cn> 14*42ec8d16Slogin- 吴宇健 <wuyujian@DragonOS.org> 15*42ec8d16Slogin- Gou Ngai <sujintao@DragonOS.org> 16*42ec8d16Slogin- 黄厅 <huangting@DragonOS.org> 17*42ec8d16Slogin- 王文聪 <1297389017@qq.com> 18*42ec8d16Slogin 19*42ec8d16Slogin## 赞助者名单 20*42ec8d16Slogin 21*42ec8d16Slogin感谢以下同学的赞赏,我们将不断努力! 22*42ec8d16Slogin 23*42ec8d16Slogin- David Wen 24*42ec8d16Slogin- [Seele.Clover](https://github.com/seeleclover) 25*42ec8d16Slogin- TerryLeeSCUT 26*42ec8d16Slogin- 悟 27*42ec8d16Slogin- slientbard 28*42ec8d16Slogin 29*42ec8d16Slogin其中,非常感谢**Seele.Clover**给予DragonOS项目人民币500元的赞助与支持!我们对于每一笔赞助款项,将仔细登记,并确保其能被妥善的使用。 30*42ec8d16Slogin 31*42ec8d16Slogin## 更新内容-内核 32*42ec8d16Slogin 33*42ec8d16Slogin- 删除rust_helloworld文件 (#113) 34*42ec8d16Slogin- Signal: 允许用户注册信号处理函数,能够进入自定义的handler。(#112) 35*42ec8d16Slogin - 支持kill命令 36*42ec8d16Slogin - 允许用户自定义信号处理函数 37*42ec8d16Slogin - 新增2个系统调用:`SYS_SIGACTION` , `SYS_RT_SIGRETURN` 38*42ec8d16Slogin - libc增加`signal()`,`sigaction()`函数。 39*42ec8d16Slogin - 暂时只支持旧版的sighandler,即:只有1个参数的`void handler(int signum)`类型的信号处理函数。对于另一种信号处理函数`void handler(int signum, siginfo_t *info, void* data)`,尚不支持传递第三个参数。 40*42ec8d16Slogin- 在内核代码中加入自定义的stdint.h文件 (#109) 41*42ec8d16Slogin- 调整编译grub的脚本的部分 (#108) 42*42ec8d16Slogin- 新增32、64位uefi启动 (#105)(#101) 43*42ec8d16Slogin- 使用编译安装的grub-2.06,解决客户机上grub版本不对导致的编译无法运行的问题。 44*42ec8d16Slogin- 增加了timekeeping模块 (#106) 45*42ec8d16Slogin- bugfix: 修复rtc时钟对BCD码进行转换的时候,忘了处理day字段的问题 (#104) 46*42ec8d16Slogin- new: 开发过程文档(完成了一半) 47*42ec8d16Slogin- bootstrap.sh解决下载rust慢的问题 48*42ec8d16Slogin- 更新“构建系统”文档 49*42ec8d16Slogin- procfs->status增加显示preempt和虚拟运行时间 (#100) 50*42ec8d16Slogin- ffz函数:获取u64中的第一个值为0的bit (#100) 51*42ec8d16Slogin- 解决由于编译器优化导致local_irq_restore无法获取到正确的rflags的值的问题 52*42ec8d16Slogin- 使用Rust重构串口驱动 (#99) 53*42ec8d16Slogin 54*42ec8d16Slogin## 更新内容-用户环境 55*42ec8d16Slogin 56*42ec8d16Slogin- about app: 显示当前构建的git commit sha1以及构建时间(#114) 57*42ec8d16Slogin- shell: 修复shell的exec命令对绝对路径的拼接错误问题(#114) 58*42ec8d16Slogin- shell: exec命令增加"&"后台运行选项 (#100) 59*42ec8d16Slogin- new: 测试signal用的app 60*42ec8d16Slogin- 将libc目录进行调整,加入cargo作为rust的包管理器 61*42ec8d16Slogin 62*42ec8d16Slogin 63*42ec8d16Slogin## 源码、发布版镜像下载 64*42ec8d16Slogin 65*42ec8d16Slogin  您可以通过以下方式获得源代码: 66*42ec8d16Slogin 67*42ec8d16Slogin### 通过Git获取 68*42ec8d16Slogin 69*42ec8d16Slogin- 您可以访问[https://github.com/fslongjin/DragonOS/releases](https://github.com/fslongjin/DragonOS/releases)下载发布版的代码,以及编译好的,可运行的磁盘镜像。 70*42ec8d16Slogin- 我们在gitee上也有镜像仓库可供下载:[https://gitee.com/DragonOS/DragonOS](https://gitee.com/DragonOS/DragonOS) 71*42ec8d16Slogin 72*42ec8d16Slogin### 通过DragonOS软件镜像站获取 73*42ec8d16Slogin 74*42ec8d16Slogin  为解决国内访问GitHub慢、不稳定的问题,同时为了方便开发者们下载DragonOS的每个版本的代码,我们特意搭建了镜像站,您可以通过以下地址访问镜像站: 75*42ec8d16Slogin 76*42ec8d16Slogin  您可以通过镜像站获取到DragonOS的代码压缩包,以及编译好的可运行的磁盘镜像。 77*42ec8d16Slogin 78*42ec8d16Slogin- [https://mirrors.DragonOS.org](https://mirrors.DragonOS.org) 79*42ec8d16Slogin- [https://mirrors.DragonOS.org.cn](https://mirrors.DragonOS.org.cn) 80*42ec8d16Slogin 81*42ec8d16Slogin 82*42ec8d16Slogin## 开放源代码声明 83*42ec8d16Slogin 84*42ec8d16Slogin 85*42ec8d16Slogin:::{note} 86*42ec8d16Slogin为促进DragonOS项目的健康发展,DragonOS以GPLv2开源协议进行发布。所有能获得到DragonOS源代码以及相应的软件制品(包括但不限于二进制副本、文档)的人,都能享有我们通过GPLv2协议授予您的权利,同时您也需要遵守协议中规定的义务。 87*42ec8d16Slogin 88*42ec8d16Slogin这是一个相当严格的,保护开源软件健康发展,不被侵占的协议。 89*42ec8d16Slogin 90*42ec8d16Slogin对于大部分的善意的人们而言,您不会违反我们的开源协议。 91*42ec8d16Slogin 92*42ec8d16Slogin我们鼓励DragonOS的自由传播、推广,但是请确保所有行为没有侵犯他人的合法权益,也没有违反GPLv2协议。 93*42ec8d16Slogin 94*42ec8d16Slogin请特别注意,对于违反开源协议的,尤其是**商业闭源使用以及任何剽窃、学术不端行为将会受到严肃的追责**。(这是最容易违反我们的开源协议的场景)。 95*42ec8d16Slogin 96*42ec8d16Slogin并且,请注意,按照GPLv2协议的要求,基于DragonOS修改或二次开发的软件,必须同样采用GPLv2协议开源,并标明其基于DragonOS进行了修改。亦需保证这些修改版本的用户能方便的获取到DragonOS的原始版本。 97*42ec8d16Slogin 98*42ec8d16Slogin您必须使得DragonOS的开发者们,能够以同样的方式,从公开渠道获取到您二次开发的版本的源代码,否则您将违反GPLv2协议。 99*42ec8d16Slogin 100*42ec8d16Slogin关于协议详细内容,还敬请您请阅读项目根目录下的**LICENSE**文件。请注意,按照GPLv2协议的要求,**只有英文原版才具有法律效力**。任何翻译版本都仅供参考。 101*42ec8d16Slogin::: 102*42ec8d16Slogin 103*42ec8d16Slogin### 开源软件使用情况 104*42ec8d16Slogin 105*42ec8d16Slogin  DragonOS在开发的过程中,参考了一些开源项目的设计,或者引入了他们的部分代码,亦或是受到了他们的启发。现将他们列在下面。我们对这些开源项目的贡献者们致以最衷心的感谢! 106*42ec8d16Slogin 107*42ec8d16Slogin格式:<项目名> - <链接> - <开源协议> 108*42ec8d16Slogin 109*42ec8d16Slogin- Linux - https://git.kernel.org/ - GPLv2 110*42ec8d16Slogin- skiftOS - https://github.com/skiftOS/skift - MIT 111*42ec8d16Slogin- FYSOS - https://github.com/fysnet/FYSOS - [FYSOS' License](https://github.com/fysnet/FYSOS/blob/9a8968e3d6600de34539c028c843f4c06d134039/license.txt) 112*42ec8d16Slogin- LemonOS - https://github.com/LemonOSProject/LemonOS.git - BSD 2-Clause License 113*42ec8d16Slogin- LZ4 - https://github.com/lz4/lz4 - BSD 2-Clause license 114*42ec8d16Slogin- SerenityOS - https://github.com/SerenityOS/serenity.git - BSD 2-Clause license 115*42ec8d16Slogin- MINE - 《一个64位操作系统的设计与实现》田宇; 人民邮电出版社 116*42ec8d16Slogin- chcore - 《现代操作系统:设计与实现》陈海波,夏虞斌; 机械工业出版社 117*42ec8d16Slogin- SimpleKernel - https://github.com/Simple-XX/SimpleKernel - MIT 118*42ec8d16Slogin 119*42ec8d16Slogin## 当前版本的所有提交记录 120*42ec8d16Slogin 121*42ec8d16Slogin```text 122*42ec8d16Slogincommit 7a818da88a1c7a1760de7671141b0ce1ca4e3dde 123*42ec8d16SloginAuthor: login <longjin@ringotek.cn> 124*42ec8d16SloginDate: Sat Dec 17 17:49:12 2022 +0800 125*42ec8d16Slogin 126*42ec8d16Slogin Patch about auto gen version string (#114) 127*42ec8d16Slogin 128*42ec8d16Slogin * new: about app中,显示当前构建的git commit sha1以及构建时间 129*42ec8d16Slogin 130*42ec8d16Slogin * bugfix: 修复shell的exec命令对绝对路径的拼接错误问题 131*42ec8d16Slogin 132*42ec8d16Slogincommit 83a7aaa46bbc411c43d4fc099c6c8884efbe4771 133*42ec8d16SloginAuthor: login <longjin@ringotek.cn> 134*42ec8d16SloginDate: Sat Dec 17 16:31:50 2022 +0800 135*42ec8d16Slogin 136*42ec8d16Slogin 删除rust_helloworld文件 (#113) 137*42ec8d16Slogin 138*42ec8d16Slogincommit 6efd4740336205c9bfdd8b164e667cee2f38781e 139*42ec8d16SloginAuthor: login <longjin@ringotek.cn> 140*42ec8d16SloginDate: Sat Dec 17 16:27:50 2022 +0800 141*42ec8d16Slogin 142*42ec8d16Slogin 允许用户自定义信号处理函数 (#112) 143*42ec8d16Slogin 144*42ec8d16Slogin * new: 用户注册信号处理函数,能够进入自定义的handler 145*42ec8d16Slogin 146*42ec8d16Slogin * 修复忘了传信号的数字给用户的处理函数的bug 147*42ec8d16Slogin 148*42ec8d16Slogin * new:sigreturn 149*42ec8d16Slogin 150*42ec8d16Slogin * 删除注释 151*42ec8d16Slogin 152*42ec8d16Slogincommit 0e0c187484281768391e131495f0655e40d70cf7 153*42ec8d16SloginAuthor: login <longjin@ringotek.cn> 154*42ec8d16SloginDate: Fri Dec 16 16:20:09 2022 +0800 155*42ec8d16Slogin 156*42ec8d16Slogin 在内核代码中加入自定义的stdint.h文件 (#109) 157*42ec8d16Slogin 158*42ec8d16Slogincommit d02e6ea4112ad520aa4090ff73cdf592e14c0a82 159*42ec8d16SloginAuthor: login <longjin@ringotek.cn> 160*42ec8d16SloginDate: Wed Dec 14 20:01:55 2022 +0800 161*42ec8d16Slogin 162*42ec8d16Slogin 调整编译grub的脚本的部分 (#108) 163*42ec8d16Slogin 164*42ec8d16Slogin 1、bugfix: 修复编译grub的脚本的部分错误 165*42ec8d16Slogin 2、将grub下载源替换为tuna 166*42ec8d16Slogin 3、优化写入磁盘镜像的脚本 167*42ec8d16Slogin 4、将bios文件夹改名为legacy 168*42ec8d16Slogin 169*42ec8d16Slogincommit 38b341b8aa671f75ac26d05059aa2e9a09e653b7 170*42ec8d16SloginAuthor: YJwu2023 <119829947+YJwu2023@users.noreply.github.com> 171*42ec8d16SloginDate: Wed Dec 14 16:58:49 2022 +0800 172*42ec8d16Slogin 173*42ec8d16Slogin 新增32位uefi启动 (#105) 174*42ec8d16Slogin 175*42ec8d16Slogin * 新增32位uefi启动 176*42ec8d16Slogin 177*42ec8d16Slogin * 修复小bug 178*42ec8d16Slogin 179*42ec8d16Slogin * 增加grub本地编译安装 180*42ec8d16Slogin 181*42ec8d16Slogin * 增加本地grub编译安装脚本 182*42ec8d16Slogin 183*42ec8d16Slogin * 修正小错误 184*42ec8d16Slogin 185*42ec8d16Slogin * 修复空文件夹不上传的bug 186*42ec8d16Slogin 187*42ec8d16Slogincommit 01876902fbf6ed43992cc7d153bd8c505cb5224b 188*42ec8d16SloginAuthor: Gou Ngai <94795048+AlbertSanoe@users.noreply.github.com> 189*42ec8d16SloginDate: Wed Dec 14 15:13:54 2022 +0800 190*42ec8d16Slogin 191*42ec8d16Slogin 增加了timekeeping模块 (#106) 192*42ec8d16Slogin 193*42ec8d16Slogin * 增加了timekeeping模块 194*42ec8d16Slogin 195*42ec8d16Slogin * 格式化文档和细节更改 196*42ec8d16Slogin 197*42ec8d16Slogin Co-authored-by: longjin <longjin@RinGoTek.cn> 198*42ec8d16Slogin 199*42ec8d16Slogincommit 728aca308917a7d4d0ba10fe8174e9408d77a9a6 200*42ec8d16SloginAuthor: login <longjin@ringotek.cn> 201*42ec8d16SloginDate: Sun Dec 11 22:59:47 2022 +0800 202*42ec8d16Slogin 203*42ec8d16Slogin bugfix: 修复rtc时钟对BCD码进行转换的时候,忘了处理day字段的问题 (#104) 204*42ec8d16Slogin 205*42ec8d16Slogincommit 237e95c6ddce72d72ae7fedfeca412fab82b3622 206*42ec8d16SloginAuthor: wwc-15172310230 <78997674+wwc-15172310230@users.noreply.github.com> 207*42ec8d16SloginDate: Sun Dec 11 22:22:10 2022 +0800 208*42ec8d16Slogin 209*42ec8d16Slogin 调整user下libs的libc目录结构 (#103) 210*42ec8d16Slogin 211*42ec8d16Slogin * 调整user下libs的libc目录结构 212*42ec8d16Slogin 213*42ec8d16Slogin * 修正.gitignore文件的问题 214*42ec8d16Slogin 215*42ec8d16Slogin * 修复无法编译的问题 216*42ec8d16Slogin 217*42ec8d16Slogin Co-authored-by: longjin <longjin@RinGoTek.cn> 218*42ec8d16Slogin 219*42ec8d16Slogincommit 2291ffdece1dc5a703602f79f74df8a4854d215b 220*42ec8d16SloginAuthor: login <longjin@ringotek.cn> 221*42ec8d16SloginDate: Sun Dec 11 20:09:58 2022 +0800 222*42ec8d16Slogin 223*42ec8d16Slogin 文档更新 (#102) 224*42ec8d16Slogin 225*42ec8d16Slogin * new: 开发过程文档(完成了一半) 226*42ec8d16Slogin 227*42ec8d16Slogin * bootstrap.sh解决下载rust慢的问题 228*42ec8d16Slogin 229*42ec8d16Slogin * 更新“构建系统”文档 230*42ec8d16Slogin 231*42ec8d16Slogincommit 7f439c5ddbd2ecffc112149d16983975f523052c 232*42ec8d16SloginAuthor: YJwu2023 <119829947+YJwu2023@users.noreply.github.com> 233*42ec8d16SloginDate: Fri Dec 9 16:08:54 2022 +0800 234*42ec8d16Slogin 235*42ec8d16Slogin 增加uefi启动 (#101) 236*42ec8d16Slogin 237*42ec8d16Slogin * 增加uefi启动 238*42ec8d16Slogin 239*42ec8d16Slogin * 修改脚本 240*42ec8d16Slogin 241*42ec8d16Slogin * uefi修改 242*42ec8d16Slogin 243*42ec8d16Slogin * 删除错误的注释 244*42ec8d16Slogin 245*42ec8d16Slogin * 修正写入磁盘镜像的脚本 246*42ec8d16Slogin 247*42ec8d16Slogin * 修改X86_64为x86_64 248*42ec8d16Slogin 249*42ec8d16Slogin Co-authored-by: longjin <longjin@RinGoTek.cn> 250*42ec8d16Slogin 251*42ec8d16Slogincommit 1a2eaa402f05f82aaeebe1e03824534a0a425d4d 252*42ec8d16SloginAuthor: login <longjin@ringotek.cn> 253*42ec8d16SloginDate: Thu Dec 8 22:59:51 2022 +0800 254*42ec8d16Slogin 255*42ec8d16Slogin signal的处理(kill命令)以及一些其他的改进 (#100) 256*42ec8d16Slogin 257*42ec8d16Slogin * 将entry.S中冗余的ret_from_syscall代码删除,改为jmp Restore_all 258*42ec8d16Slogin 259*42ec8d16Slogin * new: 增加判断pt_regs是否来自用户态的函数 260*42ec8d16Slogin 261*42ec8d16Slogin * new: rust的cli和sti封装 262*42ec8d16Slogin 263*42ec8d16Slogin * 将原有的判断pt_regs是否来自用户态的代码,统一改为调用user_mode函数 264*42ec8d16Slogin 265*42ec8d16Slogin * ffz函数:获取u64中的第一个值为0的bit 266*42ec8d16Slogin 267*42ec8d16Slogin * spinlock增加 spinlock irq spin_unlock_irq 268*42ec8d16Slogin 269*42ec8d16Slogin * 临时解决显示刷新线程迟迟不运行的问题 270*42ec8d16Slogin 271*42ec8d16Slogin * 更改ffi_convert的生命周期标签 272*42ec8d16Slogin 273*42ec8d16Slogin * new: 测试signal用的app 274*42ec8d16Slogin 275*42ec8d16Slogin * 解决由于编译器优化导致local_irq_restore无法获取到正确的rflags的值的问题 276*42ec8d16Slogin 277*42ec8d16Slogin * new: exec命令增加"&"后台运行选项 278*42ec8d16Slogin 279*42ec8d16Slogin * procfs->status增加显示preempt和虚拟运行时间 280*42ec8d16Slogin 281*42ec8d16Slogin * 更改引用计数的FFIBind2Rust trait中的生命周期标签 282*42ec8d16Slogin 283*42ec8d16Slogin * new: signal处理(kill) 284*42ec8d16Slogin 285*42ec8d16Slogin * 更正在review中发现的一些细节问题 286*42ec8d16Slogin 287*42ec8d16Slogincommit f8b55f6d3fcbf152a1cb6d6fc722bf1607418b28 288*42ec8d16SloginAuthor: TingHuang <92705854+TingSHub@users.noreply.github.com> 289*42ec8d16SloginDate: Tue Dec 6 22:15:03 2022 +0800 290*42ec8d16Slogin 291*42ec8d16Slogin Patch uart (#99) 292*42ec8d16Slogin 293*42ec8d16Slogin * 添加UART驱动相关文件 294*42ec8d16Slogin 295*42ec8d16Slogin * 添加驱动核心文件,将rust编写的驱动代码加入Package中 296*42ec8d16Slogin 297*42ec8d16Slogin * 添加glib.h文件生成rust代码,添加uart驱动代码 298*42ec8d16Slogin 299*42ec8d16Slogin * 添加串口发送及接收相关代码 300*42ec8d16Slogin 301*42ec8d16Slogin * 添加字符串发送函数,未实现具体功能 302*42ec8d16Slogin 303*42ec8d16Slogin * 为调用uart驱动的代码添加rust接口 304*42ec8d16Slogin 305*42ec8d16Slogin * 添加字符串发送函数,修改C语言调用接口 306*42ec8d16Slogin 307*42ec8d16Slogin * 添加rust串口驱动 308*42ec8d16Slogin 309*42ec8d16Slogin * 添加uart.h头文件,将串口端口类型改为enum 310*42ec8d16Slogin 311*42ec8d16Slogin * 添加注释,规范代码 312*42ec8d16Slogin 313*42ec8d16Slogincommit 036acc52ce9d0fb9e7d92768ff74939a29c07f32 314*42ec8d16SloginAuthor: login <longjin@ringotek.cn> 315*42ec8d16SloginDate: Tue Nov 29 21:46:13 2022 +0800 316*42ec8d16Slogin 317*42ec8d16Slogin 将entry.S中冗余的ret_from_syscall代码删除,改为jmp Restore_all (#98) 318*42ec8d16Slogin 319*42ec8d16Slogin * 将entry.S中冗余的ret_from_syscall代码删除,改为jmp Restore_all 320*42ec8d16Slogin 321*42ec8d16Slogin```