共计 2270 个字符,预计需要花费 6 分钟才能阅读完成。
理解到这个南大的这个试验不错,记录一下本人的进度,也给后来者一些参考。
1. 相干材料
PA 我的项目官网地址:https://nju-projectn.github.io/ics-pa-gitbook/ics2010/
tmux 应用办法:http://www.ruanyifeng.com/blog/2019/10/tmux.html
vim 学习游戏:
http://vim-adventures.com/
Linux 教程:
https://nju-projectn.github.io/ics-pa-gitbook/ics2019/linux.html#%E6%8E%A2%E7%B4%A2%E5%91%BD%E4%BB%A4%E8%A1%8C
Linux26 个命令:https://linux.cn/article-6160-1.html
man 入门教程:https://nju-projectn.github.io/ics-pa-gitbook/ics2019/man.html
GDB 入门教程:https://www.cprogramming.com/gdb.html
作为一个对 linux 简直没有接触的人来说,这一部分实现须要破费的工夫比拟多,对于官网给出的手册尽量一步一步实现,不要跳过,不然前面还要掉过头来学。
2. 遇到的问题解决办法
(1)环境问题:官网举荐在真机上安装 debain, 作为一个 linux 菜鸟,没有勇气尝试,我抉择了 VMware Workstation 和 Ubuntu20.04。倡议能够抉择版本略微低一些的 Ubuntu 版本,如 Ubuntu18.04。因为 20.04 这个版本比拟大,对性能要求高一些,开始调配了 2GB 的内存和 20GB 的虚构硬盘,有些卡顿。
(2)官网文档在 Getting Source Code for PAs 这一步中,提到了 ubuntu18.04 可能会遇到的 kvm 编译谬误并给出了解决方案。
在我的 Ubuntu20.04 零碎中也遇到了这一问题,在尝试了官网给出的解决办法后,问题依然存在。
谬误提醒如下:
Building x86-nemu-interpreter
Makefile:51: *** invalid DIFF. Supported: qemu kvm nemu. Stop.
依据给出的谬误提示信息,查看 Makefile 文件 51 的内容发现,发现是因为一个 else 条件中抛出了一个谬误。
37 ifeq ($(DIFF),qemu)
38 DIFF_REF_PATH = $(NEMU_HOME)/tools/qemu-diff
39 DIFF_REF_SO = $(DIFF_REF_PATH)/build/$(ISA)-qemu-so
40 CFLAGS += -D__DIFF_REF_QEMU__
41 else ifeq ($(DIFF),kvm)
42 DIFF_REF_PATH = $(NEMU_HOME)/tools/kvm-diff
43 DIFF_REF_SO = $(DIFF_REF_PATH)/build/$(ISA)-kvm-so
44 CFLAGS += -D__DIFF_REF_KVM__
45 else ifeq ($(DIFF),nemu)
46 DIFF_REF_PATH = $(NEMU_HOME)
47 DIFF_REF_SO = $(DIFF_REF_PATH)/build/$(ISA)-nemu-interpreter-so
48 CFLAGS += -D__DIFF_REF_NEMU__
49 MKFLAGS = ISA=$(ISA) SHARE=1 ENGINE=interpreter
50 else
51 $(error invalid DIFF. Supported: qemu kvm nemu)
52 endif
再通过查看之前的代码,发现 ifeq($(DIFF),qemu) 中的条件总会成立,因而前面的 else if 和 else 应该没有必要,所以就简略粗犷,将前面的 else if 和 else 都正文掉。。
批改如下:
37 #ifeq ($(DIFF),qemu)
38 DIFF_REF_PATH = $(NEMU_HOME)/tools/qemu-diff
39 DIFF_REF_SO = $(DIFF_REF_PATH)/build/$(ISA)-qemu-so
40 CFLAGS += -D__DIFF_REF_QEMU__
41 #else ifeq ($(DIFF),kvm)
42 #DIFF_REF_PATH = $(NEMU_HOME)/tools/kvm-diff
43 #DIFF_REF_SO = $(DIFF_REF_PATH)/build/$(ISA)-kvm-so
44 #CFLAGS += -D__DIFF_REF_KVM__
45 #else ifeq ($(DIFF),nemu)
46 #DIFF_REF_PATH = $(NEMU_HOME)
47 #DIFF_REF_SO = $(DIFF_REF_PATH)/build/$(ISA)-nemu-interpreter-so
48 #CFLAGS += -D__DIFF_REF_NEMU__
49 #MKFLAGS = ISA=$(ISA) SHARE=1 ENGINE=interpreter
50 #else
51 #$(error invalid DIFF. Supported: qemu kvm nemu)
52 #endif
3. 总结
(1)作为 Linux 菜鸟,这一部分比拟费时,然而播种很多,尤其是相熟了 vim 的操作之后,vim 编辑器之神的名称名不副实。
(2)STFW,STFM,RTFSC。集体搜寻的能力很重要,读源码的能力也很重要。