Ubuntu20.04下的QEMU安装及使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、QEMU在Ubuntu上的安装
- 二、安装步骤
- 1.安装
- 2.安装报错解决
- 2.1网络连接
- 解决步骤
- 2.2安装报错
- 三、使用
- 1 为zynq安装QEMU虚拟平台
- 2 运行
- 2.1 下载zynq的环境
- 2.2 使用环境下载
- 2.3 使用环境下载QEMU的使用文档
- 总结
前言
qemu的安装过程记录
一、QEMU在Ubuntu上的安装
安装指令步骤
mkdir build
cd build
../configure
# -j 并发编译
make -j8
# 安装qemu
sudo make install
#验证是否安装成功
qemu-system-aarch64 -version
参考下面这篇文章
https://blog.csdn.net/ado11111/article/details/115705374
按照下面这个文章安装的,安装的报错也和里面类似。
https://blog.csdn.net/qq_38393271/article/details/141347415
二、安装步骤
1.安装
Xilinx在Github上fork了QEMU,并且进行了修改,用于虚拟出一个ZYNQ或者MicroBlaze。
Xilinx官方教程http://www.wiki.xilinx.com/QEMU,
官网QEMU的链接:https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/821395464/QEMU+User+Documentation
Xilinx官方的安装教程:https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/822312999/Building+and+Running+QEMU+from+Source+Code
2.安装报错解决
2.1网络连接
安装了之后ubuntu的浏览器连不上网。
下面这个指令不能用,如果是换了国内镜像源的话,这就是网络的问题。
sudo apt update
解决步骤
- 运行以下命令,查看网卡是否可用
ip link show
如果 ens33 和 ens36 都显示 state UP,说明它们是有效的物理或虚拟网卡。
如果其中一个 state DOWN,可能是没有连接网线,或者是虚拟设备
- 启动网卡
让 ens33 和 ens36 变为 UP
sudo ip link set ens33 up
sudo ip link set ens36 up
然后再次查看状态:
ip link show
如果 ens33 变成 state UP,说明它可用,可以用来上网。
如果 ens36 也变成 state UP,说明它也能用,我们可以用它来给 QEMU 提供网络。
- 确认 ens33 是否能联网
执行以下命令
sudo dhclient ens33
如果成功,会获取一个 IP 地址,可以用 ip a 检查。
如果 ens33 拿到了 IP, Ubuntu 就能联网了
打开Firefox浏览器验证一下。
2.2安装报错
(一)Meson版本过低
查看meson版本
meson --version
更新meson版本(如果库里有就会直接更新):
sudo apt install --only-upgrade meson
(二)glib-2.0的版本较低
qemu要求glib的版本在2.66.0以上
解决方法一:如果仓库里面有更新版的glib就能直接升级
查看当前已安装版本:
pkg-config --modversion glib-2.0
查看官方仓库的可用版本:
apt-cache policy libglib2.0-dev
尝试更新系统的 glib:
sudo apt update
sudo apt upgrade libglib2.0-dev
解决方法二:手动编译安装新版本 glib
如果不能直接更新,需要手动编译安装。
在下面这个网站,下载需要的版本glib-2.66.0.tar.xz
http://ftp.riken.jp/X11/GNOME/sources/glib/2.66/
将下载好的压缩包复制到ubuntu中这个文件夹下 /usr/local,
在文件管理器中打开 /usr/local,输入下面指令
xdg-open /usr/local # 适用于 Ubuntu/Debian
复制好了之后,在终端用下面这个指令解压,进入文件夹
sudo tar -xvf glib-2.66.0.tar.xz
cd glib-2.66.0
执行下面指令,编译安装
sudo meson setup builddir
ninja -C builddir
sudo ninja -C builddir install
检查是否安装成功
pkg-config --modversion glib-2.0
三、使用
1 为zynq安装QEMU虚拟平台
https://bbs.eeworld.com.cn/thread-485191-1-1.html
https://blog.51cto.com/u_13682052/5708104
查看支持的ARM板卡,要在安装的文件夹下的终端
xuedaon@xuedaon:/usr/local/bin$ ./qemu-system-arm -M help
qemu的详细资料大全(入门必看!!!)
https://blog.51cto.com/u_13682052/5708104
2 运行
2.1 下载zynq的环境
下载好压缩包之后解压
运行
xilinx_zynq.dtb
ls
退出
按住ctrl + a, 松开, 按住x.
2.2 使用环境下载
2.2.1用以下命令交叉编译
编写一个简单的 hello_world.c 文件
Xilinx官网下的内容。
https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/821624963/Debugging+Guest+Applications+with+QEMU+and+GDB
#include
int main() {
printf("Hello, Zynq ARM32 world!
");
return 0;
}
在 Ubuntu 里输入下面指令,生成hello_world文件
arm-linux-gnueabihf-gcc -o hello_world hello_world.c
之后把生成的文件传到QEMU
2.2.2使用 TFTP 传输文件
在 Ubuntu 里,把文件放入 ~/ 目录 假设你要把 hello_world 传输到 QEMU:
cp hello_world ~/hello_world
在 QEMU 里下载文件 在 zynq 终端 运行:
tftp -g -r hello_world -l hello_world 10.0.2.2
换个目录放
tftp -g -r hello_world -l /tmp/hello_world 10.0.2.2
10.0.2.2 是 QEMU -net user 模式下的 宿主机(Ubuntu)的默认 IP。
可以用route -n查看QEMU的ip和网关
在 QEMU 里执行文件
chmod +x hello_world
./hello_world
运行不成功,可以因为动态编译的问题。输入下面指令进行静态编译。
arm-linux-gnueabihf-gcc -static -o hello_world hello_world.c
2.2.3使用NFS挂载
使用 NFS 共享文件
(1) 在宿主机上创建 TAP 接口
创建一个 TAP 设备(例如 tap0),并将其配置为可用:
sudo ip tuntap add dev tap0 mode tap user $(whoami)
sudo ip link set tap0 up
创建一个网桥(例如 br0)并把 TAP 接口加入网桥:
sudo apt update
sudo apt install bridge-utils
sudo ip link add name br0 type bridge
sudo ip link set br0 up
sudo ip link set tap0 master br0
2.2.4 git传输问题
git lfs install
git lfs track "*.zip"
git add .gitattributes
git add xuedaonUbuntu20.04.zip
git commit -m "add zip with LFS"
git push origin master
2.3 使用环境下载QEMU的使用文档
2.3.1 sabrelite测试、kernel内核、uboot
使用sabrelite测试,参考下面这个视频。
https://www.bilibili.com/video/BV16w411A7S4/?spm_id_from=333.337.search-card.all.click&vd_source=b5206c268831a89075c52b70e4ae746b
文档p241
https://qemu.readthedocs.io/_/downloads/en/v9.2.0/pdf/
运行 Linux kernel内核、uboot
//内核下载地址https://www.kernel.org/
//内核文件路径,linux文件夹
xuedaon@xuedaon:~/QEMU_X/linux$
//uboot下载地址https://ftp.denx.de/pub/u-boot/
//进行解压后的文件夹
xuedaon@xuedaon:~/QEMU_X/u-boot-2025.01$ sudo make smdk2410_config
//make编译要指定编译器
make CROSS_COMPILE=arm-linux-gnueabihf- -j4
------------------------------------------------------------------------
//u-boot位置
xuedaon@xuedaon:~/QEMU_X/u-boot-2025.01$ find / -type d -name "u-boot*" 2>/dev/null
/home/xuedaon/QEMU_X/u-boot-2025.01
/home/xuedaon/QEMU_X/u-boot-2025.01/include/u-boot
/home/xuedaon/QEMU_X/u-boot-2025.01/lib/lwip/u-boot
/home/xuedaon/qemu/qemu-9.2.0/roms/u-boot
/home/xuedaon/qemu/qemu-9.2.0/roms/u-boot-sam460ex
zimag是编译好的开发板内核镜像
2.3.2 编译Linux内核镜像和dtb文件
B站的第4个视频,编译Linux内核镜像和dtb文件。
https://www.bilibili.com/video/BV1PJ411m7fs?spm_id_from=333.788.player.player_end_recommend_autoplay&vd_source=b5206c268831a89075c52b70e4ae746b
make vexpress_defconfig
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
make zImage
make modules -j4
make dtbs
//.dtb的路径
DTC arch/arm/boot/dts/arm/vexpress-v2p-ca5s.dtb
DTC arch/arm/boot/dts/arm/vexpress-v2p-ca9.dtb
DTC arch/arm/boot/dts/arm/vexpress-v2p-ca15-tc1.dtb
DTC arch/arm/boot/dts/arm/vexpress-v2p-ca15_a7.dtb
//安装好了之后运行
qemu-system-arm -M vexpress-a9 -m 512M -kernel linux/arch/arm/boot/zImage -dtb linux/arch/arm/boot/dts/arm/vexpress-v2p-ca9.dtb -nographic -append "console=ttyAMA0"
总结
QEMU安装过程中遇到的问题,以及对应的一些解决方案;以及安装之后在平台上进行ZYNQ的仿真情况。
本文地址:https://www.vps345.com/6908.html