请选择以下任一种方法进行编译和运行环境配置:
我们为大家提供了两种不同平台的虚拟机器,来供大家编译和运行ChCore实验:
在两个虚拟机中,用户名均为 os,密码均为123。
如果导入虚拟机失败,通常是因为下载没完整,请检查你下载文件的大小以及MD5,如果不匹配,请尝试重新下载虚拟机文件。
如果你在使用上述虚拟机出现了问题,请自己配环境(可自己配置虚拟机,也可以在真实的Linux环境下进行配置),可按照下面的步骤进行。限于apt自带qemu-system-arm版本的问题,配置的操作系统需要在Ubuntu 20.04 和 Debian 10 以上。低版本的Ubuntu或者Debian系统使用apt-get安装的qemu-system-arm版本比较低,不支持模拟raspi3硬件,因此,低版本的Ubuntu和Debian系统的用户请通过源码的方法安装高版本的qemu-system-arm,支持raspi3的qemu-system-arm的最低版本是2.12。其它Linux发行版用户请自行研究如何安装。
xxxxxxxxxx# 安装git环境sudo apt-get install git# 安装docker,docker是用来编译ChCore,并配置运行docker命令不需要sudo# 注意,通过此方法安装的docker版本较低,如果需要安装最新版本的docker,请docker官网的教程进行安装。sudo apt-get install docker.iosudo usermod -aG docker os# 重启电脑!!!重启后运行docker命令不需要sudoreboot# (可选)不使用docker而直接编译的工具,编译lab时运行`./scripts/build.sh`sudo apt-get install gcc-aarch64-linux-gnu# 安装lab运行环境sudo apt-get install make gdb-multiarch cmake ninja-build qemu-system-arm# 安装编辑器vim以及ctags(方便跳转)sudo apt-get install vim universal-ctags# 安装vscode:到官网下载安装如果不使用docker编译lab,则无需安装docker.io,而需要安装gcc-aarch64-linux-gnu。跑lab时不要运行make和make build,改为运行. /scripts/build.sh(或者自己修改Makefile)。
如果选择使用docker编译lab,则安装docker.io,而不安装gcc-aarch64-linux-gnu。跑lab时可直接运行make和make build。
ChChore实验代码的发布和提交均使用课程提供的GitLab平台。
首先,打开https://ipads.se.sjtu.edu.cn:2020/users/sign_in进行注册,Username一栏请输入自己的学号,助教会根据用户名的学号来进行改分。注册开放时间为一周,请大家尽快注册!

登录你的Gitlab后,打开https://ipads.se.sjtu.edu.cn:2020/os2020/chcore-lab-2021来fork一份ChCore仓库代码副本到你自己的账户下。之后,你可以对你账户下的ChCore仓库代码进行任意修改和提交,但不会对原ChCore仓库产生影响。

点击你的namespace,来完成fork。

将刚才fork成功的仓库设置为private(私有),防止其他同学浏览你的仓库、抄袭你的代码。ChCore的实验是一个单人作业,每个同学都有防止抄袭和被抄袭的义务和责任,助教也有相关的代码查重工具,抄袭行为将会被判0分。

最后,别忘记保存你的设置!

首先复制你的仓库链接,进入你账户下的仓库网页,点击Clone按钮,复制第二个链接。

在之前下载的虚拟机下面,打开命令行,先输入 git clone,再粘贴你刚才复制的链接,执行命令,输入你在GitLab上的用户名和密码(密码输入是不可见的,输入完毕按回车)。
如果你看到下面的输出,这就表明你已经成功下载了ChCore Lab的仓库,这里的username和password指代你在GitLab上的用户名(学号)和密码。
xxxxxxxxxx~$ git clone https://ipads.se.sjtu.edu.cn:2020/[username]/chcore-lab-2021.gitCloning into 'chcore-lab-2021'...Username for 'https://ipads.se.sjtu.edu.cn:2020': [username]Password for 'https://username@ipads.se.sjtu.edu.cn:2020': [password]remote: Enumerating objects: 3, done.remote: Counting objects: 100% (3/3), done.remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0Unpacking objects: 100% (3/3), done.
首先,你需要清楚三个概念:
助教之后会陆续放出每个Lab的代码,因此,在每次开始实验之前,你需要从原仓库中获取最新的Lab代码。这个步骤是建立本地仓库与原仓库之间的联系,使得你的本地仓库可以从原仓库中获取更新。
xxxxxxxxxx~$ cd chcore-lab-2021chcore-lab-2021$ git remote add upstream https://ipads.se.sjtu.edu.cn:2020/os2020/chcore-lab-2021.gitchcore-lab-2021$ git fetch upstream From https://ipads.se.sjtu.edu.cn:2020/os2020/chcore-lab-2021 * [new branch] lab1 -> upstream/lab1之后,当你需要获取更新时,只需要执行git fetch upstream命令即可。git fetch只会将原仓库中的更新下载到与你当前的工作分支不同的其它分支(例如upstream/lab1),并不会对你当前分支的代码进行修改。
通过git remote -v命令可以看到,你的本地仓库一共有两个远端仓库origin和upstream。origin是你在GitLab的私人仓库对应的地址,之后你在本地的提交(commit)需要提交到orgin。upstream是助教管理的仓库的地址,你需要从upstream获取下一个实验的代码。
xxxxxxxxxx~$ git remote -vorigin https://ipads.se.sjtu.edu.cn:2020/[username]/chcore-lab-2021.git (fetch)origin https://ipads.se.sjtu.edu.cn:2020/[username]/chcore-lab-2021.git (push)upstream https://ipads.se.sjtu.edu.cn:2020/os2020/chcore-lab-2021.git (fetch)upstream https://ipads.se.sjtu.edu.cn:2020/os2020/chcore-lab-2021.git (push)
由于lab1的分支在fork和下载到本地仓库的时候已经存在,因此不需要进行如下的操作,之后的lab2、lab3、lab4、lab5均需要通过以下方式获取助教发布的代码,并切换到新的代码分支。
在ChCore中,每一个实验都会有一个单独的代码分支(branch),例如lab1、lab2以及labx(x指代某个数字)。当助教在原仓库中放出labx的代码时:
git fetch upstream来获取最新的更新和分支信息。git checkout -b labx upstream/labx来创建一个新的分支labx,-b labx的意思是创建一个新的名为labx的分支,而upstream/labx则指定了本地的分支是基于原仓库的labx分支创建的。git push -u origin将本地仓库中的labx和你GitLab上私人仓库的labx分支进行绑定,并将本地仓库的labx分支推送到远端私人仓库的labx分支。git merge labx-1,将你之前的实验代码合并到当前分支上,这里的x-1指代上一个lab的数字。下面的操作说明,如何切换到下一个实验代码分支来进行实验。假设你已经做完了第x-1个实验,下面要切换到第x个实验。
xxxxxxxxxx# fetch the remote updates, you are in branch labx-1chcore-lab-2021$ git fetch upstream # you switch to the branch labx, whose code is based on the empty code provided by the TAschcore-lab-2021$ git checkout -b labx upstream/labx Branch 'labx' set up to track remote branch 'labx' from 'upstream'.Switched to a new branch 'labx'# update the remote tracking branch to your origin repo instead of the upstream repochcore-lab-2021$ git push -u origin To https://ipads.se.sjtu.edu.cn:2020/[username]/chcore-lab-2021.git * [new branch] labx -> labxBranch 'labx' set up to track remote branch 'labx' from 'origin'.# you will merge your code of previous labs to the new branch labx chcore-lab-2021$ git merge lab(x-1) git merge命令有时候并不能自动地进行合并,需要手动地冲突处理,别忘了处理这些冲突!