事先提醒,要弄清自己学的是哪个架构,早期的mit操作系统课(MIT6.828)教的是x86版,现在的课(MIT6.S081)教的是riscv-64,本文装的也是riscv-64
两个官方的搭建说明(或者直接看我下面的说明)
https://wiki.qemu.org/Hosts/Linux
https://en.wikibooks.org/wiki/QEMU/Linux
必装的安装包
sudo apt-get install git libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev
推荐的额外安装包(不强制,但还是建议装上,有备无患)
sudo apt-get install git-email
sudo apt-get install libaio-dev libbluetooth-dev libbrlapi-dev libbz2-dev
sudo apt-get install libcap-dev libcap-ng-dev libcurl4-gnutls-dev libgtk-3-dev
sudo apt-get install libibverbs-dev libjpeg8-dev libncurses5-dev libnuma-dev
sudo apt-get install librbd-dev librdmacm-dev
sudo apt-get install libsasl2-dev libsdl1.2-dev libseccomp-dev libsnappy-dev libssh2-1-dev
sudo apt-get install libvde-dev libvdeplug-dev libvte-2.90-dev libxen-dev liblzo2-dev
sudo apt-get install valgrind xfslibs-dev
然而到运行配置文件时依然会报错ERROR: Cannot find Ninja
解决方法也很简单,缺什么就补什么呗
sudo apt install ninja-build
或者(必须使用python3)
sudo python3 -m pip install ninja
继续运行配置文件,结果又报错无法在子模组路径 'meson' 中找到当前版本
各种查资料耗费了大半天,最后才明白是缺少了meson
这玩意(大汗)
按照官方要求,同样要用python3的pip
sudo python3 -m pip install meson
python3 --version
和ninja --version
这两条命令查看版本没什么好说的,按要求来(我是在用户目录下克隆的)
git clone git://git.qemu-project.org/qemu.git
接着切换到qemu这个文件夹
cd ./qemu
输入./configure
命令,这是运行一个配置文件(看到这一步不一定马上做,下面会说一个坑)
当我运行配置文件时,它就报错了
Program keycodemapdb/tools/keymap-gen found: NO
../ui/meson.build:106:0: ERROR: Program 'keycodemapdb/tools/keymap-gen' not found
A full log can be found at /home/babepig/qemu/build/meson-logs/meson-log.txt
ERROR: meson setup failed
上面的是运行配置文件最后几行的报错,类似的错误还有
WARNING: Project targeting '>=0.55.0' but tried to use feature introduced in '0.57.0': test() timeout <= 0.
../tests/fp/meson.build:27:0: ERROR: Include dir berkeley-softfloat-3/source/include does not exist.
A full log can be found at /home/babepig/qemu/build/meson-logs/meson-log.txt
ERROR: meson setup failed
WARNING: Project targeting '>=0.55.0' but tried to use feature introduced in '0.57.0': test() timeout <= 0.
../tests/fp/meson.build:186:0: ERROR: File berkeley-testfloat-3/source/uint128_inline.c does not exist.
A full log can be found at /home/babepig/qemu/build/meson-logs/meson-log.txt
ERROR: meson setup failed
经排错,发现qemu/ui/keycodemapdb
,qemu/tests/fp/berkeley-softfloat-3
,qemu/tests/fp/berkeley-testfloat-3
这三个文件夹是空的,那么我们要去哪里找原文件呢?
答案就是克隆qemu链接的上一级目录,也就是这个链接,在这个链接,找到keycodemapdb
,berkeley-softfloat-3
,berkeley-testfloat-3
这三个库,克隆下来并把原来的空文件替换掉(鬼知道我耗了多少时间才琢磨出解决方法,被坑死qwq)
另外,如果看到类似下面的报错,一律重新执行./configure
error: RPC 失败。curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated.
fatal: 远端意外挂断了
fatal: 过早的文件结束符(EOF)
fatal: index-pack 失败
fatal: 无法克隆 'https://gitlab.com/qemu-project/capstone.git' 到子模组路径 '/home/babepig/qemu/capstone'
克隆 'capstone' 失败。按计划重试
如果执行./configure
没有报错,则代表配置成功,如果看到输出列表有些组件显示NO
,没有影响的
接着就输入make
编译(注意一点的是,编译后整个qemu文件夹大小为8.3G,最好先确保空间足够)
编译时间较长,我在笔记本上花了一小时40分(X:D)
最后就是安装了
sudo make install
输入下面的命令,显示版本号则代表安装成功
qemu-riscv64 --version