0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于QEMU系统模拟器Xilinx/QEMU的运行与调试

Hx 作者:工程师陈翠 2018-07-04 07:50 次阅读

Xilinx基于QEMU系统模拟器Xilinx/QEMU可用于模拟运行Zynq Linux的运行与调试。其使用可以是:

(1)利用GitHub上的Xilinx/QEMU源代码进行编译得到QEMU软件模拟器

(2)利用Xilinx提供的PetaLinux工具包,PetaLinux工具包已经包括了QEMU emulator.

一、下载Xilinx/QEMU源码并编译

1. 建立GitHub账户并连接

(a)注册github.com账户

(b)安装git,在REHL-6下使用

yum install git

(c)使用ssh-keygen生成迷匙

ssh-keygen -t rsa -C”email@address.com” -f ~。/ssh/Huatong-github

参数意义如下:

-t 指定密匙算法类型,默认即为rsa

-C 设置注释文字

-f 指定密匙文件存储文件名,上例会生成/home/hhdong/.ssh/huatong-github和/home/hhdong/.ssh/huatong-github.pub两个密匙文件

(d)将SSH公匙添加到github

在浏览器输入https://github.com/settings/ssh点击添加Add ssh key,然后将huatong-github.pub这个文件内容拷贝添加。

(e)新建/home/hhdong/.ssh/config文件,其内容如下:

Host huatong-github

User git

Hostname github.com

PreferredAuthentications publickey

IdentityFile ~/.ssh/huatong-github

注意:其中的用户名为git,而不是github.com网站上的用户名。

(f)连接github.com网站

使用 ssh -T git@github.com或者 ssh -vT git@github.com

其最后会显示:You‘ve successfully authenticated, but GitHub does not provide shell access.这就表示连接成功了。

如果出现连接错误,可以尝试如下解决方法:

(1)是不是正确的拷贝公钥到github.com,注意不要拷贝错误,包含了不必要的字符,空格,回车等

(2)修改.ssh目录属性和其下的文件读写属性。

chmod 700 ~/.ssh

chmod 600 ~/.ssh/*

2. 下载Xilinx/QEMU源代码并编译

(a) git clone git://github.com/Xilinx/qemu.git

然后将其更新到master trunk.

(b) cd qemu

git checkout Xilinx-master

(c)配置QEMU

。/configure --target-list=”arm-softmmu” --enable-fdt --disable-kvm

(d)编译make

我在编译过程中,出现

ERROR: DTC(libfdt) not present

可以根据提示下载sub model解决,git submodule update --init dtc

另外一个问题是在编译过程中提示:

/home/hhdong/qemu/qemu-img.c:73 : undefined reference to ‘g_sequence_lookup’

collect2: ld return 1 exit status

出现错误的原因是g_sequence_lookup是在glibc 2.28上才加入的,而使用的Host REHL-Server-6上的glibc版本为2.12. 由于g_sequence_lookup是用于检查一些情况下,重复的写入了信息。则workaround可以是:

- if (!g_sequence_lookup(seq, (gpointer)fmt_name, compare_data, NULL)) {

g_sequence_insert_sorted(seq, (gpointer)fmt_name, compare_data, NULL);

- }

即不调用g_sequence_lookup进行判断。

3. 运行QEMU,并加载Xilinux预编译好的zImage和system.dtb

/arm-softmmu/qemu-system-arm -M arm-generic-fdt -nographic -smp 2 -machine linux=on -serial mon:stdio -dtb /home/hhdong/Xilinx-ZC706-2014.2/images/linux/system.dtb -kernel /home/hhdong/Xilinx-ZC706-2014.2/pre-built/linux/images/zImage

其会提示:

qemu: fatal: Trying to execute code outside RAM or ROM at 0xfffffff0

然后就是register dump,如下:

R00=00000000 R01=00000000 R02=00000000 R03=00000000

R04=00000000 R05=00000000 R06=00000000 R07=00000000

R08=00000000 R09=00000000 R10=00000000 R11=00000000

R12=00000000 R13=00000000 R14=00000000 R15=fffffff0

PSR=400001d3 -Z-- A svc32 CPU#:1

s00=00000000 s01=00000000 d00=0000000000000000

到目前为止,还没有查出出错的原因。猜想可能是Xilinx/QEMU与预编译的system.dtb之间配合的问题吧。

二、使用PetaLinux工具包提供的QEMU

使用Xilinx提供的PetaLinux工具包包含的QEMU就非常简单了。

从Xilinx网站下载petalinux-v2014.2-final-installer.run和Xilinx-ZC706-v2014.2-final.bsp。查看文档ug976-petalinux-installation.pdf即可。

使用PetaLinux提供的qemu加载上述的预编译zImage和system.dtb则不会出错。如下:

/opt/pkg/petalinux-v2014.2-final/tools/linux-i386/petalinux/bin/qemu-system-arm -M arm-generic-fdt -nographic -smp 2 -machine linux=on -serial mon:stdio -dtb /home/hhdong/Xilinx-ZC706-2014.2/images/linux/system.dtb -kernel /home/hhdong/Xilinx-ZC706-2014.2/pre-built/linux/images/zImage

则能够正常运行。

此时,可以尝试不同的qemu参数了。例如将--serial file:/temp/serial.txt加入到命令中,如

/opt/pkg/petalinux-v2014.2-final/tools/linux-i386/petalinux/bin/qemu-system-arm -M arm-generic-fdt -nographic -smp 2 -machine linux=on -dtb /home/hhdong/Xilinx-ZC706-2014.2/images/linux/system.dtb -kernel /home/hhdong/Xilinx-ZC706-2014.2/pre-built/linux/images/zImage --serial file:/temp/serial.txt

则输出的信息就不会出现在console中断,而是写入到文件/tmp/serial.txt中了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10981

    浏览量

    206689
  • 模拟器
    +关注

    关注

    2

    文章

    813

    浏览量

    42689
  • qemu
    +关注

    关注

    0

    文章

    54

    浏览量

    5190
收藏 人收藏

    评论

    相关推荐

    【RT-Thread学习笔记】如何优雅地退出QEMU模拟器

    【RT-Thread学习笔记】如何优雅地退出QEMU模拟器?我想重新编译源码,再次运行新的代码,怎么办呢?如何才能退出这个QEMU命令行控制台?
    的头像 发表于 07-26 04:06 4755次阅读
    【RT-Thread学习笔记】如何优雅地退出<b class='flag-5'>QEMU</b><b class='flag-5'>模拟器</b>?

    怎样通过QEMU模拟器加载系统文件打包成新的roofts镜像呢

    怎样通过QEMU模拟器加载系统文件打包成新的roofts镜像呢?有哪些步骤?
    发表于 03-04 07:23

    使用CH32V103创建工程,用QEMU模拟调试时选择什么模拟器

    使用CH32V103芯片创建工程,用QEMU模拟调试时,不知选择什么模拟器,希望高手赐教。
    发表于 04-18 09:30

    在VSCode中使用QEMU调试FreeRTOS

    在这篇文章中,我们将逐步完成一个示例设置,该设置以模拟 Arm Cortex-M3 微控制为例,展示了如何使用 QEMU 在 Visual Studio Code (VSCode) 编辑
    发表于 03-16 15:45

    LS1043A如何使用qemu

    我正在使用 LS1043A 处理,我想执行模拟器。我正在运行命令 ./qemu-system-aarch64 它给出了一个错误显示 aarch64-binfmt-P: 无法打开 '/
    发表于 03-30 07:12

    嵌入式编程中为什么使用qemuqemu的实际应用

    文件系统,网络,图形,算法等等,这些如果能够利用软件模拟器进行开发,可以大大的减少上板调试的时间。减少硬件连接的烦恼,在家也能随时分析软件代码。 在实际项目的开发过程中,qemu也非常
    发表于 08-16 06:44

    如何在MIPS64 Release 6 CPU上运行QEMU的Linux SMP

    我将针对这一系列的疑问进行解答。我将以教程的形式展示如何从零开始配置及构建64位Linux并使之在QEMU模拟器运行。此外,我将使用支持VP(虚拟处理器)的MIPS64r6处理器,其是MIPSr6多线程
    发表于 02-09 18:57 1055次阅读
     如何在MIPS64 Release 6 CPU上<b class='flag-5'>运行</b><b class='flag-5'>QEMU</b>的Linux SMP

    Linux:QEMU调试内核的步骤

    Linux:QEMU调试内核的步骤
    的头像 发表于 06-23 09:03 2879次阅读
    Linux:<b class='flag-5'>QEMU</b><b class='flag-5'>调试</b>内核的步骤

    QEMU上用Busybox模拟ARM文件系统的步骤

    QEMU上用Busybox模拟ARM文件系统的步骤
    的头像 发表于 06-23 09:53 2973次阅读
    在<b class='flag-5'>QEMU</b>上用Busybox<b class='flag-5'>模拟</b>ARM文件<b class='flag-5'>系统</b>的步骤

    PC上QEMU模拟ARM的步骤

    PC上QEMU模拟ARM的步骤
    的头像 发表于 06-23 09:58 6840次阅读
    PC上<b class='flag-5'>QEMU</b><b class='flag-5'>模拟</b>ARM的步骤

    如何在x86平台用Qemu模拟ARM系统

    前言 为什么需要ARM模拟系统 Qemu是什么? Qemu的两种模式 Qemu 能做什么?或者说适合做什么? 在 Ubuntu16.04
    的头像 发表于 05-03 11:22 5522次阅读
    如何在x86平台用<b class='flag-5'>Qemu</b><b class='flag-5'>模拟</b>ARM<b class='flag-5'>系统</b>?

    QEMU模拟不同的硬件单板使用教程

    简介 QEMU可以模拟内核运行在不同的单板,解除对物理开发板的依赖。 QEMU安装 1.安装依赖(Ubuntu 18+) sudo apt install build-essentia
    发表于 04-13 11:22 6次下载

    QEMU模拟器运行

    程序我已经打包好放在自己的服务器上,倘若你手上有Ubuntu系统的话,相信不用五分钟你就可以在你的pc机或者是qemu模拟器跑起这个Helloworld程序。
    的头像 发表于 07-31 10:40 1272次阅读

    qemu-riscv在scode的gdb调试步骤

    qemu支持gdb调试,只需要在命令中添加 -s -S两个参数即可,在bsp/qemu-riscv下已经有了qemu-dbg.sh,且加入了该参数
    的头像 发表于 09-28 10:54 941次阅读
    <b class='flag-5'>qemu</b>-riscv在scode的gdb<b class='flag-5'>调试</b>步骤

    vscode运行qemu-vexpress-a9 qemu仿真环境F5后报错处理方法

    修改.vscode下launch.json中qemu debug为qemu simulator,preLaunchTask为调试前的任务执行,找task.json中label对应的任务名称,如果在windows环境下,
    的头像 发表于 09-28 11:17 856次阅读
    vscode<b class='flag-5'>运行</b><b class='flag-5'>qemu</b>-vexpress-a9 <b class='flag-5'>qemu</b>仿真环境F5后报错处理方法