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路径启动

相关推荐
思禾13 天前
Qemu开发ARM篇-3、qemu运行uboot演示
linux·arm开发·qemu·uboot
张世争17 天前
rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链
qemu·rtems·realview_pbx_a9
EastWood20131 个月前
qemu:gpio使用
qemu
百里杨1 个月前
QEMU中GDB远程串行协议
qemu·gdb·risc-v·riscv·difftest
Eloudy2 个月前
一键编译并启动一个 ARM Linux qemu 虚拟机
arm·qemu·linux kernel
Eloudy2 个月前
基于 systemc-2.3.1的virtual device 接入 qemu-arm
qemu·systemc·tlm
安全二次方security²2 个月前
ARM功耗管理之Suspend-to-Disk实验
qemu·低功耗·power manage·arm功耗管理·功耗管理精讲与实战·功耗管理实验·suspend-to-disk
EastWood20132 个月前
QEMU入门
qemu
京雨4 个月前
Qemu 启动 OpenEuler24.03(riscv64)
qemu·openeuler·riscv64