Ubuntu20.04编译安装qemu

Ubuntu20.04编译安装qemu

事先提醒,要弄清自己学的是哪个架构,早期的mit操作系统课(MIT6.828)教的是x86版,现在的课(MIT6.S081)教的是riscv-64,本文装的也是riscv-64

1.下载安装包

两个官方的搭建说明(或者直接看我下面的说明)

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
  • python最低版本3.6
  • ninja最低版本1.8.2
    可以用python3 --versionninja --version这两条命令查看版本

2.安装qemu

没什么好说的,按要求来(我是在用户目录下克隆的)

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/keycodemapdbqemu/tests/fp/berkeley-softfloat-3qemu/tests/fp/berkeley-testfloat-3这三个文件夹是空的,那么我们要去哪里找原文件呢?

答案就是克隆qemu链接的上一级目录,也就是这个链接,在这个链接,找到keycodemapdbberkeley-softfloat-3berkeley-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

你可能感兴趣的:(MIT6.S081,git,linux,qemu)