南京大学 计算机系统基础 课程实验链接 https://nju-projectn.github.io/ics-pa-gitbook/ics2021
PA0 - 世界诞生的前夜: 开发环境配置
Getting Source Code for PAs
Getting Source CodeGit下载作业源码
一开始在windows的linux子系统中尝试完成,但是,第一,环境就很难配置,有几个软件包很难安装,这是wsl的问题;第二,下载GitHub项目,下载极慢,这是Linux常见的问题。
针对第一个问题,我放弃了WSL,使用自己的闲置的主机,之前已经安装了Ubuntu虚拟机。并对其操作一番,尝试在上面完成作业。
首先,对其进行了内网穿透(外网SSH连接校园网服务器记录),可以通过SSH访问。其次,apt换源,加快下载软件包速度。最后,给Ubuntu终端添加代理,使其能稳定下载GitHub项目。
Git的基本操作
Compiling and Running NEMU
执行make menuconfig会遇到以下错误
ouc@dl [20:29:06] {~/work/ics2021/nemu}-->$ make menuconfig/home/ouc/work/ics2021/nemu/scripts/config.mk:5: Warning: .config does not exists!/home/ouc/work/ics2021/nemu/scripts/config.mk:6: To build the project, first run 'make menuconfig'.+ YACC build/parser.tab.hmake[1]: bison: Command not foundmake[1]: *** [Makefile:27: build/parser.tab.h] Error 127make: *** [/home/ouc/work/ics2021/nemu/scripts/config.mk:24: /home/ouc/work/ics2021/nemu/tools/kconfig/build/mconf] Error 2ouc@dl [20:46:35] {~/work/ics2021/nemu}-->$ make menuconfig/home/ouc/work/ics2021/nemu/scripts/config.mk:5: Warning: .config does not exists!/home/ouc/work/ics2021/nemu/scripts/config.mk:6: To build the project, first run 'make menuconfig'.+ YACC build/parser.tab.h+ LEX build/lexer.lex.cmake[1]: flex: Command not foundmake[1]: *** [Makefile:23: build/lexer.lex.c] Error 127make: *** [/home/ouc/work/ics2021/nemu/scripts/config.mk:24: /home/ouc/work/ics2021/nemu/tools/kconfig/build/mconf] Error 2
上面有两个命令找不到,修好第一个才会出现第二个,我们需要分别安装bison和flex包
sudo apt install bisonsudo apt install flex
llvm的版本问题
之后执行make clean和make run,遇到了一个llvm的版本问题。
ouc@dl [21:16:21] {~/work/ics2021/nemu}-->$ make run+ CXX src/utils/disasm.ccsrc/utils/disasm.cc: In function ‘void init_disasm(const char*)’:src/utils/disasm.cc:55:8: error: ‘class llvm::MCInstPrinter’ has no member named ‘setPrintBranchImmAsAddress’55 | gIP->setPrintBranchImmAsAddress(true);| ^~~~~~~~~~~~~~~~~~~~~~~~~~make: *** [/home/ouc/work/ics2021/nemu/scripts/build.mk:40: /home/ouc/work/ics2021/nemu/build/obj-riscv32-nemu-interpreter/src/utils/disasm.o] Error 1
sudo apt autoremove llvm-10sudo apt install llvm-12cd /usr/binsudo ln -s /usr/lib/llvm-12/bin/llvm-config llvm-config
接下来顺利遇到到提示中的问题
ouc@dl [21:26:27] {~/work/ics2021/nemu}-->$ make cleanrm -rf /home/ouc/work/ics2021/nemu/buildouc@dl [21:26:33] {~/work/ics2021/nemu}-->$ make run+ CC src/nemu-main.c+ CC src/isa/riscv32/system/intr.c+ CC src/isa/riscv32/system/mmu.c+ CC src/isa/riscv32/difftest/dut.c+ CC src/isa/riscv32/reg.c+ CC src/isa/riscv32/logo.c+ CC src/isa/riscv32/init.c+ CC src/isa/riscv32/instr/decode.c+ CC src/device/io/mmio.c+ CC src/device/io/port-io.c+ CC src/device/io/map.c+ CC src/cpu/cpu-exec.c+ CC src/cpu/difftest/dut.c+ CC src/monitor/sdb/watchpoint.c+ CC src/monitor/sdb/sdb.c+ CC src/monitor/sdb/expr.c+ CC src/monitor/monitor.c+ CC src/utils/timer.c+ CC src/utils/log.c+ CC src/utils/rand.c+ CC src/utils/state.c+ CC src/memory/vaddr.c+ CC src/memory/paddr.c+ CC src/engine/interpreter/init.c+ CC src/engine/interpreter/hostcall.c+ CXX src/utils/disasm.cc+ LD /home/ouc/work/ics2021/nemu/build/riscv32-nemu-interpreter/home/ouc/work/ics2021/nemu/build/riscv32-nemu-interpreter --log=/home/ouc/work/ics2021/nemu/build/nemu-log.txt[src/utils/log.c:13 init_log] Log is written to /home/ouc/work/ics2021/nemu/build/nemu-log.txt[src/memory/paddr.c:36 init_mem] physical memory area [0x80000000, 0x88000000][src/monitor/monitor.c:36 load_img] No image is given. Use the default build-in image.[src/monitor/monitor.c:13 welcome] Trace: ON[src/monitor/monitor.c:14 welcome] If trace is enabled, a log file will be generated to record the trace. This may lead to a large log file. If it is not necessary, you can disable it in menuconfig[src/monitor/monitor.c:17 welcome] Build time: 21:26:37, Mar 11 2022Welcome to riscv32-NEMU!For help, type "help"[src/monitor/monitor.c:20 welcome] Exercise: Please remove me in the source code and compile NEMU again.riscv32-nemu-interpreter: src/monitor/monitor.c:21: welcome: Assertion `0' failed.make: *** [/home/ouc/work/ics2021/nemu/scripts/native.mk:23: run] Aborted (core dumped)
