文档更新 (#102)

* new: 开发过程文档(完成了一半)

* bootstrap.sh解决下载rust慢的问题

* 更新“构建系统”文档
This commit is contained in:
login 2022-12-11 20:09:58 +08:00 committed by GitHub
parent 7f439c5ddb
commit 2291ffdece
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 311 additions and 62 deletions

View File

@ -9,4 +9,5 @@
.. toctree::
:maxdepth: 1
the-development-process
coding-style

View File

@ -0,0 +1,155 @@
# 开发流程介绍
  作为一名想要参与开发的新人,您可能迫切想要了解如何参与开发,仔细阅读这篇文章将能帮助您了解整个开发流程,以及一些注意事项。
  本文参考了Linux文档中的一些思想、内容非常感谢Linux社区的工作者们的经验
## 1.概要
对于新人而言,参与开发的过程主要包括以下几步:
- **运行DragonOS**:按照文档:{ref}`构建DragonOS <_build_dragonos>`中的教程编译DragonOS并成功运行。在运行过程中如果有任何的疑问欢迎您在交流群或者BBS上进行反馈
- **联系Maintainer**:您可以通过邮箱<longjin@RinGoTek.cn>或者QQ`184829088`与龙进取得联系或者是对应的模块的开发者进行联系目前您可以通过发行日志上的邮箱与他们建立联系在将来我们将编写一份“Maintainers List”以便于您能快速找到要联系的人
为了节省您的时间,请简要说明:
- 如何称呼您
- 您目前掌握的技术能力
- 您希望为DragonOS贡献什么功能或者进行某个方面的开发亦或者是想要按照社区的需要来参与新功能开发及bug的修复。
- 如果您是来自高校/科研单位/企业/组织的代表希望与社区开展合作研究、开发。那么除使用QQ交流之外还请麻烦您通过您的教师邮箱/学生邮箱/企业邮箱向<contact@DragonOS.org>发送一封相关内容的邮件!这么做的目的是为了确认您是来自您的单位,而不是网络上其他人员冒充您的身份。
- **加入工作群**:在进一步了解,确认您愿意参与开发后,我们将邀请您加入工作群。
- **开始开发**:正式开始代码开发工作。
:::{note}
一些小功能的改进以及Bug修复并不一定需要提前与社区建立正式的联系对于这些patch您可以直接开发然后在Github上进行Pull Request. 这也是可以的。
但是如果您愿意的话与Maintainer联系会是一个更好的选择。
:::
## 2.开发过程是如何运作的?
&emsp;&emsp;如今的DragonOS由于正处于开发的早期阶段开发者数量不超过50人因此现在DragonOS的开发过程是通过比较松散的方式组织起来的。
### 2.1.版本发布周期
&emsp;&emsp;自从2022年11月6日DragonOS发布第一个版本以来版本发布就被定义为15~21天发布一个更新版本。由于开发人员数量仍然较少因此目前这个时间是21天。我们将版本号定义为`x.y.z`的格式每21天发布一个`z`版本. 在积累了23个月后当DragonOS引入了足够的新功能则发布一个`y`版本。请注意,我们仍未定义`x`版本的发行周期。当前,`x`版本号仍然是`0`
&emsp;&emsp;创建没有BUG的、具有尽可能少BUG的代码是每个开发者的目标之一。我们希望在每个`y`版本发布时能够修复已知的问题。然而由于在操作系统中影响问题的变量太多了以至于我们只能尽全力去减少BUG我们无法保证`y`版本不存在bug.
### 2.2.每个补丁的生命周期
&emsp;&emsp;当您向DragonOS的仓库发起一次PR那么这次PR就是一个补丁。我们会对您的补丁进行Review以确保每个补丁都实现了一个希望在主线中进行的更改。并且Maintainer或者感兴趣的小伙伴会对您的补丁提出修改意见。当时机合适时您的代码将被合入主线。
&emsp;&emsp;如果您的补丁的规模比较小,那么,它将会比较快的被合入主线。如果补丁的规模较大,或者存在一些争议,那么我们需要对其进行进一步的讨论及修改、审查,直到它符合要求。
&emsp;&emsp;每个Patch都会经历这么一个过程这只是一个概述详细的描述请看后文
- **设计**:在这个阶段,我们将明确,这个补丁将要实现什么功能,或者是解决什么问题,以及我们将要采用什么样的方式去完成它。通常来说,这项工作是开发者自己完成的。但是,**我们建议您,在设计了这个补丁之后,能够把您的设计方案公开,和大家讨论这项工作。** 闭门造车容易出错,在与大家沟通的过程中,则能及早的发现设计上的错误,从而节省很多的时间。
- **代码编写**:经过了设计阶段,您已经能够明白自己要实现的到底是一个什么样的东西。您在这个阶段进行代码编写、调试。
- **代码审查**当完成代码编写后您可以通过Github发起一个PR然后您的补丁进入了代码审查阶段。在这一阶段开发者们或者是Maintainer会和您进行沟通交流对您的代码进行评论以及对发现的问题提出修改建议。
- **合并主线**:如果一切顺利,那么代码将会被合并入主线。若该补丁在合并主线后,被发现具有较大的问题,那么它可能会被回退。重新进入前面的阶段,进行修改。
- **长期维护**:虽然说,代码被合并之后,原来的开发人员可能会在很久一段时间后,不再理会这些代码,但是这种行为可能会给其他开发者们留下不好的印象。其实,当补丁被合并入主线后,其他开发人员会尝试继续维护这些代码,这样能够很大程度的减轻您的维护负担。但是,如果想要这些代码能够长期的被保留下来,持续的发光发热,那么离不开原始开发人员的支持(不然的话,后来的人可能难以理解、维护这些代码),这是一件很有意义的事情。
&emsp;&emsp;对于没有参与过开源项目的同学来说,他们可能会想当然的,简单的把上述流程简化成**合并主线**这一个步骤,这样是不可取的。因为这样会导致很多问题,包括但不限于“写了代码但是效果很差”、“写的东西由于无法满足项目的需求,而不能被合并”。
### 2.3.开发工具
&emsp;&emsp;从上面的描述可以看出为了让开发人员们能高效地进行协作那么必须使用版本控制工具来管理这个过程。目前DragonOS使用Git来进行源代码管理。它是一个非常优秀的工具这是不必多说的。对于每个开发者而言Git的使用是一项必备的技能哪怕您只是想学习DragonOS的源代码您也需要git来获取、同步最新的代码。虽然Git的使用对于新手来说有些困难但是经过一些时间的学习后还是可以掌握的。
&emsp;&emsp;git的官方网站为[https://git-scm.com/](https://git-scm.com/)
### 2.4.沟通交流
&emsp;&emsp;DragonOS的主要开发工作是通过飞书以及bbs进行的。对于正准备参与的开发者而言您可以加入我们的交流讨论QQ群具体的群号可以在 {ref}`与社区建立联系 <get_contact_with_community>` 一文中找到。
&emsp;&emsp;**何时使用即时通讯软件?** 我们在飞书上创建了工作群,为提高即时沟通的效率,这个群仅供那些真正有意愿、且正在进行或准备进行(能够保证会进行)代码开发的开发者们加入。
&emsp;&emsp;**何时使用BBS** 对于一些正式的、需要大家广泛参与,或者是能够帮助尚未参与开发的同学了解当前的开发进度的主题,请您在[https://bbs.DragonOS.org](https://bbs.DragonOS.org)上使用类似于写信件一样的正式的语言完整地描述清楚您想表达的内容。这样有助于更多的人快速明白您要表达的是什么也能提高整体的沟通效率。并且bbs能够长期保存以往的帖子这样后来者能更方便的了解“当初开发的时候人们究竟是怎么想的”。
&emsp;&emsp;**关于交流讨论会** 除由于法定节假日放假,或特殊情况以外,我们每周末都会召开线上交流讨论会,同步介绍每周的进展。社区成员可以在这里分享自己的方案设计或是一些操作系统相关的知识(分享的话,需要提前跟会议主持人提出,以便妥善安排)。
&emsp;&emsp;**如何提问?** 下面这些建议能够帮助您与他人开展高效率的对话:
- **对于具有主题性的问题在bbs上发帖进行讨论。** 这样能够让讨论更具有目标性。当谈论到新的主题的时候,请开一个新的帖子,并在原来的帖子中,添加对特定的子问题所在的主题的链接。
- **请礼貌的交流。** 文明的语言能够减少不必要的冲突。技术意见上的冲突是思维的碰撞,但是如果涉及到了不文明的语言,或者在非技术层面,对他人进行攻击,这将破坏和谐讨论的氛围,这是我们反对的。如果有人试图激怒你,请忽略他的消息,别理他就好了。
- **在提问之前请确保您已经搜索了bbs以及互联网上的解决方案并描述清楚您的问题的上下文情景、您的思考以及网络上的解决方案。** 一些开发人员会对“明显没有进行认真思考”的问题,表现出不耐烦的态度(因为未经思考的问题会浪费他们大量的时间)。
- **当别人向您提问时**,请您耐心听他人的问题。如果您认为对方的问题过于简单或是未经思考,还请您为对方指个路,告诉对方,在哪些地方,使用什么样的方式搜索,能够得到对解决问题有帮助的资料。有时候,**新手需要的是一个指路人**,他会非常感谢您的!
### 2.5.如何入门开发?
&emsp;&emsp;DragonOS原采用C语言进行开发目前正在用Rust重构原有代码、开发新的模块也就是说除非您要进行对C语言代码的BUG修复否则其余的开发工作我们都建议您通过Rust完成。因为它能从语言层面解决那些让我们头疼的内存安全问题。从长期来看能够提升开发效率以及软件质量。
&emsp;&emsp;如何开发第一个补丁,是一个非常常见的问题。可以理解的是,个人开发者面对这样一个项目,常常会不知道从哪个地方开始入手。这是一件很正常的事情,因此我们建议您通过上文提到的方式,与社区建立联系,了解目前社区正在做什么,以及需要什么。
&emsp;&emsp;对于一个新的参与者来说,我们建议您从这样一个步骤开始:
```text
阅读文档编译、运行DragonOS并且尝试使用它目前已有的功能。
```
&emsp;&emsp;然后您可以通过查看DragonOS的GitHub仓库的project面板看看目前仍有哪些待解决的问题。可以肯定的是永远不会缺少待解决的问题您在解决这些问题的过程中能够获得一些宝贵的经验。
## 3.早期设计
&emsp;&emsp;对于软件开发而言,写代码永远不是第一步。在编写代码之前,进行一些必要的设计(提出架构、技术方案),是项目成功的基础工作。在新的补丁开发的早期,花费一些时间进行计划和沟通,往往能够在接下来的阶段节省更多的时间。
### 3.1.定义我们要解决的问题
&emsp;&emsp;与大多数的工程项目一样在DragonOS中进行开发首先需要清晰的描述要解决的问题。只有精准的定义了问题才能找到正确的解决方案。有时候我们能很轻易的定义问题比如“编写串口驱动程序使得它能把屏幕上打印的字符输出到串口”。
&emsp;&emsp;但是,有时候,**我们容易将真正的问题与某个解决方案相混淆**,并且还没意识到这一点。
&emsp;&emsp;在2022年10月时我发现在真机调试的时候需要频繁的拔插硬盘先连接到电脑待数据拷贝完毕后再连接到测试机。我对这一过程非常的不满因为很浪费时间。我的直觉想法是“有没有一种设备能够一头连接电脑另一头连接测试机的SATA接口。从测试机的角度看来这是一块硬盘测试机对这块磁盘的操作都转换为了对我的电脑上面的一个磁盘镜像文件的操作。”我的想法就是“购买/定制一款设备能够实现上面的这个功能那就能解决频繁拔插硬盘的烦恼了”然后我为了寻找这样的设备询问了一些硬件公司他们的开价都在2万元左右。
&emsp;&emsp;我在上面的这个过程中,就犯了一个错误:将真正的问题与某个解决方案相混淆了。真正的问题是:“解决需要频繁的拔插硬盘”,但是,在我的思考的过程中,不知不觉间,将问题转换成了“如何实现一款具有硬盘模拟功能的设备”。后面这个问题,只是某个解决方案下,需要解决的问题,并不是我们要解决的根本问题。
&emsp;&emsp;对于要解决的根本问题,事实上有更好的解决方案:“制作一个类似于开关一样的转换器,当数据从电脑拷贝到磁盘后,把开关拨向另一边,使得电路与测试机接通”。这个方案的成本估摸着就十几二十块钱。
&emsp;&emsp;上面的这个故事,告诉我们的是,**在早期设计阶段,我们应当关注的是问题本身——而不是特定的解决方案**。
&emsp;&emsp;我们需要关注系统的稳定性、长期的可维护性,解决方案必须考虑到这两点。由于系统比较复杂,因此,请您在开始编码之前,与社区的小伙伴讨论您的设计方案,以便您的方案能充分地,从全局的角度,考虑到系统的稳定性、可维护性。
&emsp;&emsp;**因此,在开发的早期,我们应当对以下三个问题,拥有一个答案**
- 要解决的本质问题是什么?
- 这个问题会影响哪些方面/哪些用户?提出的解决方案应当解决哪些用例、场景?
- DragonOS目前在解决该问题的方面具有哪些不足/问题?
&emsp;&emsp;只有考虑清楚了上面三个问题,讨论的解决方案才是有意义的。这是一个架构设计的过程,需要进行仔细的思考。尽管我们目前提倡敏捷开发,但是前期的架构设计仍然是非常重要的。
### 3.2.早期讨论
&emsp;&emsp;在实施开发之前,与社区的成员们进行讨论是非常有意义的。这能够通过多种方式节省您的时间,并减少许多不必要的麻烦:
- DragonOS可能以您不知道、不理解的方式已经解决了相关的问题。DragonOS里面的一些特性、功能细节不是很明显他们不一定会被写进文档。也许这些细节只是在某个不起眼的注释里面提到了因此您很难注意到这些。这种细节可能只有一些开发人员知道。因此与社区沟通能够避免您进行重复的工作。
- 您提出的解决方案中,可能会有一些东西,由于一些原因(比如方案中的一些设计会在将来造成问题、方案的架构设计具有明显缺陷),无法合入主线。
- 其他的开发人员可能已经考虑过这个问题;他们可能有更好的解决方案,或者是更好的想法。并且,他们可能愿意帮助你一起完善你的解决方案。
&emsp;&emsp;Linux文档中提到闭门造车式的设计和开发所产生的代码总会有问题这些问题只有在发布到社区里面的时候才会暴露出来。因此我们必须吸取前人之鉴通过与社区开发人员进行早期讨论从而避免大量的痛苦和额外的工作。
### 3.3.在何时发布帖子?
&emsp;&emsp;如果可能的话在开发的早期阶段发布您的计划、设计会是一个不错的选择。发帖的时候您可以描述您正在解决的问题以及已经制定的一些计划。包括但不限于如何将设计付诸实施。您在社区内发布帖子不仅能够帮助您获得一些有用的建议也能帮助整个DragonOS社区提供有用的信息使得社区沟通更高效。
&emsp;&emsp;在这个阶段,可能您发布的帖子并不会引来很多评论,这并不一定意味着您做的不好,或者大家对您所做的工作不感兴趣。当然,也不能就此认为您的设计、想法不存在问题。可能只是因为大家比较忙,看了您的帖子之后,了解到了您的工作,但是大家并不一定有时间进行回复。(但是事实上您发布的信息对他人来说是有用的)
&emsp;&emsp;在这种情况下,请不要气馁,您最好的做法就是,继续您的工作,并且不时地在您的帖子下分享您的工作,这样能够让社区的成员们随时了解到您的最新进展。
### 3.4.获得您所在的组织的支持
&emsp;&emsp;如果您对DragonOS的开发工作是在您的公司内完成的。那么很显然在您把计划、代码发布到社区论坛之前您必须取得您的经理或上级的许可。
&emsp;&emsp;同时请注意根据我们的授权许可基于DragonOS操作系统的内核、官方开源的用户库而开发的代码或者为DragonOS操作系统本身而开发的代码根据开源授权许可必须同样以GPLv2协议进行授权发布。如果您所在的组织违背了GPLv2协议中的要求以除GPLv2以外的协议开放源代码或者是进行“闭源使用”那么DragonOS社区对您的公司/组织所授予的使用DragonOS源代码的授权将会被自动撤销。这将会面临一系列的法律问题。因此在这个问题上公司的管理人员、法律人员如果能越早地就公司要在DragonOS中开发的软件项目达成一致将能促进您的公司在该项目上的进展。
&emsp;&emsp;如果您的公司的项目/或者是您研究的项目根据您所在组织的保密规定不能将其进行过早的披露那也没有问题。只要您的公司能够确保这部分代码在其编译而成的二进制产品被发布之时按照GPLv2协议进行开源并向开源社区贡献这部分代码即可。
## 4.如何正确的编写代码
## 5.发起Pull Request
## 6.后期跟进
## 7.另外的一些话题
## 8.更多信息
## 9.结语

View File

@ -1,3 +1,5 @@
.. _get_contact_with_community:
与社区建立联系
====================================

View File

@ -1,16 +1,150 @@
(_build_dragonos)=
# 构建DragonOS
## 从Docker构建推荐
## 1.写在前面
&emsp;&emsp;为减轻配置环境的负担DragonOS发布了一个Docker编译环境便于开发者运行DragonOS。我们强烈建议您采用这种方式来运行DragonOS
&emsp;&emsp;无论您采用后文中的何种方式来编译DragonOS您必须先按照本小节中的步骤初始化您的开发环境
&emsp;&emsp;本节假设以下操作均在Linux下进行。
&emsp;&emsp;开始之前您需要一台运行Linux或MacOS的计算机并且处理器架构为X86-64.
&emsp;&emsp;对于Linux发行版建议使用Ubuntu22、Debian、Arch Linux这样的仓库软件版本较新的发行版这能为您减少很多麻烦。
### 使用一键初始化脚本进行安装
&emsp;&emsp;我们提供了一键初始化脚本,可以一键安装,只需要在控制台运行以下命令:
```shell
cd tools
bash bootstrap.sh
```
:::{note}
一键配置脚本目前只支持以下系统:
- Ubuntu/Debian/Deepin/UOS 等基于Debian的衍生版本
欢迎您为其他的系统完善构建脚本!
:::
**如果一键初始化脚本能够正常运行,并输出最终的“祝贺”界面,那么恭喜你,可以直接跳到{ref}`这里 <_get_dragonos_source_code>`进行阅读!**
### 依赖清单(手动安装)
&emsp;&emsp;如果自动安装脚本不能支持您的操作系统,那么您需要手动安装依赖程序。以下是依赖项的清单:
&emsp;&emsp;在以下依赖项中,除了`docker-ce``Rust及其工具链`以外其他的都能通过系统自带的包管理器进行安装。关于docker以及rust的安装请看后文。
- docker-ce
- llvm-dev
- libclang-dev
- clang
- gcc-multilib
- qemu qemu-system qemu-kvm
- build-essential
- fdisk
- lsb-release
- git
- Rust以及其工具链
**请留意若您的Linux系统是在虚拟机中运行的还请您在您的VMware/Virtual Box虚拟机的处理器设置选项卡中开启Intel VT-x或AMD-V选项否则DragonOS将无法运行。**
:::{note}
*在某些Linux发行版的软件仓库中构建的Qemu可能由于版本过低而不兼容DragonOS如果遇到这种问题请卸载Qemu并采用编译安装的方式重新安装Qemu*
在该地址下载Qemu源代码 https://download.qemu.org/
解压后进入源代码目录,然后执行下列命令:
```shell
# 安装编译依赖项
sudo apt install -y autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
gawk build-essential bison flex texinfo gperf libtool patchutils bc \
zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev libsdl2-dev \
git tmux python3 python3-pip ninja-build
./configure --enable-kvm
make -j 8
sudo make install
# 编译安装完成
```
请注意编译安装的QEMU将通过VNC模式进行链接因此您还需要在您的计算机上安装VNC viewer以连接至QEMU虚拟机。
:::
### 安装Docker
&emsp;&emsp;您可以在docker官网下载安装docker-ce.
> 详细信息请转到: https://docs.docker.com/engine/install/
> 详细信息请转到: [https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
### 安装Rust
:::{warning}
**【常见误区】**如果您打算采用docker进行编译尽管docker镜像中已经安装了Rust编译环境但是为了能够在VSCode中使用Rust-Analyzer进行代码提示以及`make clean`命令能正常运行您的客户机上仍然需要安装rust环境。
:::
&emsp;&emsp;您可以在控制台输入以下命令安装rust。
```shell
# 这两行用于换源加速Rust的安装过程
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
# 安装Rust
curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain nightly
# 把Rustup加到环境变量
echo "export PATH=\"\$HOME/.cargo/bin:\$PATH\"" >> ~/.bashrc
source ~/.cargo/env
source "$HOME/.cargo/env"
# 更换cargo的索引源
touch ~/.cargo/config
echo -e "[source.crates-io] \n \
registry = \"https://github.com/rust-lang/crates.io-index\" \n \
\n \
replace-with = 'dragonos-gitee' \n \
[source.dragonos-gitee] \n \
registry = \"https://gitee.com/DragonOS/crates.io-index.git\" \n \
" > ~/.cargo/config
# 安装DragonOS所需的工具链
cargo install cargo-binutils
rustup toolchain install nightly
rustup default nightly
rustup component add rust-src
rustup component add llvm-tools-preview
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/fslongjin/DragonOS
cd DragonOS
```
**至此,公共依赖项已经安装完成,您可以根据自己的需要,阅读后续章节**
## 2.从Docker构建推荐
&emsp;&emsp;为减轻配置环境的负担DragonOS发布了一个Docker编译环境便于开发者运行DragonOS。我们强烈建议您采用这种方式来运行DragonOS。
&emsp;&emsp;本节假设以下操作均在Linux下进行。
### 获取DragonOS编译镜像
@ -28,29 +162,6 @@ docker pull dragonos/dragonos-dev:v1.1.0-beta3
sudo apt install -y qemu qemu-system qemu-kvm
```
&emsp;&emsp;请留意若您的Linux系统是在虚拟机中运行的还请您在您的VMware/Virtual Box虚拟机的处理器设置选项卡中开启Intel VT-x或AMD-V选项否则DragonOS将无法运行。
*在某些Linux发行版的软件仓库中构建的Qemu可能存在不识别命令参数的问题如果遇到这种问题请卸载Qemu并采用编译安装的方式重新安装Qemu*
在该地址下载Qemu源代码 https://download.qemu.org/
解压后进入源代码目录,然后执行下列命令:
```shell
./configure --enable-kvm
make -j 8
sudo make install
```
### 下载DragonOS的源代码
&emsp;&emsp;假设您的计算机上已经安装了git您可以通过以下命令获得DragonOS的最新的源代码
```shell
git clone https://github.com/fslongjin/DragonOS
cd DragonOS
```
### 创建磁盘镜像
&emsp;&emsp;首先您需要使用tools文件夹下的create_hdd_image.sh创建一块虚拟磁盘镜像。您需要在tools文件夹下运行此命令。
@ -67,7 +178,6 @@ bash create_hdd_image.sh
make run-docker
```
&emsp;&emsp;稍等片刻DragonOS将会被运行。
&emsp;&emsp;在qemu虚拟机被启动后我们需要在控制台输入字母`c`,然后回车。这样,虚拟机就会开始执行。
@ -78,58 +188,37 @@ make run-docker
**关于编译命令的用法,请见:{ref}`编译命令讲解 <_build_system_command>`**
## 手动搭建开发环境
## 3.在本机中直接编译
&emsp;&emsp;若您追求快速的编译速度,以及完整的开发调试支持,且愿意花费半个小时到两个小时的时间来配置开发环境的话,该小节的内容能帮助到您。
&emsp;&emsp;若您追求快速的编译速度,以及完整的开发调试支持,且愿意花费半个小时来配置开发环境的话,该小节的内容能帮助到您。
### 软件依赖
&emsp;&emsp;您需要编译安装以下软件依赖。他们的源代码可以在对应项目的官方网站上获得。
- grub 2.06 (不必使用sudo权限进行install)
- qemu 6.2.0 (启用所有选项)
&emsp;&emsp;需要注意的是编译安装qemu将会是一件费时费力的工作它可能需要花费你40分钟以上的时间。
&emsp;&emsp;对于其余的软件依赖,我们提供了一键配置脚本,可以一键安装,只需要在控制台运行以下命令:
&emsp;&emsp;您需要通过以下命令获取您本机安装的Grub的版本
```shell
cd tools
bash bootstrap.sh
grub-install --version
```
:::{note}
一键配置脚本目前只支持以下系统:
- Ubuntu/Debian/Deepin/UOS 等基于Debian的衍生版本
&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/`目录下。
### 编译DragonOS
### 编译、运行DragonOS
1. 安装编译及运行环境
2. 进入DragonOS文件夹
3. 输入命令:`make -j 16`即可编译
4. 输入`make build`即可编译并写入磁盘镜像
3. 输入`make run`即可编译并写入磁盘镜像,并运行
### 运行DragonOS
&emsp;&emsp;至此准备工作已经完成您可以在DragonOS项目的根目录下输入
```shell
make run
```
&emsp;&emsp;然后DragonOS将会被启动您可以通过VNC Viewer连接至虚拟机。在qemu虚拟机被启动后我们需要在控制台输入字母`c`,然后回车。这样,虚拟机就会开始执行。
&emsp;&emsp;在qemu虚拟机被启动后我们需要在控制台输入字母`c`,然后回车。这样,虚拟机就会开始执行。
:::{note}
首次编译时由于需要下载Rust相关的索引几百MB大小因此需要一定的时间请耐心等候
@ -138,7 +227,7 @@ make run
**关于编译命令的用法,请见:{ref}`编译命令讲解 <_build_system_command>`**
(_build_system_command)=
## 编译命令讲解
## 4.编译命令讲解
- 本地编译,不运行: `make all -j 您的CPU核心数`
- 本地编译,并写入磁盘镜像,不运行: `make build`

View File

@ -1,5 +1,7 @@
emulator="qemu"
defpackman="apt-get"
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
banner()
{
@ -179,6 +181,6 @@ bash create_hdd_image.sh
# 解决kvm权限问题
USR=$USER
sudo adduser $USR kvm
sudo chowm $USR /dev/kvm
sudo chown $USR /dev/kvm
congratulations