我将在ARM体系结构上测试一些低级代码.通常实验板上的实验非常复杂,所以我在想QEMU.
我想得到的是某种调试信息,如printfs或gdb.我知道这对于linux很简单,因为它实现了QEMU Integrator的设备驱动程序和gdb功能,但我不使用Linux.我还怀疑从Linux内核源代码中提取这种功能会很复杂.
我正在从一些已经实现其中一个功能的简单操作系统中搜索.你有什么建议吗?
我们正在做一个涉及从虚拟机管理程序层(即QEMU)监控来宾操作系统(例如Linux)的小项目.我们要监控的一件事是进出客户操作系统的网络流量.是否可以在不修改Guest OS的情况下这样做?
一种方法是拦截在创建套接字时创建的相关系统调用,并在执行指令时从相关寄存器中获取值.但我们不太确定它是否容易,或者它是否是正确的方法.
我已经升级到android sdk工具12.作为发布说明谷歌说:AVD管理器和模拟器现在可以使用为ARM v7和x86 CPU编译的系统映像.
有没有人试图运行x86图像?有没有3.0+图像?
谢谢,
android qemu android-virtual-device android-emulator android-sdk-tools
Freedos引导程序似乎存在问题.(在某些情况下,似乎bootcode无法找到内核.)
所以我试图用gdb调试qemu中的bootloader.按照几个维基上的说明和免费提供的在线课程资料,我像这样运行qemu
qemu-system-i386 -fda fdboot.img -boot a -s -S
Run Code Online (Sandbox Code Playgroud)
然后像这样连接gdb
$ gdb
(gdb) target remote localhost:1234
Run Code Online (Sandbox Code Playgroud)
我可以逐步完成前面的10 - 12条指令si,我假设它是SeaBIOS.
但过去,当我尝试进入引导加载程序代码时,它会继续执行而不会中断,一直到FreeDos菜单提示符.这完全跳过了我想在执行时逐步检查的引导加载程序代码.
我需要做什么才能通过引导加载程序?
[如果您想尝试自己,可以从项目网站下载freedos软盘映像.]
我正在使用QEMU模拟器来跟踪用户程序的执行.我们添加了一个辅助函数,它打印所有执行指令的IP.我们已经测试了这个工具的工作原理,用于两个素数程序的变体 - 一个用C语言,另一个用Java语言.我们为每个程序尝试了4个不同的输入参数,期望在每种情况下执行不同数量的指令.素数程序的C版遵循预期的线性趋势,即线数随着输入的增加而增加.但是,Java程序每次都提供完全相同数量的指令.
我觉得Java执行跟踪只捕获JVM代码而不是正在运行的实际代码.
JVM修改的代码在QEMU上运行在哪里?QEMU是否有任何特殊方式捕获自修改代码的执行?
qemu从源代码构建时,我发现对于每个CPU架构,目标列表有2个选项:xx-softmmu和xx-linux-user.例如:
x86_64-softmmu
x86_64-linux-user
Run Code Online (Sandbox Code Playgroud)
我无法搜索两个选项之间的差异.任何人都可以介绍它们之间的区别和关系吗?
我设法生成一个与QEMU 2.0.0 Ubuntu 14.04一起使用的最小引导扇区:
.code16
.global _start
_start:
cli
mov $msg, %si
mov $0x0e, %ah
loop:
lodsb
or %al, %al
jz halt
int $0x10
jmp loop
halt:
hlt
msg:
.asciz "hello world"
.org 510
.word 0xaa55
Run Code Online (Sandbox Code Playgroud)
编译:
as -o main.o main.S
ld --oformat binary -o main.img -Ttext 0x7C00 main.o
Run Code Online (Sandbox Code Playgroud)
这个例子可以在这个回购中找到:https://github.com/cirosantilli/x86-bare-metal-examples/tree/2b79ac21df801fbf4619d009411be6b9cd10e6e0/no-ld-script
一旦:
qemu -hda main.img
Run Code Online (Sandbox Code Playgroud)
它hello world按预期在模拟器屏幕上显示.
但是,如果我尝试刻录到USB:
sudo dd if=main.img of=/dev/sdb
Run Code Online (Sandbox Code Playgroud)
然后将USB插入ThinkPad T400或T430,点击F12,然后选择我观察到的USB:
我也用Ubuntu 14.04映像测试了相同的USB,它启动正常,因此USB工作正常.
我应该如何更改此示例,以便它将在硬件上启动并显示hello world消息?
Ubuntu图像和我创建的图像有什么区别?
这记录在哪里?
我已将sudo dmidecodeT400 …
我试图将 QEMU 与我正在构建的内核 ISO 一起使用,但我无法运行测试。
我正在使用 Windows 10 64 位,pc-bios如果重要的话,我已将该文件夹添加到 PATH。到目前为止,我已经尝试了以下命令:
Windows 终端屏幕截图
使用libvirt/virsh时,如何在KVM上设置启动顺序?(通过配置或命令)
我有一个qemu qcow2磁盘快照dev.img,它基于一个支持文件dev.bak.如何将两者合并为独立版devplus.img,同时保持dev.bak原样?
qemu ×10
assembly ×2
debugging ×2
gdb ×2
kvm ×2
android ×1
arm ×1
bare-metal ×1
bootloader ×1
embedded ×1
java ×1
libvirt ×1
linux ×1
sockets ×1
system-calls ×1
windows-10 ×1
x86 ×1