标签: qemu

RaspberryPi 上的 Qemu Debian x86

我想创造i386环境QEMU环境chroot \n我使用的是 Raspberry Pi ver B,但我想使用哪个版本应该不重要。

\n\n

到目前为止我做了:

\n\n
apt-get install qemu qemu-user qemu-user-static binfmt-support debootstrap binutils\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我将chroot目录安装到/tmp/mnt并运行:

\n\n
sudo debootstrap --foreign --arch i386 buster  ./ http://deb.debian.org/debian/\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我安装了:

\n\n
mount -t sysfs /sys /tmp/mnt/sys/\nmount -t proc /proc /tmp/mnt/proc/\nmount \xe2\x80\x93bind /dev /tmp/mnt/dev/\nmount \xe2\x80\x93bind /dev/pts /tmp/mnt/dev/pts/\nmount \xe2\x80\x93bind /dev/shm /tmp/mnt/dev/shm/\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在当我尝试运行第二阶段时debootstrap

\n\n
sudo chroot ./ ./debootstrap/debootstrap --second-stage\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到以下错误消息:

\n\n
W: Failure trying to run:  /sbin/ldconfig\nW: See //debootstrap/debootstrap.log for …
Run Code Online (Sandbox Code Playgroud)

qemu raspberry-pi

3
推荐指数
1
解决办法
4308
查看次数

我可以检查 Qemu tcg IR 代码吗?如果是这样怎么办?

我正在尝试分析 QEMU tcg IR 代码

我看到这篇文章讨论了 QEMU 代码流程。根据该图,翻译发生在 target-xxx/translate.c,这就是 QEMU 将代码从源(或前端)翻译为 TCG IR 的地方。然后进一步在 tcg/xxx/tcg-target.c。

这个过程可以总结如下(至少根据我的理解) - 假设我们有x86一个前端和powerpc (ppc64abi32)一个后端,那么 -

x86--> TCG IR-->ppc64abi32

我想分析一下这段TCG IR代码。有什么方法可以生成此代码(这可能不相关,但例如,我们可以使用带有 clang 的标志 -S 生成 LLVM IR 代码)?

我自己做了一些研究,发现struct TranslationBlock(在文件 /include/exec/exec-all.h 中)这与 tcg IR 代码有关(所以,我尝试打印一些结构变量,但我不确定是否我正朝着正确的方向前进)。我还阅读了微型代码生成器自述文件,但找不到生成相关信息。

qemu

3
推荐指数
1
解决办法
1123
查看次数

如何统计QEMU从运行开始到结束执行的客户指令数量?

我想对 QEMU 每秒的客户指令进行基准测试,以将其与其他模拟器进行比较。

如何获取访客指令数?我对用户模式和完整系统模式都感兴趣。

我现在唯一的解决方案是使用简单跟踪exec_tb-d in_asm如何使用 QEMU 的简单跟踪后端来记录所有指令?然后从那里计算指令。但这可能会由于输出操作而大大降低模拟性能,因此我可能必须运行测试程序两次,一次有跟踪,另一次没有跟踪,并希望两次执行是相似的(应该是,特别是对于单线程用户模式模拟)。

我看到了这个-icount选项,从名字上听起来很有希望,但是当我将它传递给 QEMU 4.0.0 时,我没有看到任何事情发生。它应该在某处打印指令计数吗?以下补丁似乎未合并,建议不要:https://lists.gnu.org/archive/html/qemu-devel/2015-08/msg01275.html

qemu

3
推荐指数
1
解决办法
3188
查看次数

KVM/QEMU 和 guest OS 如何处理页面错误

例如,我有一个启用了 KVM 的主机操作系统(例如 Ubuntu)。我使用 QEMU 启动虚拟机来运行来宾操作系统(例如 CentOS)。可以说,对于主机操作系统来说,这个VM只是一个进程。因此,从主机的角度来看,它像往常一样处理页面错误(例如,根据需要分配页面框架,根据需要根据活动/非活动列表交换页面)。

这是问题和我的理解。在来宾操作系统中,由于它仍然是一个成熟的操作系统,我认为它仍然具有处理虚拟内存的所有机制。它看到QEMU 提供的一些虚拟化物理内存。我所说的虚拟化物理内存是指客户操作系统不知道它在虚拟机中,并且仍然像在真实物理机上一样工作,但它所拥有的确实是 QEMU 给出的抽象。因此,即使分配了一个页框,如果该页框不在客户页表中,客户操作系统仍然会触发页面错误,然后将某些页面映射到该框架。更糟糕的是,可能会出现双页错误,即客户机在发生页错误时首先分配一些页框,这会触发主机操作系统的页错误。

然而,我也听说过类似浅(或影子)页表的东西,它似乎可以优化这种不必要的双页错误和双页表问题。我还查看了一些其他内核实现,特别是 unikernels,例如OSvIncludeOS等。我没有找到任何与页面错误和页表机制相关的内容。我确实看到了一些类似的符号page_fault_handler,但没有我在 Linux 内核代码中看到的那么大。在这些 un​​ikernel 实现中,内存管理似乎并不是什么大问题。所以我认为 QEMU/KVM 和一些 Intel 的虚拟化技术已经处理了这个问题。

对这个主题有什么想法吗?或者,如果您对这个问题有一些好的参考文献/论文/资源,或者一些提示将会非常有帮助。

virtualization kernel kvm qemu linux-kernel

3
推荐指数
1
解决办法
3881
查看次数

主机到 Qemu 通信的有效方式

我基本上试图协调两个进程,一个在 Qemu 内(用户模式),另一个在主机上。现在我正在寻找一些方法来设置这种虚拟到主机的通信。

我明白这TCP/UDP总是有效的。然而,有没有更有效的方法呢?我试图搜索 Qemu 本身是否为这种通信提供了某种特定的方式,但到目前为止还没有积极的发现。

任何建议将不胜感激。非常感谢。

qemu virtual-machine

3
推荐指数
1
解决办法
1643
查看次数

在 Linux 主机上运行的 Windows 10 来宾 VM 中运行 WSL2

我有一个 Windows VM,用于代替真实的 WIndows 机器进行测试。我想在该虚拟机内启用 WSL2。

到目前为止我已经:

  • 将 Windows 升级到 v2004。
  • 通过在 kvm-intel 内核模块中启用嵌套虚拟化options kvm-intel nested=1
  • 确保sudo cat /sys/module/kvm_intel/parameters/nested输出“Y”。
  • <cpu model='host-passthrough'>在 virt-manager 的 xml 配置中设置。

还是没有骰子。一旦我根据 WSL2 的要求启用“虚拟机平台”功能,我的虚拟机就会在启动时开始冻结。

有人成功地做到了这一点吗?

qemu windows-subsystem-for-linux

3
推荐指数
1
解决办法
5762
查看次数

在 QEMU 中加载并运行具有 32 位代码的原始二进制文件

我有一个程序集(NASM)文件:

bits 32
start:
    mov dword [0xb8000], 0x2f4b2f4f
    hlt
Run Code Online (Sandbox Code Playgroud)

这会生成一个二进制文件,其中包含:

C7 05 00 80 0B 00 4F 2F 4B 2F F4
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以在 QEMU 中执行此二进制文件中的代码,而无需更改代码且无需添加标头(如 Multiboot 或类似的)?我希望保持二进制文件原样。

x86 assembly binaryfiles qemu nasm

3
推荐指数
1
解决办法
5474
查看次数

如何编译裸机hello_world.c并在qemu-system-aarch64上运行它?

如标题所示,我想编译hello_world.c程序并在qemu-system-aarch64上运行它。这是程序:

#include <stdio.h>
int main()
{
printf("hello world!\n");
}
Run Code Online (Sandbox Code Playgroud)

https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-elf/(这是裸机目录),我可以看到这些工具链:

folder  aarch64-elf -       
folder  aarch64-linux-gnu   -       
folder  aarch64_be-elf  -       
folder  aarch64_be-linux-gnu    -       
folder  arm-eabi    -       
folder  arm-linux-gnueabi   -       
folder  arm-linux-gnueabihf -       
folder  armeb-eabi  -       
folder  armeb-linux-gnueabi -       
folder  armeb-linux-gnueabihf   -       
folder  armv8l-linux-gnueabihf
Run Code Online (Sandbox Code Playgroud)

所以我选择了aarch64-elf(这是正确的吗?)并将其安装在我的ubuntu 16.04机器上并将bin目录添加到路径中。如果我这样做,aarch64-elf-gcc hello_world.c我会收到 _exit、_sbrk、_write、_close、_lseek、_read、_fstat、_isatty 函数的未定义引用错误。所以我尝试添加 -spec=aem.ve-specs 并且它没有抱怨(我不确定这是否正确)。我尝试运行 qemu。

qemu-system-aarch64 -M virt -cpu cortex-a57 -nographic -smp 1 -m 2048 -kernel a.out
Run Code Online (Sandbox Code Playgroud)

它没有给我任何打印。我应该在这里改变什么?

linux qemu bare-metal linux-kernel arm64

3
推荐指数
1
解决办法
5336
查看次数

Android 模拟器无法工作:无法打开 /qemu.conf、未找到加速器等

Visual Studio Xamarin 再次出现问题。\n我目前拥有 Windows Pro 10.0.19043 和最新版本的 Visual Studio 2019 (16.10.4),其中包含以下组件:

\n
Microsoft Visual Studio Enterprise 2019\nVersion 16.10.4\nVisualStudio.16.Release/16.10.4+31515.178\nMicrosoft .NET Framework\nVersion 4.8.04084\nInstalled Version: Enterprise\nMicrosoft Visual C++ 2019\nASP.NET and Web Tools 2019   16.10.526.50910\nASP.NET and Web Tools 2019\nAzure App Service Tools v3.0.0   16.10.526.50910\nAzure App Service Tools v3.0.0\nC# Tools   3.10.0-4.21329.37+246ce641f04b67ef017655275d850bf902a8e40f\nC# components used in the IDE. Depending on your project type and settings, a different version of the compiler may be used.\nCommon Azure Tools   1.10\nProvides common services for use by Azure Mobile Services and …
Run Code Online (Sandbox Code Playgroud)

android qemu adb xamarin visual-studio-2019

3
推荐指数
1
解决办法
3160
查看次数

我可以设置 arm64 docker 映像,但无法运行任何东西

我有一个 CentOS 7 x86_64 虚拟机。我需要在 Oracle Linux 8 arm64 docker 容器中执行一些操作。

我安装了 docker 和 qemu:

$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 
$ sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin \
 qemu-system-arm qemu qemu-user qemu-kvm qemu-kvm-tools libvirt virt-install \
 libvirt-python libguestfs-tools-c
Run Code Online (Sandbox Code Playgroud)

然后我启动 docker 并设置 qemu-user-static:

$ sudo systemctl start docker
$ docker run --rm --privileged multiarch/qemu-user-static --reset
Run Code Online (Sandbox Code Playgroud)

我的 Dockerfile 是:

FROM oraclelinux:8.5
ENV container docker
RUN dnf -y install sssd nscd unzip zip xz which …
Run Code Online (Sandbox Code Playgroud)

x86-64 qemu docker arm64

3
推荐指数
1
解决办法
3962
查看次数