南大コンピューターシステム基礎実験ICs 2020、pa 0


この南大の実験がいいと知って、自分の進捗を記録して、後から来る人にも参考にしてください.
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 Linux 26コマンド:https://linux.cn/article-6160-1.htmlマン入門教程:https://nju-projectn.github.io/ics-pa-gitbook/ics2019/man.html GDB教程入門:https://www.cprogramming.com/gdb.htmlはリンクスにほとんど接触していない人にとって、この部分の完成には時間がかかります.公式に提供されたマニュアルはできるだけ一歩ずつ完成して、スキップしないようにします.2.遭遇した問題解決方法(1)環境問題:公式推奨は実機にdebainを設置し、linux初心者として、試してみる勇気がないので、VMware WorkstationとUbuntu 20.004を選択しました.Ubuntu 18.04など、やや低いバージョンのUbuntuバージョンを選択することができることを提案します.このバージョンは20.04が大きいので、性能に対する要求が高く、2 GBのメモリと20 GBの仮想ハードディスクの割り当てを開始しました.(2)公式文書は、Getting Source Code for PAsにおいて、uuntu 18.04が出会うかもしれないkvmコンパイルエラーを言及し、解決策を示した.私のUbuntu 20.04システムでもこの問題に遭遇しました.公式に与えられた解決方法を試した後、問題は依然として存在します.エラーメッセージは以下の通りです.
Building x86-nemu-interpreter
Makefile:51: *** invalid DIFF. Supported: qemu kvm nemu.  Stop.
image.pngは、与えられたエラーメッセージ情報に基づいて、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)、qeme)の中の条件が常に成立していますので、後の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.個人の検索能力はとても重要です.ソースを読む能力も重要です.