PA0实验环境搭建
PA0 实验
RTFM
STFW
RTFSC
准备工作
虚拟机的创建
首先去下载 VMware Workstation
(现在已经对个人开放了免费试用,可以从官网下载),然后打开软件,创建新的虚拟机,接下来按照图中给出的一步步设置
这里需要你选择你下载好的 Ubuntu 镜像(下载方法在这里)
随意设置,简单点能方便你后续输密码
放到一个剩余磁盘空间大于40GB的路径下,最好全英文
不要点完成!点击 自定义硬件
,将网络配置好
网络连接选择桥接模式,然后点击关闭、完成,结束虚拟机的创建
Ubuntu 安装
这一节有些内容是为了想要尝试安装物理机的同学们准备的,涉及到物理机的部分,会在
这里显示
下载Ubuntu和准备引导介质
下载 Ubuntu 22.04 LTS
的镜像文件,虚拟机安装的同学,请移步至这里
使用
BalenaEtcher
烧录至USB介质,然后重启电脑,选择从USB介质引导。此时会显示一个开机选项列表,选择Try or Install Ubuntu
并进入系统安装引导。
语言选择和安装类型选择
在左侧语言选择中选择语言,并在右侧选择 安装Ubuntu
。最好选择英文
进入安装类型选择的界面,选择 正常安装
或是 最小化安装
,根据自己需求进行选择,需要注意, 最小化安装
不会安装GUI。不建议选择 安装第三方软件和图形,WIFI驱动
。
安装方式
接下来选择安装方式,物理机推荐选择 手动分配磁盘空间
。虚拟机安装则可以选择默认。
实验中磁盘空间分配如下:
物理磁盘两块,512GB和256GB
512GB分配情况
分区类型:EFI System
大小:512MB
主分区
分区类型:swap
大小:16GB 和物理内存相等就行
主分区
分区类型:ext4
大小:77GB
主分区,挂载
/
分区类型:ext4
大小:418GB
逻辑分区,挂载
/home
256GB分配情况
分区类型:ext4
大小:256GB
逻辑分区,挂载
/usr
再次确认磁盘空间分配正确,准备安装。
选择时区、新建用户
在地图上选择上海附近,确定时区为上海。
在用户创建界面创建用户,并设置名字、设备名称、用户名和密码,密码是设备登入密码和sudo密码。
点击重启,等待安装完成。
物理机安装要记得重启后拔下安装介质
安装完成后的工作
-
配置root密码
sudo passwd
-
更新软件包
sudo apt-get update sudo apt-get upgrade
实验中并未更换镜像源,选择科学上网。
-
安装 PAs 实验需要的工具
sudo apt-get install build-essential # build-enssential packages, include binary utilities, gcc, make, etc. sudo apt-get install man # on-line reference manual sudo apt-get install gcc-doc # on-line reference manual for gcc sudo apt-get install gdb # GNU debugger sudo apt-get install git # revision control system sudo apt-get install libreadline-dev # library used for readline sudo apt-get install libsdl2-dev # support for media, keyboard, mouse, etc. sudo apt-get install llvm llvm-dev # llvm project, which contains libraries used later sudo apt-get install llvm-11 llvm-11-dev # only for Ubuntu 20.04
-
安装 vim ,配置
.vimrc
sudo apt-get install vim
在安装完成后可以对
~/.vimrc
配置,这会让 vim 更加好用vim ~/.vimrc
代码如下:
filetype plugin indent on # detect filetype and plugin indent rules syntax on # turn syntax on set ignorecase # search rules set smartcase set incsearch set number # show line numbers set cindent # could be closed, using indent rules for c language set tabstop=2 # set tab as 2 space set showmode # show command mode right now set shiftwidth=2 # set indent shift width as 2 space set scrolloff=10 # make sure the distance between scroll and top or bottom more than 10 lines set showmatch set hlsearch inoremap ( ()<ESC>i # replace ( as () inoremap [ []<ESC>i # replace [ as [] inoremap { {}<ESC>i # replace { as {} inoremap " ""<ESC>i # replace " as ""
在编辑完成
.vimrc
之后,sudo source ~/.vimrc
获取PA的代码
获取代码和初始化
git clone -b master git@github.com:OSCPU/ysyx-workbench.git
使用下面的代码配置 git
:
git config --global user.name "username"
git config --global user.email "useremail"
git config --global core.editor vim
git config --global color.ui true
初始化项目:
cd PATH_of_ysyx-workbench
git branch -m master
bash init.sh nemu
bash init.sh abstract-machine
如果使用的不是bash(如 zsh),请自己配置系统环境变量
vim ~/.zshrc
在最后添加如下内容
export NEMU_HOME=PATH_of_ysyx-workbench/nemu
export AM_HOME=PATH_of_ysyx-workbench/abstract-machine
source ~/.zshrc
然后尝试
echo $NEMU_HOME
echo $AM_HOME
cd $NEMU_HOME
cd $AM_HOME
Git 使用
使用 tracer-ysyx 追踪代码提交进度
git checkout -b tracer-ysyx
编译运行 NEMU
make menuconfig
这时编译会报错,请 STFW ,实验中并未遇到,无法提供解决办法,如果编译成功,请选择 Exit
Yes
来保存代码框架的配置,默认 riscv-32
。
make
编译成功后,进入 NEMU ,在终端输入
make run
你会遇到如下报错
[src/monitor/monitor.c:35 welcome] Exercise: Please remove me in the source code and compile NEMU again.
riscv32-nemu-interpreter: src/monitor/monitor.c:36: welcome: Assertion `0' failed.
尽管你可以在 PA1 中解决这个问题,但是你也可以选择现在到 PATH_of_ysyx-workbench/nemu/src/monitor/monitor.c
的35行注释掉这句 Log 和 assert 。
PA0 到此结束