zynq qemu模拟器环境搭建

qemu是硬件模拟器,方便有些同学没得开发板想验证一些driver是否在指定板卡上可以测试,qemu就实现了该功能,选择qemu模拟器最好是选择cpu厂商指定qemu源码,这样测试结果更加逼真。本文章主要介绍如何搭建zynq平台qemu模拟器环境。

1.下载qemu源码搭建qemu环境

sudo apt-get install libslirp-dev

qemu模拟器下载:https://github.com/Xilinx/qemu

unzip qemu-master.zip

cd qemu-master/

mkdir build

cd build

../configure --target-list="arm-softmmu,aarch64-softmmu,aarch64-linux-user,arm-linux-user" --enable-slirp

make

在install目录会生成qemu启动程序qemu-arm和qemu-aarch64

如果需要指定自定义内核,请按照如下修改qemu源码,否则无法重新配置CPU主频

issue链接:https://github.com/apertus-open-source-cinema/axiom-firmware/issues/62

diff --git a/hw/misc/zynq_slcr.c b/hw/misc/zynq_slcr.c

index 7557482..3a387ec 100644

--- a/hw/misc/zynq_slcr.c

+++ b/hw/misc/zynq_slcr.c

@@ -310,7 +310,7 @@ static void zynq_slcr_reset(DeviceState *d)

s->regs[LOCKSTA] = 1;

/* 0x100 - 0x11C */

  • s->regs[ARM_PLL_CTRL] = 0x0001A008;
  • s->regs[ARM_PLL_CTRL] = 0x00014008;

s->regs[DDR_PLL_CTRL] = 0x0001A008;

s->regs[IO_PLL_CTRL] = 0x0001A008;

s->regs[PLL_STATUS] = 0x0000003F;

到目前为止qemu安装完成,接下来需要在准备zImage,Rootfs和DTB文件。

  1. 准备内核和dtb文件

方法一:可以通过去官网下载bsp包,该bsp包有最小系统,可以直接使用

方法二:通过peatalinux工具和xsa硬件描述文件生成zImage和dts,rootfs文件等,这种方法比较常见,因为xsa文件通过vivado生成,在有真实的硬件环境,开发流程可以保持一致。

通过petalinux编译生成的zImage,dtb和rootfs后,就可以启动qemu

在搭建qemu环境编译目录下执行下面命令,记得替换zImage,dtb和rootfs到自己的路径

./qemu-system-arm -M arm-generic-fdt-7series -machine linux=on -serial /dev/null -serial mon:stdio -display none -kernel /home/herok/work/kernel/kernel-source_build/arch/arm/boot/zImage -initrd /home/herok/work/qemu_rootfs/repack_ramdisk.cpio.gz -gdb tcp::9000 -dtb /home/herok/work/xc7035/images/linux/system.dtb -device loader,addr=0xf8000008,data=0xDF0D,data-len=4 -device loader,addr=0xf8000140,data=0x00500801,data-len=4 -device loader,addr=0xf800012c,data=0x1ed044d,data-len=4 -device loader,addr=0xf8000108,data=0x0001e008,data-len=4 -device loader,addr=0xF8000910,data=0xF,data-len=0x4

运行结果如下:

  1. 退出qemu

方法一:1. 按住ctrl + a,2. 松开 3. 按住x.

方法二:开启新的终端使用 ps -A | grep "qemu" | awk '{print $1}' |xargs kill 然后使用kill命令杀掉进程。(如果内核崩溃了就只能用这种办法)

  1. petalinux自定义制作rootfs文件系统

  2. mkdir qemu_rootfs

cd qemu_rootfs

mkdir ramdisk_unzip

cp ../xc7035/images/linux/rootfs.cpio.gz .

gunzip -c rootfs.cpio.gz | sh -c 'cd ramdisk_unzip/ && cpio -i'

sh -c 'cd ramdisk_unzip/ && find . |sudo cpio -H newc -o' | gzip -9 > herok_ramdisk.cpio.gz

herok_ramdisk.cpio.gz根文件系统制作完成

  1. qemu系统和主机如何传输文件

这个地方弄了几次没有弄好,就没去折腾,需要传输文件时,就将待传输的文件放到ramdisk_unzip文件夹下面,然后重新打包rootfs文件系统。

sh -c 'cd ramdisk_unzip/ && find . |sudo cpio -H newc -o' | gzip -9 > herok_ramdisk.cpio.gz

实际上petalinux安装时候自己也安装了qemu模拟器,但是这种方法用的偏少。

petalinux-boot --qemu --kernel #这种方式启动会使用images/linux/zImage

petalinux-boot --qemu --kernel herok_apth #直接使用herok_apth路径启动

相关推荐
感觉画质不如…原神2 天前
使用Qemu模拟32位ARM系统
arm开发·qemu
奔跑吧 android3 天前
《Linux内存管理:实验驱动的深度探索》【附录】【实验环境搭建 4】【Qemu 如何模拟numa架构】
linux·qemu·内存管理·kernel
Roadinforest16 天前
wsl2配置xv6全解(包括22.04Jammy)
linux·操作系统·qemu·wsl·环境配置·xv6
GKDf1sh24 天前
通过qemu仿真树莓派系统调试IoT固件和程序
linux·网络·物联网·qemu
禾仔仔25 天前
RISC-V汇编学习(四)—— RISCV QEMU平台搭建(基于芯来平台)
汇编·qemu·risc-v·芯来科技
Evoxt 益沃斯1 个月前
How to enable Qemu Guest Agent for Virtual Machines
linux·运维·服务器·qemu
skywalk81631 个月前
PolyOS 是面向 RISC-V 架构的智能终端和 AIoT 开源操作系统(基于开源鸿蒙)
qemu·harmonyos·risc-v
jiuri_12152 个月前
QEMU 搭建arm linux开发环境
linux·arm开发·qemu
skywalk81632 个月前
尝试qemu仿真VisionFive2 OpenKylin系统
qemu·kylin
京雨3 个月前
Qemu 加载你指定的 initrd、dtb 到哪里?
qemu·riscv64·fdt·initrd