南京大学 计算机系统基础 课程实验链接 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会遇到以下错误

  1. ouc@dl [20:29:06] {~/work/ics2021/nemu}
  2. -->$ make menuconfig
  3. /home/ouc/work/ics2021/nemu/scripts/config.mk:5: Warning: .config does not exists!
  4. /home/ouc/work/ics2021/nemu/scripts/config.mk:6: To build the project, first run 'make menuconfig'.
  5. + YACC build/parser.tab.h
  6. make[1]: bison: Command not found
  7. make[1]: *** [Makefile:27: build/parser.tab.h] Error 127
  8. make: *** [/home/ouc/work/ics2021/nemu/scripts/config.mk:24: /home/ouc/work/ics2021/nemu/tools/kconfig/build/mconf] Error 2
  9. ouc@dl [20:46:35] {~/work/ics2021/nemu}
  10. -->$ make menuconfig
  11. /home/ouc/work/ics2021/nemu/scripts/config.mk:5: Warning: .config does not exists!
  12. /home/ouc/work/ics2021/nemu/scripts/config.mk:6: To build the project, first run 'make menuconfig'.
  13. + YACC build/parser.tab.h
  14. + LEX build/lexer.lex.c
  15. make[1]: flex: Command not found
  16. make[1]: *** [Makefile:23: build/lexer.lex.c] Error 127
  17. make: *** [/home/ouc/work/ics2021/nemu/scripts/config.mk:24: /home/ouc/work/ics2021/nemu/tools/kconfig/build/mconf] Error 2

上面有两个命令找不到,修好第一个才会出现第二个,我们需要分别安装bison和flex包

  1. sudo apt install bison
  2. sudo apt install flex

修复后会有一个的菜单项弹出,很有年代感。
image.png

llvm的版本问题

之后执行make clean和make run,遇到了一个llvm的版本问题。

  1. ouc@dl [21:16:21] {~/work/ics2021/nemu}
  2. -->$ make run
  3. + CXX src/utils/disasm.cc
  4. src/utils/disasm.cc: In function void init_disasm(const char*)’:
  5. src/utils/disasm.cc:55:8: error: class llvm::MCInstPrinter has no member named setPrintBranchImmAsAddress
  6. 55 | gIP->setPrintBranchImmAsAddress(true);
  7. | ^~~~~~~~~~~~~~~~~~~~~~~~~~
  8. 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

参考:https://stackoverflow.com/questions/70573756/class-llvmmcinstprinter-has-no-member-named-setprintbranchimmasaddress

  1. sudo apt autoremove llvm-10
  2. sudo apt install llvm-12
  3. cd /usr/bin
  4. sudo ln -s /usr/lib/llvm-12/bin/llvm-config llvm-config

接下来顺利遇到到提示中的问题

  1. ouc@dl [21:26:27] {~/work/ics2021/nemu}
  2. -->$ make clean
  3. rm -rf /home/ouc/work/ics2021/nemu/build
  4. ouc@dl [21:26:33] {~/work/ics2021/nemu}
  5. -->$ make run
  6. + CC src/nemu-main.c
  7. + CC src/isa/riscv32/system/intr.c
  8. + CC src/isa/riscv32/system/mmu.c
  9. + CC src/isa/riscv32/difftest/dut.c
  10. + CC src/isa/riscv32/reg.c
  11. + CC src/isa/riscv32/logo.c
  12. + CC src/isa/riscv32/init.c
  13. + CC src/isa/riscv32/instr/decode.c
  14. + CC src/device/io/mmio.c
  15. + CC src/device/io/port-io.c
  16. + CC src/device/io/map.c
  17. + CC src/cpu/cpu-exec.c
  18. + CC src/cpu/difftest/dut.c
  19. + CC src/monitor/sdb/watchpoint.c
  20. + CC src/monitor/sdb/sdb.c
  21. + CC src/monitor/sdb/expr.c
  22. + CC src/monitor/monitor.c
  23. + CC src/utils/timer.c
  24. + CC src/utils/log.c
  25. + CC src/utils/rand.c
  26. + CC src/utils/state.c
  27. + CC src/memory/vaddr.c
  28. + CC src/memory/paddr.c
  29. + CC src/engine/interpreter/init.c
  30. + CC src/engine/interpreter/hostcall.c
  31. + CXX src/utils/disasm.cc
  32. + LD /home/ouc/work/ics2021/nemu/build/riscv32-nemu-interpreter
  33. /home/ouc/work/ics2021/nemu/build/riscv32-nemu-interpreter --log=/home/ouc/work/ics2021/nemu/build/nemu-log.txt
  34. [src/utils/log.c:13 init_log] Log is written to /home/ouc/work/ics2021/nemu/build/nemu-log.txt
  35. [src/memory/paddr.c:36 init_mem] physical memory area [0x80000000, 0x88000000]
  36. [src/monitor/monitor.c:36 load_img] No image is given. Use the default build-in image.
  37. [src/monitor/monitor.c:13 welcome] Trace: ON
  38. [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
  39. [src/monitor/monitor.c:17 welcome] Build time: 21:26:37, Mar 11 2022
  40. Welcome to riscv32-NEMU!
  41. For help, type "help"
  42. [src/monitor/monitor.c:20 welcome] Exercise: Please remove me in the source code and compile NEMU again.
  43. riscv32-nemu-interpreter: src/monitor/monitor.c:21: welcome: Assertion `0' failed.
  44. make: *** [/home/ouc/work/ics2021/nemu/scripts/native.mk:23: run] Aborted (core dumped)

Development Tracing