V0.1.6发行日志&更新构建系统文档 (#225)

1.更新构建系统文档
2.V0.1.6发行日志
This commit is contained in:
login
2023-04-02 18:52:00 +08:00
committed by GitHub
parent bacd691c9e
commit 52ab5d904e
6 changed files with 373 additions and 70 deletions

View File

@ -0,0 +1,306 @@
# V0.1.5
:::{note}
本文作者:龙进 <longjin@RinGoTek.cn>
2023年4月2日
:::
## 贡献者名单
DragonOS V0.1.6版本由以下小伙伴贡献代码:
- 龙进 <longjin@DragonOS.org>
- 关锦权 <guanjinquan@DragonOS.org>
- 苏琎韬 <sujintao@DragonOS.org>
- 侯嘉滢 <houjiaying@DragonOS.org>
- 吴宇健 <wuyujian@DragonOS.org>
- Mork <91721145+MorkCarpenter@users.noreply.github.com>
- WaferJay <17383312+WaferJay@users.noreply.github.com>
- HoshuChiu <129569557+HoshuChiu@users.noreply.github.com>
## 赞助者名单
感谢以下同学的赞赏,我们将不断努力!
- 万晓兰
- David Wen
- [Seele.Clover](https://github.com/seeleclover)
- [FindWangHao](https://github.com/FindWangHao)
- 叶锦毅
-
- Albert
- [TerryLeeSCUT · GitHub](https://github.com/TerryLeeSCUT)
- slientbard
-
- 匿名热心人士
## 更新内容-内核
- 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)
## 更新内容-用户环境
### 新增仓库
- 新增子项目:[dsc](https://github.com/DragonOS-Community/dsc.git)
- 移植relibc: [DragonOS-relibc](https://github.com/DragonOS-Community/relibc.git)
## 更新内容-其他
- build: 添加了qemu使用VNC作为图像输出的选项 (#222)
## 更新内容-软件移植
## 源码、发布版镜像下载
&emsp;&emsp;您可以通过以下方式获得源代码:
### 通过Git获取
- 您可以访问[https://github.com/DragonOS-Community/DragonOS/releases](https://github.com/DragonOS-Community/DragonOS/releases)下载发布版的代码,以及编译好的,可运行的磁盘镜像。
- 我们在gitee上也有镜像仓库可供下载[https://gitee.com/DragonOS/DragonOS](https://gitee.com/DragonOS/DragonOS)
### 通过DragonOS软件镜像站获取
&emsp;&emsp;为解决国内访问GitHub慢、不稳定的问题同时为了方便开发者们下载DragonOS的每个版本的代码我们特意搭建了镜像站您可以通过以下地址访问镜像站
&emsp;&emsp;您可以通过镜像站获取到DragonOS的代码压缩包以及编译好的可运行的磁盘镜像。
- [https://mirrors.DragonOS.org](https://mirrors.DragonOS.org)
- [https://mirrors.DragonOS.org.cn](https://mirrors.DragonOS.org.cn)
- 国内镜像加速: [https://mirrors.ringotek.cn/] (https://mirrors.ringotek.cn/)
## 开放源代码声明
:::{note}
为促进DragonOS项目的健康发展DragonOS以GPLv2开源协议进行发布。所有能获得到DragonOS源代码以及相应的软件制品包括但不限于二进制副本、文档的人都能享有我们通过GPLv2协议授予您的权利同时您也需要遵守协议中规定的义务。
这是一个相当严格的,保护开源软件健康发展,不被侵占的协议。
对于大部分的善意的人们而言,您不会违反我们的开源协议。
我们鼓励DragonOS的自由传播、推广但是请确保所有行为没有侵犯他人的合法权益也没有违反GPLv2协议。
请特别注意,对于违反开源协议的,尤其是**商业闭源使用以及任何剽窃、学术不端行为将会受到严肃的追责**。(这是最容易违反我们的开源协议的场景)。
并且请注意按照GPLv2协议的要求基于DragonOS修改或二次开发的软件必须同样采用GPLv2协议开源并标明其基于DragonOS进行了修改。亦需保证这些修改版本的用户能方便的获取到DragonOS的原始版本。
您必须使得DragonOS的开发者们能够以同样的方式从公开渠道获取到您二次开发的版本的源代码否则您将违反GPLv2协议。
关于协议详细内容,还敬请您请阅读项目根目录下的**LICENSE**文件。请注意按照GPLv2协议的要求**只有英文原版才具有法律效力**。任何翻译版本都仅供参考。
:::
### 开源软件使用情况
&emsp;&emsp;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
- rcore-fs - https://github.com/rcore-os/rcore-fs.git - MIT
- redox - https://gitlab.redox-os.org/redox-os/redox - MIT
## 当前版本的所有提交记录
```text
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)
```

View File

@ -6,6 +6,7 @@
.. toctree::
:maxdepth: 1
V0.1.x/V0.1.6
V0.1.x/V0.1.5
V0.1.x/V0.1.4
V0.1.x/V0.1.3

View File

@ -9,7 +9,26 @@
&emsp;&emsp;对于Linux发行版建议使用Ubuntu22、Debian、Arch Linux这样的仓库软件版本较新的发行版这能为您减少很多麻烦。
### 使用一键初始化脚本进行安装
### 1.1 下载DragonOS的源代码
&emsp;&emsp;假设您的计算机上已经安装了git您可以通过以下命令获得DragonOS的最新的源代码
```shell
git clone https://github.com/DragonOS-Community/DragonOS
cd DragonOS
```
:::{warning}
DragonOS的源代码托管在Github上但是由于Github在国内的访问速度较慢因此我们建议您在github上绑定您的电脑的**ssh公钥**
然后通过以下命令来克隆代码防止频繁出现git clone、pull、push失败的情况。
```shell
git clone git@github.com:DragonOS-Community/DragonOS.git
```
:::
## 2.使用一键初始化脚本进行安装(推荐)
&emsp;&emsp;我们提供了一键初始化脚本,可以一键安装,只需要在控制台运行以下命令:
@ -26,20 +45,27 @@ bash bootstrap.sh # 这里请不要加上sudo, 因为需要安装的开发依
欢迎您为其他的系统完善构建脚本!
:::
**如果一键初始化脚本能够正常运行,并输出最终的“祝贺”界面(如下所示)那么恭喜你,可以直接跳到{ref}`这里 <_get_dragonos_source_code>`进行阅读!**
**如果一键初始化脚本能够正常运行,并输出最终的“祝贺”界面(如下所示)请关闭当前终端,然后重新打开。**
```shell
|-----------Congratulations!---------------|
| |
| 你成功安装了DragonOS所需的依赖项! |
| 您可以通过以下命令运行它: |
| |
| make run-docker -j 你的cpu核心数 |
| 请关闭当前终端, 并重新打开一个终端 |
| 然后通过以下命令运行: |
| |
| make run |
| |
|------------------------------------------|
```
### 依赖清单(手动安装)
**接着,请直接跳到{ref}`编译命令讲解 <_build_system_command>`进行阅读!**
## 3.手动安装
### 3.1 依赖清单
&emsp;&emsp;如果自动安装脚本不能支持您的操作系统,那么您需要手动安装依赖程序。以下是依赖项的清单:
@ -84,13 +110,13 @@ sudo make install
请注意编译安装的QEMU将通过VNC模式进行链接因此您还需要在您的计算机上安装VNC viewer以连接至QEMU虚拟机。
:::
### 安装Docker
### 3.2 安装Docker
&emsp;&emsp;您可以在docker官网下载安装docker-ce.
> 详细信息请转到: [https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
### 安装Rust
### 3.3 安装Rust
:::{warning}
**【常见误区】**如果您打算采用docker进行编译尽管docker镜像中已经安装了Rust编译环境但是为了能够在VSCode中使用Rust-Analyzer进行代码提示以及`make clean`命令能正常运行您的客户机上仍然需要安装rust环境。
@ -129,44 +155,18 @@ rustup target add x86_64-unknown-none
# Rust安装完成
```
### 解决KVM权限问题
&emsp;&emsp;在部分计算机上可能由于权限问题而无法启动虚拟机我们可以通过把当前用户加到kvm用户组的方式解决该问题
```shell
# 解决kvm权限问题
USR=$USER
sudo adduser $USR kvm
sudo chown $USR /dev/kvm
```
(_get_dragonos_source_code)=
### 下载DragonOS的源代码
&emsp;&emsp;假设您的计算机上已经安装了git您可以通过以下命令获得DragonOS的最新的源代码
```shell
git clone https://github.com/DragonOS-Community/DragonOS
cd DragonOS
```
**至此,公共依赖项已经安装完成,您可以根据自己的需要,阅读后续章节**
## 2.从Docker构建推荐
**关于编译命令的用法,请见:{ref}`编译命令讲解 <_build_system_command>`**
&emsp;&emsp;为减轻配置环境的负担DragonOS发布了一个Docker编译环境便于开发者运行DragonOS。我们强烈建议您采用这种方式来运行DragonOS。
## 4.从Docker构建不推荐
&emsp;&emsp;DragonOS发布了一个Docker编译环境便于开发者运行DragonOS。但是由于编码过程仍需要在客户机上进行因此您需要在客户机上安装Rust编译环境。
&emsp;&emsp;本节假设以下操作均在Linux下进行。
### 获取DragonOS编译镜像
&emsp;&emsp;当您成功安装了docker之后您可以通过以下命令下载DragonOS的编译镜像
```shell
docker pull dragonos/dragonos-dev:v1.1.0-beta3
```
### 安装qemu虚拟机
### 4.1 安装qemu虚拟机
&emsp;&emsp;在本节中我们建议您采用命令行安装qemu
@ -174,7 +174,7 @@ docker pull dragonos/dragonos-dev:v1.1.0-beta3
sudo apt install -y qemu qemu-system qemu-kvm
```
### 创建磁盘镜像
### 4.2 创建磁盘镜像
&emsp;&emsp;首先您需要使用tools文件夹下的create_hdd_image.sh创建一块虚拟磁盘镜像。您需要在tools文件夹下运行此命令。
@ -182,7 +182,7 @@ sudo apt install -y qemu qemu-system qemu-kvm
bash create_hdd_image.sh
```
### 运行DragonOS
### 4.3 运行DragonOS
&emsp;&emsp;如果不出意外的话这将是运行DragonOS的最后一步。您只需要在DragonOS的根目录下方执行以下命令即可运行DragonOS。
@ -195,36 +195,21 @@ make run-docker
&emsp;&emsp;在qemu虚拟机被启动后我们需要在控制台输入字母`c`,然后回车。这样,虚拟机就会开始执行。
:::{note}
(1) 首次编译时由于需要下载Rust相关的索引几百MB大小因此需要一定的时间请耐心等候
(2) 输入命令可能需要加上sudo
1. 首次编译时由于需要下载Rust相关的索引几百MB大小因此需要一定的时间请耐心等候
2. 输入命令可能需要加上sudo
:::
**关于编译命令的用法,请见:{ref}`编译命令讲解 <_build_system_command>`**
## 3.在本机中直接编译
## 5.其他注意事项
&emsp;&emsp;若您追求快速的编译速度,以及完整的开发调试支持,且愿意花费半个小时来配置开发环境的话,该小节的内容能帮助到您。
### 5.1 创建磁盘镜像
### 软件依赖
&emsp;&emsp;您需要通过以下命令获取您本机安装的Grub的版本
```shell
grub-install --version
```
&emsp;&emsp;**如果显示的版本号为2.06及以上且您已经按照第一小节中的内容安装相关的依赖那么恭喜您您可以直接在本机编译DragonOS!**
&emsp;&emsp;否则您需要编译安装Grub-2.06。它的源代码可以通过[https://ftp.gnu.org/gnu/grub/grub-2.06.tar.gz](https://ftp.gnu.org/gnu/grub/grub-2.06.tar.gz)获得。
- grub 2.06 (不必使用sudo权限进行install)
### 创建磁盘镜像
&emsp;&emsp;首先,您需要使用`sudo`权限运行`tools/create_hdd_image.sh`为DragonOS创建一块磁盘镜像文件。该脚本会自动完成创建磁盘镜像的工作并将其移动到`bin/`目录下。
&emsp;&emsp;首先,您需要使用**普通用户**权限运行`tools/create_hdd_image.sh`为DragonOS创建一块磁盘镜像文件。该脚本会自动完成创建磁盘镜像的工作并将其移动到`bin/`目录下。
&emsp;&emsp;请注意,由于权限问题,请务必使用**普通用户**权限运行此脚本。(运行后,需要提升权限时,系统可能会要求您输入密码)
### 编译、运行DragonOS
### 5.2 编译、运行DragonOS
1. 安装编译及运行环境
2. 进入DragonOS文件夹
@ -240,11 +225,15 @@ grub-install --version
**关于编译命令的用法,请见:{ref}`编译命令讲解 <_build_system_command>`**
(_build_system_command)=
## 4.编译命令讲解
## 6.编译命令讲解
- 本地编译,不运行: `make all -j 您的CPU核心数`
- 本地编译,并写入磁盘镜像,不运行: `make build`
- 本地编译写入磁盘镜像并在QEMU中运行: `make run`
- Docker编译并写入磁盘镜像,: `make docker`
- Docker编译写入磁盘镜像并在QEMU中运行: `make run-docker`
- 不编译,直接从已有的磁盘镜像启动: `make qemu`
- 不编译,直接从已有的磁盘镜像启动: `make qemu`
:::{note}
如果您需要在vnc中运行DragonOS请在上述命令后加上`-vnc`后缀。如:`make run-vnc`
:::

View File

@ -53,9 +53,10 @@
### 文件系统
- [x] VFS
- [x] fat32
- [x] devfs
- [x] rootfs
- [x] fat12/16/32
- [x] Devfs
- [x] RamFS
- [x] procfs
### 异常及中断处理
@ -103,6 +104,9 @@
- [x] local apic定时器
- [x] UART串口
- [x] VBE显示
- [x] VirtIO网卡
- [x] x87FPU
- [x] TTY终端
## 用户层