前言:搞环境搞了三个晚上,解决了llvm的问题,成功下载“一生一芯”框架代码即南大计算机PA,成功编译运行。
PA:(Programming Assignment)。是一个小型项目,来自于南京大学计算机科学与技术系《计算机系统基础课程》,指导学生实现一个经过简化但功能完备的x86/mips32/riscv32(64)模拟器NEMU(NJU EMUlator), 最终在NEMU上运行游戏"仙剑奇侠传", 来让学生探究"程序在计算机上运行"的基本原理。
PA包括一个准备实验(配置实验环境)以及5部分连贯的实验内容:
官方教程中说推荐Ubuntu 21.04,实际上并不适合我,我最终选择了Ubuntu 20.04,并有如下几点原因:
记录下安装成功这一美好的时刻-
安装步骤:VMware安装VMware Tools(ubuntu 20.04)
系统安装完成之后,可以看到Ubuntu 20.04系统界面没有全屏展示,虚拟机和物理机之间也不能相互拖拽、粘贴、复制内容,下面就需要安装VMware工具,来实现上述功能。
目前VMware工具存在两种:传统的VMware Tools和开源的open-vm-tools。VMware Tools经常会出现兼容性不好,系统之间复制文件失灵,并且安装时提示建议使用open-vm-tools,于是放弃vmware-tools的安装,尝试使用open-vm-tools
open-vm-tools 是 VMware Tools 的开源实施,由一套虚拟化实用程序组成,这些程序可增强虚拟机在 VMware 环境中的功能,使管理更加有效。open-vm-tools 的主要目的是使操作系统供应商及/或社区以及虚拟设备供应商将 VMware Tools 绑定到其产品发布中。从Ubuntu14.04开始open-vm-tools 代替了官方 VMware Tools。
需要注意的是
tar -zxvf VMwareTools-10.3.22-15902021.tar.gz
然后就可以复制粘贴啦
u20.04如何与windows10设置共享文件夹
Windows与Ubuntu主机与虚拟设备直接复制粘贴得先开启VMwareTools。
这里有个坑爹的问题,就是我想复制粘贴,得安装VMware工具,但是因为没有换源所以无法下载,换源需要打很多字,所以需要复制粘贴。我的解决办法是,写好这些东西,直接通过共享文件夹在虚拟机里面打开
Ubuntu默认使用的是Ubuntu官方的软件源,远在国外,速度很慢,可以换成国内源。
参考链接:ubuntu20.04 国内软件源更新
sudo apt install vim
然后再配置一下
# Prerequisites:
sudo apt-get install git perl python3 make autoconf g++ flex bison ccache
sudo apt-get install libgoogle-perftools-dev numactl perl-doc
sudo apt-get install libfl2 # Ubuntu only (ignore if gives error)
sudo apt-get install libfl-dev # Ubuntu only (ignore if gives error)
sudo apt-get install zlibc zlib1g zlib1g-dev # Ubuntu only (ignore if gives error)
git clone https://github.com/verilator/verilator # Only first time
# Every time you need to build:
unsetenv VERILATOR_ROOT # For csh; ignore error if on bash
unset VERILATOR_ROOT # For bash
cd verilator
git pull # Make sure git repository is up-to-date
git tag # See what versions exist
#git checkout master # Use development branch (e.g. recent bug fixes)
#git checkout stable # Use most recent stable release
git checkout v4.210 # Switch to specified release version
autoconf # Create ./configure script
./configure # Configure and create Makefile
make -j `nproc` # Build Verilator itself (if error, try just 'make')
sudo make install
参考链接:Unbuntu21.04安装Verilator --4.210 、 EDA开源仿真工具verilator入门1:安装和测试
成功!
cd ~
sudo su
apt-get install build-essential # build-essential packages, include binary utilities, gcc, make, and so on
apt-get install man # on-line reference manual
apt-get install gcc-doc # on-line reference manual for gcc
apt-get install gdb # GNU debugger
apt-get install git # revision control system
apt-get install libreadline-dev # a library used later
apt-get install libsdl2-dev # a library used later
####### apt-get install llvm
apt-get install llvm-11 # llvm project, which contains libraries used later
这里有个坑,官方讲解文档里,如果直接apt-get install llvm 会下载成10.0.0而本实验需要llvm-11。官方给的方法是,还是建议直接下成llvm-11。请见下节讲解。
参考链接:在github上添加SSH key 、Github配置ssh key的步骤(大白话+包含原理解释)
可以先浏览一下子源工程:
配置好SSHkey后,就可以git clone了。
为了方便,我选择在根目录新建一个ysyx的文件夹用于存放一生一芯相关的东西。
操作:
mkdir ysyx
cd ysyx
git clone -b ysyx2204 git@github.com:OSCPU/ysyx-workbench.git
cd ysyx-workbench
git config --global user.name "22050047-Ren Jianjie" # your student ID and name
git config --global user.email "jiemsd@outlook.com" # your email
git config --global core.editor vim # your favorite editor
git config --global color.ui true
ysyx-workbench/Makefile
中的学号和姓名时, 请使用"一生一芯"的学号和真实姓名git branch -m master
bash init.sh nemu
bash init.sh abstract-machine
source ~/.bashrc
cd ~/ysyx/ysyx-workbench/nemu
make menuconfig
点击“右”键,选择EXIT然后YES
然后编译
make
这里会出现 #error Please use LLVM with major version >= 11
解决问题参考链接:
这个文档相当有迷惑性,我一度以为是要把这些全部都复制粘贴到/nemu/src/utils/filelist.mk里面。ps,请原谅我linux并不熟练的操作。
nano ~/ysyx/ysyx-workbench/nemu/src/utils/filelist.mk
# 这里是编写filelist.mk
# 首先得安装高版本的:sudo apt-get install llvm-11-dev
直接把文档里的llvm-config全部换成llvm-config-11
编写前
编写后
然后直接make,编译成功啦!!没有llvm报错
cd ~/ysyx/ysyx-workbench/nemu
make run
#这里是gdb调试
make gdb
#如果想退出,就输入q再回车
编译成功后,源代码的变化将通过git. 类型
git log
至此,利用了VMware安装了Ubuntu20.04成功;完成了 “一生一芯”实验环境配置;获得了PA的源代码;解决llvm版本问题!