提交 1e6bc2f5 编写于 作者: Y Yifan Wu

Inherit last changes by applying patches

上级 bf0338a1
......@@ -27,6 +27,19 @@ lab2 中,我们实现了第一个系统调用 ``sys_write``,这使得我们
challenge: 支持多核,实现多个核运行用户程序。
.. _inherit-last-ch-changes:
.. note::
**如何快速继承上一章练习题的修改**
从这一章开始,在完成本章习题之前,首先要做的就是将上一章框架的修改继承到本章的框架代码。出于各种原因,实际上通过 ``git merge`` 并不是很方便,这里给出一种打 patch 的方法,希望能够有所帮助。
1. 切换到上一章的分支,通过 ``git log`` 找到你在此分支上的第一次 commit 的前一个 commit 的 ID ,复制其前 8 位,记作 ``base-commit`` 。假设分支上最新的一次 commit ID 是 ``last-commit`` 。
2. 确保你位于项目根目录 ``rCore-Tutorial-v3`` 下。通过 ``git diff <base-commit> <last-commit> > <patch-path>`` 即可在 ``patch-path`` 路径位置(比如 ``~/Desktop/chx.patch`` )生成一个描述你对于上一章分支进行的全部修改的一个补丁文件。打开看一下,它给出了每个被修改的文件中涉及了哪些块的修改,还附加了块前后的若干行代码。如果想更加灵活进行合并的话,可以通过 ``git format-patch <base-commit>`` 命令在当前目录下生成一组补丁,它会对于 ``base-commit`` 后面的每一次 commit 均按照顺序生成一个补丁。
3. 切换到本章分支,通过 ``git apply --reject <patch-path>`` 来将一个补丁打到当前章节上。它的大概原理是对于补丁中的每个被修改文件中的每个修改块,尝试通过块的前后若干行代码来定位它在当前分支上的位置并进行替换。有一些块可能无法匹配,此时会生成与这些块所在的文件同名的 ``*.rej`` 文件,描述了哪些块替换失败了。在项目根目录 ``rCore-Tutorial-v3`` 下,可以通过 ``find . -name *.rej`` 来找到所有相关的 ``*.rej`` 文件并手动完成替换。
4. 在处理完所有 ``*.rej`` 之后,将它们删除并 commit 一下。现在就可以开始本章的实验了。
实验检查
++++++++++++++++++++++++++++++
......
......@@ -53,9 +53,9 @@ rCore-Tutorial-Book 第三版
:doc:`/log`
项目/文档于 2021-03-09 最后一次更新,情况如下:
项目/文档于 2021-03-15 最后一次更新,情况如下:
- 将所有分支的 RustSBI 版本更新为 [81d53d8] 的 0.2.0-alpha.1 ,主要是在 Qemu 平台上支持非法指令的转发,目前可以正确处理带有非法指令的应用程序了。参考 ch2 分支上的测例 ``00hello_world.rs`` 。
- 增加了在做实验的时候打补丁继承上一章节修改的 :ref:`教程 <inherit-last-ch-changes>` 。
项目简介
......
更新日志
===============================
2021-03-15
-------------------------------
- 增加了在做实验的时候打补丁继承上一章节修改的 :ref:`教程 <inherit-last-ch-changes>` 。
2021-03-09
-------------------------------
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册