diff --git a/.gitignore b/.gitignore
index 246ea596..b1355359 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@ build/
source/_build/
pushall.sh
os-lectures
+my-env
\ No newline at end of file
diff --git a/source/chapter0/5setup-devel-env.rst b/source/chapter0/5setup-devel-env.rst
index b675854d..388ac2f7 100644
--- a/source/chapter0/5setup-devel-env.rst
+++ b/source/chapter0/5setup-devel-env.rst
@@ -4,7 +4,7 @@
.. toctree::
:hidden:
:maxdepth: 4
-
+
本节我们将完成环境配置并成功运行 rCore-Tutorial-v3 。整个流程分为下面几个部分:
- 系统环境配置
@@ -13,18 +13,20 @@
- 其他工具安装
- 运行 rCore-Tutorial-v3
+如果您想阅读在WSL 2环境中配置rCore实验环境的保姆级指南,请参阅 :doc:`/chapter0/9wsl-quick-setup` 。
+
在线开发环境配置
-------------------------------------------------
Github Classroom方式进行在线OS 环境配置
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-注:这种方式目前主要用于 `2022年开源操作系统训练营 `_
+注:这种方式目前主要用于 `2022年开源操作系统训练营 `_
.. note::
**基于 github classroom 的在线开发方式**
-
+
基于 github classroom,可方便建立开发用的 git repository,并可基于 github 的 codespace (在线版 ubuntu +vscode)在线开发使用。整个开发环境仅仅需要一个网络浏览器。
1. 在网络浏览器中用自己的 github id 登录 github.com
@@ -88,13 +90,13 @@ Docker方式进行本地OS开发环境配置
**Docker 开发环境**
感谢 qobilidop,dinghao188 和张汉东老师帮忙配置好的 Docker 开发环境,进入 Docker 开发环境之后不需要任何软件工具链的安装和配置,可以直接将 tutorial 运行起来,目前应该仅支持将 tutorial 运行在 QEMU 模拟器上。
-
+
使用方法如下(以 Ubuntu18.04 为例):
1. 通过 ``su`` 切换到管理员账户 ``root`` (注:如果此前并未设置 ``root`` 账户的密码需要先通过 ``sudo passwd`` 进行设置), 在 ``rCore-Tutorial-v3`` 根目录下,执行 ``make build_docker`` ,来建立基于docker的开发环境 ;
2. 在 ``rCore-Tutorial-v3`` 根目录下,执行 ``make docker`` 进入到 Docker 环境;
3. 进入 Docker 之后,会发现当前处于根目录 ``/`` ,我们通过 ``cd mnt`` 将当前工作路径切换到 ``/mnt`` 目录;
- 4. 通过 ``ls`` 可以发现 ``/mnt`` 目录下的内容和 ``rCore-Tutorial-v3`` 目录下的内容完全相同,接下来就可以在这个环境下运行 tutorial 了。例如 ``cd os && make run`` 。
+ 4. 通过 ``ls`` 可以发现 ``/mnt`` 目录下的内容和 ``rCore-Tutorial-v3`` 目录下的内容完全相同,接下来就可以在这个环境下运行 tutorial 了。例如 ``cd os && make run`` 。
.. chyyuu 下面的说法是面向github网页的,在书中应该有改变???
@@ -141,7 +143,7 @@ Rust 开发环境配置
如果官方的脚本在运行时出现了网络速度较慢的问题,可选地可以通过修改 rustup 的镜像地址(修改为中国科学技术大学的镜像服务器)来加速:
.. code-block:: bash
-
+
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
curl https://sh.rustup.rs -sSf | sh
@@ -149,14 +151,14 @@ Rust 开发环境配置
或者使用tuna源来加速 `参见 rustup 帮助 `_:
.. code-block:: bash
-
+
export RUSTUP_DIST_SERVER=https://mirrors.tuna.edu.cn/rustup
export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.edu.cn/rustup/rustup
curl https://sh.rustup.rs -sSf | sh
或者也可以通过在运行前设置命令行中的科学上网代理来实现:
-.. code-block:: bash
+.. code-block:: bash
# e.g. Shadowsocks 代理,请根据自身配置灵活调整下面的链接
export https_proxy=http://127.0.0.1:1080
@@ -172,7 +174,7 @@ Rust 开发环境配置
接下来,我们可以确认一下我们正确安装了 Rust 工具链:
.. code-block:: bash
-
+
rustc --version
可以看到当前安装的工具链的版本。
@@ -188,7 +190,7 @@ Rust 开发环境配置
可通过如下命令安装 rustc 的 nightly 版本,并把该版本设置为 rustc 的缺省版本。
.. code-block:: bash
-
+
rustup install nightly
rustup default nightly
@@ -251,10 +253,10 @@ QEMU 模拟器安装
sudo apt install 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 libslirp-dev \
- git tmux python3 python3-pip ninja-build
- # 下载源码包
- # 如果下载速度过慢可以使用我们提供的百度网盘链接:https://pan.baidu.com/s/1dykndFzY73nqkPL2QXs32Q
- # 提取码:jimc
+ git tmux python3 python3-pip ninja-build
+ # 下载源码包
+ # 如果下载速度过慢可以使用我们提供的百度网盘链接:https://pan.baidu.com/s/1dykndFzY73nqkPL2QXs32Q
+ # 提取码:jimc
wget https://download.qemu.org/qemu-7.0.0.tar.xz
# 解压
tar xvJf qemu-7.0.0.tar.xz
@@ -264,11 +266,11 @@ QEMU 模拟器安装
make -j$(nproc)
.. note::
-
+
注意,上面的依赖包可能并不完全,比如在 Ubuntu 18.04 上:
- 出现 ``ERROR: pkg-config binary 'pkg-config' not found`` 时,可以安装 ``pkg-config`` 包;
- - 出现 ``ERROR: glib-2.48 gthread-2.0 is required to compile QEMU`` 时,可以安装
+ - 出现 ``ERROR: glib-2.48 gthread-2.0 is required to compile QEMU`` 时,可以安装
``libglib2.0-dev`` 包;
- 出现 ``ERROR: pixman >= 0.21.8 not present`` 时,可以安装 ``libpixman-1-dev`` 包。
@@ -358,8 +360,8 @@ GDB 调试支持
.. warning::
在 ``os/Makefile`` 中我们默认设置 MicroSD 在当前操作系统中可以用设备 ``SDCARD=/dev/sdb`` 访问。你可以使用 ``df -hT`` 命令来确认在你的环境中 MicroSD 是哪个设备,并在 ``make sdcard`` 之前对 ``os/Makefile`` 的 ``SDCARD`` 配置做出适当的修改。不然,这有可能导致 **设备 /dev/sdb 上数据丢失** !
-
-随后,我们将 MicroSD 插入 K210 开发板,将 K210 开发板连接到 PC ,然后进入 ``os`` 目录 ``make run BOARD=k210`` 在 K210 开发板上跑 rCore Tutorial 。
+
+随后,我们将 MicroSD 插入 K210 开发板,将 K210 开发板连接到 PC ,然后进入 ``os`` 目录 ``make run BOARD=k210`` 在 K210 开发板上跑 rCore Tutorial 。
.. image:: k210-final.png
@@ -383,7 +385,7 @@ Q & A
- 请按照本节说明进行 Rust 安装和 crates.io 镜像配置。通常情况下能够解决 Rust 工具链更新和下载已发布到 crates.io 上库的问题。
- 如果发现在试图从 github 上下载下述几个库的时候卡死,可以修改 ``os`` 和 ``user`` 目录下的 ``Cargo.toml`` 替换为 gitee 上的镜像。例如,将:
-
+
.. code-block:: toml
riscv = { git = "https://github.com/rcore-os/riscv", features = ["inline-asm"] }
@@ -391,7 +393,7 @@ Q & A
k210-pac = { git = "https://github.com/wyfcyx/k210-pac" }
k210-hal = { git = "https://github.com/wyfcyx/k210-hal" }
k210-soc = { git = "https://github.com/wyfcyx/k210-soc" }
-
+
替换为:
.. code-block:: toml
diff --git a/source/chapter0/9wsl-quick-setup.rst b/source/chapter0/9wsl-quick-setup.rst
new file mode 100644
index 00000000..a1f0eb87
--- /dev/null
+++ b/source/chapter0/9wsl-quick-setup.rst
@@ -0,0 +1,449 @@
+rCore环境配置指南
+=================
+
+.. toctree::
+ :hidden:
+ :maxdepth: 4
+.. _wsl-quick-setup:
+
+欢迎各位同学学习rCore。本文中,笔者将与各位一同完成rCore实验的环境配置步骤,帮助各位打造舒适的开发环境,进而带来更好的开发体验。
+
+1. 配置Linux环境
+----------------
+
+运行rCore需要在Linux环境下,因此在本节中,我们将在Windows操作系统下配置Linux环境。若您的电脑上运行的已经是Linux,可以酌情跳过本节。
+
+在Windows下使用Linux有许多方案。不过,综合简便程度、开发体验等因素,笔者强烈推荐使用微软提供的第2代Linux子系统功能(Windows
+Subsystem Linux 2,下简称WSL 2)。与WSL
+2相关的文档陈列如下,方便各位自行取用:
+
+1. `适用于 Linux 的 Windows 子系统文档 \| Microsoft Learn `_
+2. `安装 WSL \| Microsoft Learn `_
+3. `轻松搬迁!教你如何将WSL从C盘迁移到其他盘区,释放存储空间! - 知乎 (zhihu.com) `_
+4. `使用 WSL 访问网络应用程序 \| Microsoft Learn `_
+
+1.1 一行指令安装WSL和最新版Ubuntu
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+在本节中,我们最关心的是2号文档,即“安装WSL”的方法。
+
+ 可能有同学会疑惑:这儿怎么说的都是WSL,不是WSL
+ 2呢?原因在于,WSL的1代已经被微软废弃。因此,若无特指,在较新文档资料中的WSL均指代WSL
+ 2。
+
+2号文档指出,在一台从未使用过WSL 2的Windows电脑上启用WSL
+2,只需在PowerShell中执行一行代码:
+
+.. code:: bash
+
+ wsl --install
+
+这条指令将自动启用WSL
+2所需的全部系统功能,然后安装受微软支持的最新LTS版Ubuntu(其中,LTS为长期支持Long-Term
+Support的缩写)。截至笔者撰写此指南时(2024.8.26),该版本为\ ``Ubuntu-24.04 LTS``\ 。
+
+安装完成后,会自动进入Ubuntu中,提示各位设置用户名和密码。在键入密码时,屏幕上不会有任何显示,这是正常情况,无需惊慌。
+
+1.2 【可选】安装WSL和指定Linux发行版
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+正如前文所言,一行指令安装方法会安装时下最新的系统版本。然而,我们不能保证rCore的代码在最新版系统上也能完美运行。因此,笔者认为有必要提及指定Linux发行版的安装方法。
+
+首先使用下列指令,安装裸WSL 2而不安装任何Linux发行版。
+
+.. code:: bash
+
+ wsl --install --no-distribution
+
+待裸WSL 2安装完成之后,键入如下指令,让WSL
+2联网搜索并显示它支持的所有Linux发行版:
+
+.. code:: bash
+
+ wsl --list --online
+
+随后,形如如下所示的输出将被显示:
+
+::
+
+ 以下是可安装的有效分发的列表。
+ 使用 'wsl.exe --install ' 安装。
+
+ NAME FRIENDLY NAME
+ Ubuntu Ubuntu
+ Debian Debian GNU/Linux
+ kali-linux Kali Linux Rolling
+ Ubuntu-18.04 Ubuntu 18.04 LTS
+ Ubuntu-20.04 Ubuntu 20.04 LTS
+ Ubuntu-22.04 Ubuntu 22.04 LTS
+ Ubuntu-24.04 Ubuntu 24.04 LTS
+ OracleLinux_7_9 Oracle Linux 7.9
+ OracleLinux_8_7 Oracle Linux 8.7
+ OracleLinux_9_1 Oracle Linux 9.1
+ openSUSE-Leap-15.6 openSUSE Leap 15.6
+ SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
+ SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6
+ openSUSE-Tumbleweed openSUSE Tumbleweed
+
+由于笔者是使用\ ``Ubuntu 22.04 LTS``\ 完成了rCore实验,因此笔者选择该版本进行安装。键入如下指令,安装这个发行版:
+
+.. code:: bash
+
+ wsl --install Ubuntu-22.04
+
+..
+
+ 注意:这里的Ubuntu-22.04来自于上个指令输出的NAME一列,而非来自FRIENDLY
+ NAME一列。
+
+待安装完成后,如上一节所述设置用户名和密码即可。
+
+2. 安装Rust工具链
+-----------------
+
+rCore是一个利用Rust编程语言写就的教学操作系统,得益于Rust编程语言的优良特性,rCore在运行效率、内存安全性上也优于其它用C语言编写的教学操作系统。本节中,我们将在刚刚创建好的Linux环境中安装Rust编程语言的工具链(下简称Rust工具链)。
+
+首先,前往\ `入门 - Rust 程序设计语言
+(rust-lang.org) `__\ ,下滑至“Windows
+的 Linux 子系统(WSL)”小标题处,看到如下的安装命令:
+
+.. code:: bash
+
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+
+..
+
+ Rust的官方下载源速度较慢。为防止因安装速度过慢而浇灭了同学们的学习兴致,设置国内镜像,从而加速Rust工具链安装还是很有必要的。
+
+ 在Ubuntu的命令行界面中,输入:
+
+ .. code:: bash
+
+ export RUSTUP_UPDATE_ROOT=https://mirrors.cernet.edu.cn/rustup/rustup
+ export RUSTUP_DIST_SERVER=https://mirrors.cernet.edu.cn/rustup
+
+ ..
+
+ 这俩网址来自于有名的镜像站\ `Mirror
+ Z `__\ ,同学们如果有其他镜像需求,亦可前往查看。
+
+ 然后再运行上文提及的\ ``curl ...``\ 安装命令,就会发现速度飞快了。
+
+静候指令运行,直至出现形如下列输出:
+
+::
+
+ You can uninstall at any time with rustup self uninstall and
+ these changes will be reverted.
+
+ Current installation options:
+
+
+ default host triple: x86_64-unknown-linux-gnu
+ default toolchain: stable (default)
+ profile: default
+ modify PATH variable: yes
+
+ 1) Proceed with standard installation (default - just press enter)
+ 2) Customize installation
+ 3) Cancel installation
+ >
+
+这是安装程序在询问安装选项。我们使用默认设置即可,因此直接按下回车键,安装程序将会自动完成后续的安装。
+
+2.1 进一步配置nightly环境
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Rust工具链有两大分支:稳定版stable和非稳定测试版nightly。Rust安装程序默认安装的是stable版本,但是nightly版本提供了一些rCore需要的独有功能。因此,我们还需要执行下面两条命令,安装时下最新的nightly版工具链,并设置为默认:
+
+.. code:: bash
+
+ rustup install nightly # 安装nightly工具链
+ rustup default nightly # 将刚刚装好的nightly工具链设为默认
+
+3. 安装rCore所需的其他环境
+--------------------------
+
+本节内容是对\ `实验环境配置 - rCore-Tutorial-Book-v3 3.6.0-alpha.1 文档
+(rcore-os.cn) `__\ (叙述比较混乱)的再整理。
+
+3.1 【可选】配置crates.io镜像源
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+首先用Ubuntu自带的文本编辑器nano打开\ ``~/.cargo/config.toml``\ 配置文件:
+
+.. code:: bash
+
+ nano ~/.cargo/config.toml
+
+在打开的编辑窗口中输入如下内容,然后依次按Ctrl+O,回车(保存内容到文件),Ctrl+X(退出)。
+
+.. code:: toml
+
+ [source.crates-io]
+ replace-with = 'mirror'
+
+ [source.mirror]
+ registry = "sparse+https://mirrors.cernet.edu.cn/crates.io-index/"
+
+3.2 安装编译rCore的必须组件
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+首先需要为Ubuntu安装一些编译工作会用到的通用组件。这些组件可以通过下列命令来安装:
+
+.. code:: bash
+
+ # 安装编译所需的依赖包
+ sudo apt install 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 libslirp-dev \
+ git tmux python3 python3-pip ninja-build
+
+要编译rCore,还需要安装一些其他的组件。这些组件可以通过下列命令来安装:
+
+.. code:: bash
+
+ rustup target add riscv64gc-unknown-none-elf
+ cargo install cargo-binutils
+ rustup component add llvm-tools-preview
+ rustup component add rust-src
+
+rCore是运行在RISC-V架构CPU上的操作系统,这与主流的X86架构电脑并不相同,因此我们需要在虚拟机中运行rCore。本实验选择Qemu虚拟机的7.0.0版本,其安装方法如下:
+
+.. code:: bash
+
+ # 下载Qemu模拟器的源码包
+ wget https://download.qemu.org/qemu-7.0.0.tar.xz
+ # 解压
+ tar xvJf qemu-7.0.0.tar.xz
+ # 编译安装并配置 RISC-V 支持
+ cd qemu-7.0.0
+ ./configure --target-list=riscv64-softmmu,riscv64-linux-user # 在第九章的实验中,可以有图形界面和网络。如果要支持图形界面,可添加 " --enable-sdl" 参数;如果要支持网络,可添加 " --enable-slirp" 参数
+ make -j$(nproc)
+
+待编译完成后,关注最后一行输出:
+
+::
+
+ make[1]: Leaving directory '/home/endericedragon/qemu-7.0.0/build'
+
+将上述build目录添加到环境变量\ ``PATH``\ 中:
+
+.. code:: bash
+
+ # 用nano编辑器打开~/.bashrc
+ nano ~/.bashrc
+ # 在打开的编辑器页面中,不停往下滚动到文件末尾,追加下面一行:
+ export PATH=$PATH:/home/endericedragon/qemu-7.0.0/build
+ # 按Ctrl + O, 回车, Ctrl + X保存退出
+
+4. 启程:下载并运行rCore
+------------------------
+
+rCore的代码以“代码仓库”的形式托管在GitHub上。这是一个全球性的代码托管平台,托管着来自世界各地的代码。想获取rCore的源代码进行实验,就必须安装、配置并学习使用Git。
+
+4.1 为Ubuntu安装并配置Git
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Git是一个用于版本控制的命令行工具,允许开发者方便地管理源代码。Git的使用有一些门槛,若以往从未使用过Git,笔者推荐以下学习资源:
+
+- 廖雪峰编写的Git教程:\ `Git教程 - 廖雪峰的官方网站
+ (liaoxuefeng.com) `__
+- 在线练习各种Git命令:\ `Learn Git
+ Branching `__
+
+实际上,在上文的步骤中,我们已经在Ubuntu中安装了Git了。保险起见,笔者将安装Git的命令放在这里,供各位取用:
+
+.. code:: bash
+
+ sudo apt install git
+
+安装完成后,在命令行中执行\ ``git --version``\ 命令,应该能看到形似如下的版本号信息:
+
+::
+
+ git version 2.43.0
+
+4.2 配置SSH密钥对
+~~~~~~~~~~~~~~~~~
+
+假设我们即将从某个代码托管平台(例如前文提及的GitHub,国内的Gitee和Gitcode等)拉取(pull)代码。平台为保证托管于其上的“代码仓库”的安全,往往会要求拉取代码者提供身份验证信息,具体体现为要求各位在拉取时输入用户名密码等内容。若是有频繁拉取、推送(push)代码的需求,每一次操作都需要验证一次身份,岂不太费劲了?
+
+SSH密钥对可以帮助简化这个流程。我们在本地生成一个密钥对(包含一个公钥和一个私钥,若有兴趣可以网络搜索“非对称加密”深入了解),事先把公钥告诉代码托管平台。在推送/拉取代码时,Git将自动利用本地的私钥对这次操作进行“签名”,托管平台收到操作请求后,就可以利用这个签名和公钥进行验证,从而明确操作发起人的身份。由于这个过程无需人为干预,因此比不使用SSH密钥对的朴素办法(HTTPS)方便很多。
+
+在Ubuntu中,输入命令\ ``ssh-keygen``\ ,接下来如下操作:
+
+::
+
+ Generating public/private ed25519 key pair.
+ Enter file in which to save the key (/home/endericedragon/.ssh/id_ed25519):
+
+这是在询问存放密钥对的路径,我们保持默认即可,直接按回车:
+
+::
+
+ Created directory '/home/endericedragon/.ssh'.
+ Enter passphrase (empty for no passphrase):
+
+这是在询问保护密钥对的密码,留空即可(若不留空,则每次拉取推送代码时会要求输入这个密码,比较麻烦),直接按回车:
+
+::
+
+ Enter same passphrase again:
+
+这是在再次询问保护密钥对的密码,继续留空,按回车:
+
+::
+
+ Your identification has been saved in /home/endericedragon/.ssh/id_ed25519
+ Your public key has been saved in /home/endericedragon/.ssh/id_ed25519.pub
+ The key fingerprint is:
+ SHA256:yyzoDJHPqBPQsIPcwOO9lu1tb0q6MN2Ow2xwKAMXDM4 endericedragon@WOOKING-X16
+ The key's randomart image is:
+ +--[ED25519 256]--+
+ /* -- snip -- */
+ +----[SHA256]-----+
+
+此时,密钥对已经成功生成啦。若想查看生成的公钥长啥样,请在命令行中输入:
+
+::
+
+ cat ~/.ssh/id_rsa.pub
+
+该命令会读取\ ``~/.ssh/id_rsa.pub``\ 文件的内容并将内容展示到命令行中。笔者的公钥的片段如下:
+
+::
+
+ ssh-ed25519 AAAA...+RkM2G endericedragon@WOOKING-X16
+
+最后一步,将生成的公钥告诉托管平台。本节以国内的代码托管平台Gitee进行演示,其他平台的过程大同小异。注册Gitee账号之后,单击右上角头像,选择“账号设置”,在新打开的设置页面的左侧找到“SSH公钥”一栏,在第二个框中输入我们生成的公钥,第一个公钥标题框将会自动填充上内容(若不满意标题,也可以自行修改)。最后点击确定,Gitee可能会要求输入当前Gitee账户的密码,完成后新公钥将会出现在输入框上方的列表中。
+
+.. figure:: ./将公钥提交到代码托管平台.png
+ :alt: 将公钥提交到代码托管平台
+
+ 将公钥提交到代码托管平台
+
+至此,我们已做好万全准备,进行代码拉取了。
+
+4.3 将rCore拉取至本地
+~~~~~~~~~~~~~~~~~~~~~
+
+由于GitHub在国内访问并不稳定,故想要方便地从GitHub上拉取(pull)代码,需要进行一些曲线救国的手段,例如将代码仓库导入到国内的代码托管平台上。此处仍以Gitee作为演示对象,其他托管平台的操作亦大同小异。
+
+首先访问\ `rCore的代码仓库 `__\ ,获取其拉取链接。考虑到访问GitHub可能有困难,笔者将其拉取链接放于此处,供各位取用:
+
+::
+
+ https://github.com/rcore-os/rCore-Tutorial-v3.git
+
+接着访问Gitee,在右上角头像处打开下拉菜单,找到如下图所示的选项,单击进入。
+
+.. figure:: ./导入GitHub仓库到Gitee.png
+ :alt: 导入GitHub仓库到Gitee
+
+ 导入GitHub仓库到Gitee
+
+接下来,在新打开的页面的“Git仓库URL”中输入rCore的拉取链接,接下来的内容都将被自动填好,点击页面下方的“确定”,静候导入完成。
+
+.. figure:: ./填写待导入仓库的信息.png
+ :alt: 填写待导入仓库的信息
+
+ 填写待导入仓库的信息
+
+导入完成后,在Gitee首页的左上角,点击“仓库”即可看到刚刚导入的rCore代码仓库了。
+
+.. figure:: ./查看已导入的Gitee仓库.png
+ :alt: 查看已导入的Gitee仓库
+
+ 查看已导入的Gitee仓库
+
+点击进入仓库,再点按右上角的\ **橙色“克隆/下载”**\ 按钮弹出如下界面,直接复制图中高亮的命令到Ubuntu命令行中执行即可。
+
+.. figure:: ./克隆已导入的Gitee仓库.png
+ :alt: 克隆已导入的Gitee仓库
+
+ 克隆已导入的Gitee仓库
+
+4.4 运行rCore
+~~~~~~~~~~~~~
+
+终于要开启rCore之旅的处女航啦!在命令行中,进入刚才被\ ``git clone``\ 到本地的rCore代码仓库:
+
+.. code:: bash
+
+ cd rCore-Tutorial-v3/
+
+输入\ ``ls``\ 指令,可以看到在\ ``rCore-Tutorial-v3``\ 文件夹(目录)下有很多东西:
+
+.. code:: bash
+
+ ls
+ # 输出如下:
+ Cargo.toml.txt LICENSE README.md dev-env-info.md easy-fs-fuse rust-toolchain user
+ Dockerfile Makefile bootloader easy-fs os third-party
+
+Git的代码仓库可以有很多个分支,每个分支都可以拥有各自不同的代码。本节将使用\ ``ch1``\ 分支中的rCore代码,该代码实现了一个向终端输出字符“Hello,
+world!”的简单操作系统。首先切换到这个分支:
+
+.. code:: bash
+
+ git switch ch1
+
+看到如下提示,说明切换成功:
+
+::
+
+ branch 'ch1' set up to track 'origin/ch1'.
+ Switched to a new branch 'ch1'
+
+继续进入\ ``os``\ 目录,并运行rCore:
+
+.. code:: bash
+
+ cd os
+ make run
+
+静候编译进度条走完。这个过程包括安装rCore指定版本的Rust工具链,为这个工具链配置必要的组件等,因此会花费比较多的时间。如果因为网络问题导致进度缓慢,目前除科学上网以外,尚无很好的解决方案,可以多试几次。最终看到如下的输出:
+
+::
+
+ [rustsbi] RustSBI version 0.3.1, adapting to RISC-V SBI v1.0.0
+ .______ __ __ _______.___________. _______..______ __
+ | _ \ | | | | / | | / || _ \ | |
+ | |_) | | | | | | (----`---| |----`| (----`| |_) || |
+ | / | | | | \ \ | | \ \ | _ < | |
+ | |\ \----.| `--' |.----) | | | .----) | | |_) || |
+ | _| `._____| \______/ |_______/ |__| |_______/ |______/ |__|
+ [rustsbi] Implementation : RustSBI-QEMU Version 0.2.0-alpha.2
+ [rustsbi] Platform Name : riscv-virtio,qemu
+ [rustsbi] Platform SMP : 1
+ [rustsbi] Platform Memory : 0x80000000..0x88000000
+ [rustsbi] Boot HART : 0
+ [rustsbi] Device Tree Region : 0x87e00000..0x87e010f6
+ [rustsbi] Firmware Address : 0x80000000
+ [rustsbi] Supervisor Address : 0x80200000
+ [rustsbi] pmp01: 0x00000000..0x80000000 (-wr)
+ [rustsbi] pmp02: 0x80000000..0x80200000 (---)
+ [rustsbi] pmp03: 0x80200000..0x88000000 (xwr)
+ [rustsbi] pmp04: 0x88000000..0x00000000 (-wr)
+ [kernel] Hello, world!
+
+恭喜各位,rCore已经成功运行在你们的电脑上了!
+
+5. 使用VS Code进行舒适开发
+--------------------------
+
+截至目前,我们连一行rCore的代码都还没见着呢!是时候用合适的代码编辑器探索rCore的代码啦!
+
+首先,在Windows上安装\ `VS
+Code `__\ 。在VS
+Code中,安装中文插件“Chinese Simplified”和Rust插件“Rust Analyzer”。
+
+其次,操控Ubuntu终端进入\ ``~/rCore-Tutorial-v3/os``\ 目录,然后输入:
+
+.. code:: bash
+
+ code .
+
+终端会提示正在安装VS Code Server for Linux x64,待安装完成后,VS
+Code将会启动,可以浏览 & 编辑代码啦。
\ No newline at end of file
diff --git a/source/chapter0/index.rst b/source/chapter0/index.rst
index a076e954..bbaa5a39 100644
--- a/source/chapter0/index.rst
+++ b/source/chapter0/index.rst
@@ -14,5 +14,6 @@
5setup-devel-env
7exercise
8answer
+ 9wsl-quick-setup
.. chyyuu 注:可以把“6hardware”k210相关的内容放到某个附录中 ???
\ No newline at end of file
diff --git "a/source/chapter0/\345\205\213\351\232\206\345\267\262\345\257\274\345\205\245\347\232\204Gitee\344\273\223\345\272\223.png" "b/source/chapter0/\345\205\213\351\232\206\345\267\262\345\257\274\345\205\245\347\232\204Gitee\344\273\223\345\272\223.png"
new file mode 100644
index 00000000..b702a8ca
Binary files /dev/null and "b/source/chapter0/\345\205\213\351\232\206\345\267\262\345\257\274\345\205\245\347\232\204Gitee\344\273\223\345\272\223.png" differ
diff --git "a/source/chapter0/\345\241\253\345\206\231\345\276\205\345\257\274\345\205\245\344\273\223\345\272\223\347\232\204\344\277\241\346\201\257.png" "b/source/chapter0/\345\241\253\345\206\231\345\276\205\345\257\274\345\205\245\344\273\223\345\272\223\347\232\204\344\277\241\346\201\257.png"
new file mode 100644
index 00000000..e2535430
Binary files /dev/null and "b/source/chapter0/\345\241\253\345\206\231\345\276\205\345\257\274\345\205\245\344\273\223\345\272\223\347\232\204\344\277\241\346\201\257.png" differ
diff --git "a/source/chapter0/\345\257\274\345\205\245GitHub\344\273\223\345\272\223\345\210\260Gitee.png" "b/source/chapter0/\345\257\274\345\205\245GitHub\344\273\223\345\272\223\345\210\260Gitee.png"
new file mode 100644
index 00000000..399fc47f
Binary files /dev/null and "b/source/chapter0/\345\257\274\345\205\245GitHub\344\273\223\345\272\223\345\210\260Gitee.png" differ
diff --git "a/source/chapter0/\345\260\206\345\205\254\351\222\245\346\217\220\344\272\244\345\210\260\344\273\243\347\240\201\346\211\230\347\256\241\345\271\263\345\217\260.png" "b/source/chapter0/\345\260\206\345\205\254\351\222\245\346\217\220\344\272\244\345\210\260\344\273\243\347\240\201\346\211\230\347\256\241\345\271\263\345\217\260.png"
new file mode 100644
index 00000000..f8721519
Binary files /dev/null and "b/source/chapter0/\345\260\206\345\205\254\351\222\245\346\217\220\344\272\244\345\210\260\344\273\243\347\240\201\346\211\230\347\256\241\345\271\263\345\217\260.png" differ
diff --git "a/source/chapter0/\346\237\245\347\234\213\345\267\262\345\257\274\345\205\245\347\232\204Gitee\344\273\223\345\272\223.png" "b/source/chapter0/\346\237\245\347\234\213\345\267\262\345\257\274\345\205\245\347\232\204Gitee\344\273\223\345\272\223.png"
new file mode 100644
index 00000000..da410845
Binary files /dev/null and "b/source/chapter0/\346\237\245\347\234\213\345\267\262\345\257\274\345\205\245\347\232\204Gitee\344\273\223\345\272\223.png" differ