Articles of qemu

如何用QEMU和KGDBdebuggingLinux内核?

我已经能够使用以下方式启动一个基于powerpc的系统(MPC8544DS具体)来调用qemu(v1.7.0) qemu-system-ppc -M mpc8544ds -m 512 -kernel zImage -s -nographic -initrd busyboxfs.img -append "root=/dev/ram rdinit=/bin/sh kgdboc=ttyS0,115200 kgdbwait" 其中zImage是一个自定义交叉编译的Linux Kernel(v2.6.32),它已经启用并编译了KGDB(用于启动代码debugging),而busyboxfs.img是基于busybox的rootfs。 因为我使用-s标志到Qemu,所以我可以使用cross gdb插入到内核中,如下所示: (gdb) target remote localhost:1234 Remote debugging using localhost:1234 mem_serial_in (p=<value optimized out>, offset=5) at drivers/serial/8250.c:405 405 } 但是,如果我删除-s标志并试图通过/dev/ttyS0破解内核,它会给我一个权限被拒绝的错误: (gdb) set remotebaud 115200 (gdb) target remote /dev/ttyS0 permission denied 是因为它被Qemu所控制吗? 另外,在互联网上的例子中,kgdboc已经被设置为ttyAMA0 ,我已经理解了代表AMBA总线,这是基于ARM的系统特有的。 我们有类似的PowerPC吗? 我在这里做错了什么?

如何使用QEMU学习ARM Linux内核开发?

我想学习它像开发一些设备驱动程序等,并使用QEMU这一点,因为我没有ARM的硬件板如beagle板。 你们有什么build议? 我可以使用Qemu模拟器学习ARM内核上的Linux内核吗? 或者我应该尝试的其他选项?

如何在进程结束后自动closures`qemu`的执行?

我希望打开和显示输出后的qemu窗口在运行pintOS后自动closures 就像我运行命令pintos — run alarm-multiple在tcsh shell中pintos — run alarm-multiple ,qemu显示进程开始 ,然后一些alarm-notifications ,然后进程结束 ,但之后,qemu窗口将不会closures 我想成功完成系统调用后退出窗口。

Raspbian挂在qemu

我在Ubuntu 14.04上使用编译的内核( https://github.com/dhruvvyas90/qemu-rpi-kernel )在qemu上运行raspbian(2015-05-05-raspbian-wheezy.img)。 我的最终目标是在仿真中启动我的python脚本。 我从http://www.unixmen.com/emulating-raspbian-using-qemu/下面的手册,虽然其他许多人build议非常相似的行动顺序。 事情我正在尝试和我遇到的问题: 第一次启动是或多或less好。 按照build议在/etc/ld.so.preload中注释该行并重启。 在第二次启动(我删除了init = / bin / bash之后)以及所有后续的启动 ERROR ../libkmod/libkmod.c:554 kmod_search_moddep:无法打开moddep文件'/lib/modules/3.10.25/modules.dep.bin' 一些谷歌searchbuild议运行“sudo rpi-update”。 它没有帮助,在启动过程中相同的消息。 在第二次启动(我删除了init = / bin / bash之后)以及所有后续的启动 fsck死于退出状态6 看着“/ var / log / fsck / checkfs”的build议告诉某个位置不在那里,但它不会说哪一个 运行“startx”会产生错误信息1,最终加载用户界面,而桌面只有“垃圾桶”图标。 屏幕上方还有一个白色条纹闪烁,就像它一直试图加载一个标签,但每次都失败。 在此之后,qemu窗口停止响应进一步的交互。 运行“sudo apt-get upgrade”会安装一些软件包,但是重启之后,我甚至无法进入UI–只是鼠标光标的空白屏幕。 我不是很熟悉linux是如何在低层configuration的。 我明白,我可能会做一些完全stoopid。 所以,我的问题是: 我该如何debugging? 我无法弄清qemu的写入日志的设置。 我真的不想回退到gdb,因为我没有debuggingqemu本身,只是想获得通知它的事件。 ctrl键似乎不能在qemu窗口中工作。 没有复制粘贴可用。 或者我看不到如何打开它。 我错过了什么? 从我看到的所有手册看来,这应该变得更顺畅。 像它应该“只是工作”。

logging内存访问占用空间

我发现了Dr.Clements的mtrace 。 虽然它是有用的,但在我需要的情况下,它不能正常工作。 我打算用这个logging来理解不同场景下的内存访问模式。 有人可以分享相关经验吗? 任何build议将不胜感激。 0313更新 :我试图用qemu-mtrace来启动Linux-mtrace(3.8.0)的Ubuntu 16.04,但它只显示几个错误信息并终止。 希望有一些工具能够logging每一个访问。 $ ./qemu-system-x86_64 -mtrace-enable -mtrace-file mtrace.out -hda ubuntu.img -m 1024 Error: mtrace_entry_ascope (exit, syscall:xx) with no stack tag! mtrace_entry_register: mtrace_host_addr failed (10) mtrace_inst_exec: bad call 140734947607728 Aborted (core dumped)

QEMU简单的后台追踪不会打印任何东西

我正在从QEMU获取简单的跟踪文件。 我遵循指示docs / tracing.txt 用这个命令“qemu-system-x86_64 -m 2G -trace events = / tmp / events ../qemu/test.img” 我想只得到简单的跟踪文件。 我有trace-pid文件,但是它没有任何内容。 使用“简单”跟踪后端构build: ./configure –enable-trace-backends =简单make 用你想要跟踪的事件创build一个文件: echo bdrv_aio_readv> / tmp / events echo bdrv_aio_writev >> / tmp / events 运行虚拟机生成一个跟踪文件: qemu -trace events = / tmp / events …#你正常的QEMU调用 漂亮的打印二进制跟踪文件: ./scripts/simpletrace.py trace-events trace- *#用QEMU覆盖* 我遵循这个指示。 请有人给我一些build议这种情况。 谢谢!

QEMU CPU仿真原理

在QEMU中,操作系统可以在软件仿真CPU上运行。 如何可以通过软件模拟CPU? 我想知道细节。 如果CPU被软件模拟,寄存器是否与主机系统内存一起被模拟? 说有ARM汇编代码 LDRB r0,[r1],#1 这怎么能在x86环境下模拟? 我的猜测是仿真软件保持r0(4byte),r1(4byte)的内存映射空间,然后更新相应内存位置的寄存器值…我错了吗? 我想要详细的解释… 先谢谢你

仿真树莓派2

前段时间我仿效了这篇文章中的Raspberry Pi,但是这种方法有几个问题: 这是非常缓慢的。 显示解决scheme被限制为800×600。 你不能模拟超过256MB的内存。 此外, Qemu还没有新的Broadcom BCM2836或任何其他基于arm7的CPU的仿真。 但是,有几个原因,为什么模仿树莓派会很有趣。 所以我对任何提示都很感兴趣,这些提示让我在正确的方向上使用Qemu或Linux下的任何其他仿真软件来进行Raspberry Pi 2仿真。

将QEMU窗口输出redirect到运行qemu的terminal

我试图用qemudebuggingLinux内核的启动顺序,我运行的命令是: qemu -serial stdio -kernel <path to kernel> -hda <path to rootfs> -append "root=/dev/sda terminal = ttyS0" 在启动过程中,所有内核消息都被打印到QEMU窗口。 只有当启动完成后,我得到我的提示回到terminal,我跑QEMU。 现在我可以开始使用正在运行的内核terminal,并在terminal中看到输出,而不是在QEMU窗口中。 我如何获得包括引导消息到我的terminal,而不是QEMU窗口的所有消息(因为我不能向上滚动窗口..)?

qemu上树莓派Linux最新的sd映像

我试图build立一个Arch镜像,并使用qemu为了交叉编译一些东西,然后我把图像加载到Pi上。 我认为最简单的方法就是将最新的初始图像准备好,然后用我需要的任何东西进行准备,然后在完成之后将其添加到Pi上。 我从http://downloads.raspberrypi.org/arch_latest下载了Arch映像,并想在Qemu下运行它,类似于http://xecdesign.com/qemu-emulating-raspberry-pi-the-easy-way/ 。 我在qemu命令行上尝试了很多变化 qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1" -hda 2013-05-25-wheezy-raspbian.img 用archlinux-hf-2013-07-22.img代替。 但是这最终导致了“内核恐慌 – 不同步:没有发现init,尝试将init = option传递给内核” 我确定这意味着我下载的kernel-qemu不能和Arch映像一起工作,但我不确定解决这个问题的正确方法。 编辑: 甚至当我使用上面的命令行时,最新的Raspbian图像内核恐慌。 我猜这应该不会让我感到惊讶,因为它很可能是一个老内核。 所以我想我真正的问题是,我怎样才能使用图像中包含的任何内核,而不是build立自己的内核?