南大计算机系统基础实验 ics2020,pa0

  • 时间:
  • 来源:互联网
  • 文章标签:

文章目录

  • **1.相关资料**
  • **2.遇到的问题解决办法**
    • (1)环境问题:
    • (2)官方文档
  • **3.总结**

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.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EuFjIEdi-1608691935150)(/img/bVcL6Dj)]
根据给出的错误提示信息,查看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。个人搜索的能力很重要,读源码的能力也很重要。

本文链接http://www.taodudu.cc/news/show-1944570.html