Ubuntu16下QEMU6.1.0安装和使用完整流程

发布时间 2023-12-28 11:32:56作者: solonj

一、测试环境

Ubuntu16.04_x64
qemu-6.1.0.tar.xz
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~16.04)
Python 3.8.17

大概的安装流程:依赖库->python->GCC->QEMU->UBOOT->Linux->Busybox

二、环境搭建

1、安装依赖库

最好提前装这些库,再装后续的python、gcc:

sudo apt-get install build-essential zlib1g-dev pkg-config libglib2.0-dev 
binutils-dev libboost-all-dev autoconf libtool libssl-dev 
libpixman-1-dev libpython2-dev python-pip python-capstone virtualenv

安装上面的库,python/GCC默认版本好像会变化,所以我推荐先装这些库,再装python和GCC,
有博主说可以去掉"libpython-dev python-pip"这两个包,即:

sudo apt-get install build-essential zlib1g-dev pkg-config libglib2.0-dev 
binutils-dev libboost-all-dev autoconf libtool libssl-dev 
libpixman-1-dev python-capstone virtualenv

后面还会根据实际问题,再安装一些其它的库,每个人遇到的可能不一样,遇到问题可以网上搜解决方案。

2、安装pyhton3.8

参考 https://blog.csdn.net/qq_35743870/article/details/125903040
我的Ubuntu16环境有Python 2.7.12和Python 3.5.2,但是QEMU需要Python >= 3.6,所以安装了Python 3.8.17 。

2.1、下载Python3.8.17

网址下载:https://www.python.org/ftp/python/ ,Python-3.8.17.tar.xz 。
命令下载:wget https://www.python.org/ftp/python/3.8.17/Python-3.8.17.tgz

2.2、创建新版python的安装目录(便于卸载)

cd /usr/local
mkdir python
cd python
mkdir python3.8

建立好的目录:

/usr/local/python/python3.8

2.3、安装依赖库

sudo apt-get install libffi-dev uuid-dev lzma-dev liblzma-dev libncurses5-dev libgdbm-dev sqlite3 libsqlite3-dev openssl tcl8.6-dev tk8.6-dev libreadline-dev zlib1g-dev build-essential bzip2 libbz2-1.0 libbz2-dev libc6-dev libdb-dev libexpat1 libexpat1-dev libgdbm3 libncursesw5-dev libpcap-dev libreadline5 libreadline6 libreadline6-dev libsqlite0 libsqlite0-dev libsqlite3-0 libssl-dev libssl1.0.0 libxml2-dev libxslt1-dev sqlite tcl tk tk-dev xz-utils zlib1g zlib1g-dev make  

2.4、解压安装包

在存放安装包的目录直接解压,不用放到 /usr/local/python/python3.8 下

tar xvf xxx.tar.xz
tar -xf xxx.tgz

2.5、安装

配置安装目录

cd ~/Python-3.8.17
./configure prefix=/usr/local/python/python3.8 --enable-optimizations

编译源码

cd ~/Python-3.8.17
make -j 2

安装,一定要使用altinstall,看过的教程有说明过使用install会覆盖安装,可能会导致Ubuntu崩溃的情况。

cd ~/Python-3.8.17
make altinstall  >&1|tee make.log

2.6、添加环境变量

gedit ~/.bashrc

在文件最后面添加以下内容

#[Python3.8]
export PATH=$PATH:/usr/local/python/python3.8/bin

让环境变量生效

source ~/.bashrc

2.7、配置python3默认版本为3.8

使用以下命令,可以看到各命令实际使用的python版本:

python --version
python2 --version
python3 --version
python3.5 --version
python3.8 --version

由于QEMU的需求,需要配置python3默认版本为3.8 。
(1)添加 python & python3 指向选择
最后的序号表示优先级,数字越大,优先级越高,会自动选取优先级高的作为默认指向,可手动更改默认指向,这里将系统默认的指向的优先级设置为100。
python指令可选列表设置:

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 100
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 99
sudo update-alternatives --install /usr/bin/python python /usr/local/python/python3.8/bin/python3.8 38 

python3指令可选列表设置:

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 100
sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/python/python3.8/bin/python3.8 38

(2)查看 python & python3 可选列表

sudo update-alternatives --list python
sudo update-alternatives --list python3

(3)选择 python & python3 实际指向
这里只用把python3指向选为python3.8

sudo update-alternatives --config python
sudo update-alternatives --config python3

3、安装gcc7

QEMU需要gcc7.5.0以上。
我把默认的gcc卸载了,QEMU环境弄好后,我的Ubuntu的桌面样式、背景图、设置都变成默认了,不知道是不是因为卸载了默认的gcc导致的,推荐大家别卸载默认GCC。

3.1、下载安装:

gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz
下载后解压,gcc -v查看版本还是旧版本不是7.5.0,看网上教程还要编译gcc,感觉太复杂费时了,放弃该方法。

3.2、指令安装:

下载

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update 
sudo apt-get install gcc-7
sudo apt-get install g++-7

配置:将gcc7,g++7作为默认选项

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 100
sudo update-alternatives --config gcc

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 100
sudo update-alternatives --config g++

查看是否成功:

gcc --version
g++ --version

发现gcc版本刚好是7.5.0,QEMU可用。

三、QEMU安装

1、下载解压

官网下载:https://download.qemu.org/ , qemu-6.1.0.tar.xz
命令下载:

wget https://download.qemu.org/qemu-6.1.0.tar.xz

解压

$ mkdir qemu
$ cd qemu
$ mkdir build
$ tar xvJf qemu-6.1.0.tar.xz
$ ls
qemu-6.1.0  qemu-6.1.0.tar.xz  build
$ cd build

建立build目录,并进入该目录安装qemu。

2、配置

$ cd build
$ ../qemu/configure

这里遇到了很多问题,有的问题网上找不到答案,后面我重装了PYTHON和GCC发现又没问题了,所以推荐先安装好PYTHON和GCC,再安装QEMU!

参考:
https://blog.csdn.net/qq_36287943/article/details/120061500
https://blog.csdn.net/qq_36393978/article/details/118086216
https://blog.csdn.net/weixin_44681954/article/details/123095796

2.1

ERROR1:ERROR: Cannot use 'xxxx/python/bin', Python >= 3.6 is required. Use --python=/path/to/python to specify a supported Python.

解决办法:需要Python>=3.6,想办法让python3 --version默认指向python3.8;或者执行configure命令时加参数
--python=/usr/local/python/python3.8/bin/python3.8
2.2

ERROR2:ERROR: You need at least GCC v7.5 or Clang v6.0 (or XCode Clang v10.0)

解决办法:需要GCC>=7.5,想办法让gcc -v默认使用GCC7.5。
2.3

ERROR3: glib-2.56 gthread-2.0 is required to compile QEMU

解决办法:下载glib2.56编译安装,我在网上 https://www.linuxfromscratch.org/blfs/view/8.3/general/glib2.html 下载的glib-2.56.1.tar.xz 。
编译时错误1:configure: error: Python interpreter is too old
解决办法:PYTHON="/home/zgl/python3.6/bin/python3.6"
编译时错误2:configure: error: *** Could not find libmount
解决办法:--enable-libmount=no
完整编译如下:

sudo PYTHON="/usr/local/python/python3.8/bin/python3.8" ./autogen.sh  --enable-libmount=no
make -j 32
sudo make install

2.4

ERROR4:ERROR: Could not detect Ninja v1.7 or newer
sudo apt install re2c
git clone git://github.com/ninja-build/ninja.git && cd ninja
./configure.py --bootstrap
sudo cp ninja /usr/bin/

我在Ubuntu下载失败,直接在github.com/ninja-build/ninja.git 下载的ninja-master.zip

2.5
ERROR: Cannot find Ninja
缺少Ninja,安装ninja即可。

$ sudo apt-get install ninja-build

好像用到了re2c-1.0.3.tar.gz ?
2.6
ERROR: pkg-config binary ‘pkg-config’ not found

sudo apt-get install pkg-config

3、进行配置和编译:

$ cd build
$ ../qemu/configure
$ make
$ make install

4、QEMU测试

$ sudo apt install qemu-system-arm
查看QEMU版本
$ qemu-system-arm --version
查看QEMU支持的ARM型号
$ qemu-system-arm -M help

四、uboot

五、Linux

Linux版本任选,参考: https://codeleading.com/article/60103179369/

cd linux-5.19/
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_defconfig
make -j4
make modules -j4
make uImage LOADADDR=0x60000000
make dtbs
 
cp -f arch/arm/boot/uImage  ../image/
cp -f arch/arm/boot/zImage  ../image/
cp -f arch/arm/boot/dts/vexpress-v2p-ca9.dtb  ../image/device.dtb

六、busybox