<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>uCore on cyp0633&#39;s Blog</title>
        <link>https://cyp0633.com/tags/ucore/</link>
        <description>Recent content in uCore on cyp0633&#39;s Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>cyp0633</copyright><atom:link href="https://cyp0633.com/tags/ucore/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>一些让 uCore 更轻松的小技巧</title>
        <link>https://cyp0633.com/post/ucore-tricks/</link>
        <pubDate>Sat, 04 Jun 2022 00:00:00 +0000</pubDate>
        
        <guid>https://cyp0633.com/post/ucore-tricks/</guid>
        <description>&lt;p&gt;uCore实验本身设计得还不错，但却很容易在 “没用的事情” 上浪费大把的时间。有一些小技巧，虽然不能帮你理解uCore，但能够极大地提升实验体验。&lt;/p&gt;
&lt;h2 id=&#34;使用版本控制&#34;&gt;使用版本控制
&lt;/h2&gt;&lt;p&gt;显然版本控制一定要放在最前面。鉴于主要用的是Git，这里就说一些需要会的Git知识或者操作。&lt;/p&gt;
&lt;p&gt;首先uCore的源代码就在GitHub上，好巧不巧main分支是rCore，要做uCore得切换到master分支。&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/%22Github%22&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;GitHub&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/chyyuu/os_kernel_lab&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;chyyuu/os_kernel_lab&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Commit / 提交：相当于一个快照，可以随时恢复到你commit的时间节点。每个练习commit一下，就能保留状态了。如果遇到问题，可以随时revert或者checkout，可以免于找。&lt;/li&gt;
&lt;li&gt;Branch / 分支：不同的分支可以用于维持不同的开发进度。有些时候不确定代码是否合对了，或者Challenge的代码不想合入主分支，就新建一个分支。&lt;/li&gt;
&lt;li&gt;Merge / 合并和分支的概念是成对出现的，就是让不同分支的进度同步起来。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;vs-code&#34;&gt;VS Code
&lt;/h2&gt;&lt;p&gt;放弃Vim、Eclipse和Nano吧，VS Code对uCore来说再适合不过了。&lt;/p&gt;
&lt;h3 id=&#34;使用vs-codegdb调试ucore&#34;&gt;使用VS Code+GDB调试uCore
&lt;/h3&gt;&lt;p&gt;VS Code自带的调试工具能在GDB等调试器的基础上加入可视化断点、自动变量查看等有用功能。&lt;/p&gt;
&lt;p&gt;首先，需要在Makefile中加入如下的编译目标：&lt;/p&gt;
&lt;div class=&#34;codeblock&#34;&gt;
    &lt;header&gt;
        &lt;span class=&#34;codeblock-lang&#34;&gt;makefile&lt;/span&gt;
        &lt;button 
            class=&#34;codeblock-copy&#34;
            data-id=&#34;codeblock-id-0&#34;
            data-copied-text=&#34;已复制！&#34;
        &gt;
            复制代码
        &lt;/button&gt;
    &lt;/header&gt;
    &lt;code id=&#34;codeblock-id-0&#34; style=&#34;display:none;&#34;&gt;debug-nogdb: $(UCOREIMG)
    $(V)$(QEMU) -S -s -parallel stdio $(QEMUOPTS) -serial null&lt;/code&gt;&lt;div class=&#34;&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-makefile&#34; data-lang=&#34;makefile&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;debug-nogdb&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;UCOREIMG&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;V&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;QEMU&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; -S -s -parallel stdio &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;QEMUOPTS&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; -serial null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;做到后面有SWAP机制的练习时，记得在上面 &lt;code&gt;$(UCOREIMG)&lt;/code&gt; 后面再加上 &lt;code&gt;$(SWAPIMG)&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;然后请参考结尾处第一个参考文献，在此不再赘述。&lt;/p&gt;
&lt;h3 id=&#34;合并--比较工具&#34;&gt;合并 / 比较工具
&lt;/h3&gt;&lt;p&gt;Kdiff3等工具和VS Code自带比较并不能比较文件夹内的不同内容。但是，你可以下载 &lt;a class=&#34;link&#34; href=&#34;https://marketplace.visualstudio.com/items?itemName=moshfeu.compare-folders&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;这个插件&lt;/a&gt;，来选择两个目录导入。只需找到两个Lab之间的不同，就可以轻松合并你在前面实验中写下的代码。&lt;/p&gt;
&lt;h2 id=&#34;作弊的trick&#34;&gt;作弊的Trick
&lt;/h2&gt;&lt;p&gt;从Lab 5开始，很多人应该都经历过明明代码都对，&lt;code&gt;make grade&lt;/code&gt; 却不满分的问题。改评分脚本，算作弊吗？或许也不算吧，毕竟首先是它自己的代码不对。&lt;/p&gt;
&lt;p&gt;将输出检查禁用，从而达到全都满分的方法，就是将grade.sh中221-239行注释掉，也就是下面的部分。&lt;/p&gt;
&lt;div class=&#34;codeblock&#34;&gt;
    &lt;header&gt;
        &lt;span class=&#34;codeblock-lang&#34;&gt;sh&lt;/span&gt;
        &lt;button 
            class=&#34;codeblock-copy&#34;
            data-id=&#34;codeblock-id-1&#34;
            data-copied-text=&#34;已复制！&#34;
        &gt;
            复制代码
        &lt;/button&gt;
    &lt;/header&gt;
    &lt;code id=&#34;codeblock-id-1&#34; style=&#34;display:none;&#34;&gt;            if [$reg -ne 0]; then
                $grep &amp;#39;-E&amp;#39; &amp;#34;^$i\$&amp;#34; $qemu_out &amp;gt; /dev/null
            else
                $grep &amp;#39;-F&amp;#39; &amp;#34;$i&amp;#34; $qemu_out &amp;gt; /dev/null
            fi
            found=$(($? == 0))
            if [$found -eq $not]; then
                if [$found -eq 0]; then
                    msg=&amp;#34;!! error: missing&amp;#39;$i&amp;#39;&amp;#34;
                else
                    msg=&amp;#34;!! error: got unexpected line&amp;#39;$i&amp;#39;&amp;#34;
                fi
                okay=no
                if [-z&amp;#34;$error&amp;#34;]; then
                    error=&amp;#34;$msg&amp;#34;
                else
                    error=&amp;#34;$error\n$msg&amp;#34;
                fi
            fi&lt;/code&gt;&lt;div class=&#34;&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$reg&lt;/span&gt; -ne 0&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nv&#34;&gt;$grep&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;-E&amp;#39;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;^&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\$&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$qemu_out&lt;/span&gt; &amp;gt; /dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nv&#34;&gt;$grep&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;-F&amp;#39;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$qemu_out&lt;/span&gt; &amp;gt; /dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;found&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$?&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$found&lt;/span&gt; -eq &lt;span class=&#34;nv&#34;&gt;$not&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$found&lt;/span&gt; -eq 0&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nv&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;!! error: missing&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nv&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;!! error: got unexpected line&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nv&#34;&gt;okay&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-z&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$error&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nv&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$msg&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nv&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$error&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$msg&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;如果只想禁用某个检查，可以注释掉如下面的部分，如：&lt;/p&gt;
&lt;div class=&#34;codeblock&#34;&gt;
    &lt;header&gt;
        &lt;span class=&#34;codeblock-lang&#34;&gt;sh&lt;/span&gt;
        &lt;button 
            class=&#34;codeblock-copy&#34;
            data-id=&#34;codeblock-id-2&#34;
            data-copied-text=&#34;已复制！&#34;
        &gt;
            复制代码
        &lt;/button&gt;
    &lt;/header&gt;
    &lt;code id=&#34;codeblock-id-2&#34; style=&#34;display:none;&#34;&gt;run_test -prog &amp;#39;divzero&amp;#39; -check default_check                   
    #   - &amp;#39;kernel_execve: pid = ., name =&amp;#34;divzero&amp;#34;.*&amp;#39;             \
    #   - &amp;#39;trapframe at 0xc.......&amp;#39;                               \
    #     &amp;#39;trap 0x00000000 Divide error&amp;#39;                          \
    #   - &amp;#39;eip  0x008.....&amp;#39;                                     \
    #   - &amp;#39;esp  0xaff.....&amp;#39;                                     \
    #     &amp;#39;cs   0x----001b&amp;#39;                                     \
    #     &amp;#39;ss   0x----0023&amp;#39;                                     \
    # ! - &amp;#39;user panic at .*&amp;#39;&lt;/code&gt;&lt;div class=&#34;&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;run_test -prog &lt;span class=&#34;s1&#34;&gt;&amp;#39;divzero&amp;#39;&lt;/span&gt; -check default_check                   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#   - &amp;#39;kernel_execve: pid = ., name =&amp;#34;divzero&amp;#34;.*&amp;#39;             \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#   - &amp;#39;trapframe at 0xc.......&amp;#39;                               \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#     &amp;#39;trap 0x00000000 Divide error&amp;#39;                          \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#   - &amp;#39;eip  0x008.....&amp;#39;                                     \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#   - &amp;#39;esp  0xaff.....&amp;#39;                                     \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#     &amp;#39;cs   0x----001b&amp;#39;                                     \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#     &amp;#39;ss   0x----0023&amp;#39;                                     \&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# ! - &amp;#39;user panic at .*&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&#34;参考资料&#34;&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.xhyeax.com/2020/10/15/vscode-debug-ucore/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.xhyeax.com/2020/10/15/vscode-debug-ucore/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>THU uCore Lab 0 / 1 快速上手</title>
        <link>https://cyp0633.com/post/thu-ucore-lab-0-/-1-%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B/</link>
        <pubDate>Sun, 17 Apr 2022 00:00:00 +0000</pubDate>
        
        <guid>https://cyp0633.com/post/thu-ucore-lab-0-/-1-%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B/</guid>
        <description>&lt;p&gt;此系列并不是完整的实验指南，也不能替代实验指导书，而是意图是用我的经验，挑选一部分较好的文章，为时间不太充裕的读者节省一部分查找资料的时间。&lt;br&gt;
简而言之，a collection for jump start.&lt;/p&gt;
&lt;h2 id=&#34;系统环境&#34;&gt;系统环境
&lt;/h2&gt;&lt;p&gt;你需要一个64位的Linux，但不建议使用WSL，Make容易出现玄学错误。可以在 &lt;a class=&#34;link&#34; href=&#34;https://mirrors.tuna.tsinghua.edu.cn/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;清华镜像站&lt;/a&gt; 下载Ubuntu，下载后还可以换清华源。&lt;/p&gt;
&lt;p&gt;系统安装后还需要 &lt;a class=&#34;link&#34; href=&#34;http://ivo-wang.github.io/2019/04/18/%E6%80%8E%E6%A0%B7%E6%89%93%E5%BC%8064%E4%BD%8D-Ubuntu-%E7%9A%8432%E4%BD%8D%E6%94%AF%E6%8C%81%E5%8A%9F%E8%83%BD/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;添加 32 位支持&lt;/a&gt;、安装GCC Multilib、QEMU。&lt;/p&gt;
&lt;p&gt;uCore代码在 &lt;a class=&#34;link&#34; href=&#34;https://github.com/chyyuu/os_kernel_lab&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/chyyuu/os_kernel_lab&lt;/a&gt;，Git Clone下来之后使用 &lt;code&gt;git checkout master&lt;/code&gt; 切换分支，否则是rCore源代码。&lt;/p&gt;
&lt;p&gt;如果make qemu提示没有找到gnome-terminal，可以（1）安装gnome-terminal或（2）将makefile中的gnome-terminal改成你的终端名称。&lt;/p&gt;
&lt;h2 id=&#34;知识基础&#34;&gt;知识基础
&lt;/h2&gt;&lt;p&gt;请不要忘了 &lt;a class=&#34;link&#34; href=&#34;https://chyyuu.gitbooks.io/ucore_os_docs/content/lab1&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;官方文档&lt;/a&gt;“练习” 之外的内容，也很有用。&lt;/p&gt;
&lt;h3 id=&#34;练习1&#34;&gt;练习1
&lt;/h3&gt;&lt;p&gt;什么是Makefile：&lt;a class=&#34;link&#34; href=&#34;https://seisman.github.io/how-to-write-makefile/introduction.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://seisman.github.io/how-to-write-makefile/introduction.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;查找命令和参数的用法：在Shell中运行 &lt;code&gt;man&lt;/code&gt;，或者更容易查找的 &lt;a class=&#34;link&#34; href=&#34;http://manpages.ubuntu.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ubuntu Manpage&lt;/a&gt; 网站&lt;/p&gt;
&lt;p&gt;什么是主引导记录 / MBR/0x55aa是干什么的：&lt;a class=&#34;link&#34; href=&#34;https://daemon369.github.io/linux/2013/08/03/master-boot-record&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://daemon369.github.io/linux/2013/08/03/master-boot-record&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;GCC文档：&lt;a class=&#34;link&#34; href=&#34;https://gcc.gnu.org/onlinedocs/gcc-11.2.0/gcc/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://gcc.gnu.org/onlinedocs/gcc-11.2.0/gcc/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;练习2&#34;&gt;练习2
&lt;/h3&gt;&lt;p&gt;GDB远程调试：&lt;a class=&#34;link&#34; href=&#34;https://www.cnblogs.com/blogs-of-lxl/p/10462262.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.cnblogs.com/blogs-of-lxl/p/10462262.html&lt;/a&gt; 或使用vscode（没错，万能的vscode）：&lt;a class=&#34;link&#34; href=&#34;https://blog.xhyeax.com/2020/10/15/vscode-debug-ucore/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://blog.xhyeax.com/2020/10/15/vscode-debug-ucore/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;练习3&#34;&gt;练习3
&lt;/h3&gt;&lt;p&gt;A20总线：&lt;a class=&#34;link&#34; href=&#34;https://wiki.osdev.org/A20_Line&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://wiki.osdev.org/A20_Line&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;GDT：&lt;a class=&#34;link&#34; href=&#34;https://wiki.osdev.org/Global_Descriptor_Table&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://wiki.osdev.org/Global_Descriptor_Table&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;练习4&#34;&gt;练习4
&lt;/h3&gt;&lt;p&gt;这部分可以查看官方文档的 “ELF文件格式概述” 和“硬盘访问概述”部分。&lt;/p&gt;
&lt;h3 id=&#34;练习5&#34;&gt;练习5
&lt;/h3&gt;&lt;p&gt;看代码注释。&lt;/p&gt;
&lt;h3 id=&#34;练习6&#34;&gt;练习6
&lt;/h3&gt;&lt;p&gt;中断向量表：&lt;a class=&#34;link&#34; href=&#34;https://wiki.osdev.org/Interrupt_Descriptor_Table&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://wiki.osdev.org/Interrupt_Descriptor_Table&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;编程部分看代码注释。&lt;/p&gt;
&lt;h3 id=&#34;challenge&#34;&gt;Challenge
&lt;/h3&gt;&lt;p&gt;暂不包含，如果时间不充裕，不建议尝试Challenge。&lt;/p&gt;
&lt;h2 id=&#34;实验报告&#34;&gt;实验报告
&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://kiprey.github.io/2020/08/uCore-1/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://kiprey.github.io/2020/08/uCore-1/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://xr1s.me/2018/05/15/ucore-lab1-report&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://xr1s.me/2018/05/15/ucore-lab1-report&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.jianshu.com/p/2f95d38afa1d&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.jianshu.com/p/2f95d38afa1d&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://niebelungen-d.github.io/posts/ucore-lab-1/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://niebelungen-d.github.io/posts/ucore-lab-1/&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
