标签: qemu

加载内核时QEMU崩溃

我已经创建了一个C内核,我正在QEMU模拟器中加载内核.但是当我加载内核时,它似乎崩溃QEMU并且它抱怨它无法访问kvm文件夹.这是否意味着缺少kvm,或者我不是管理员; 因为我以root管理员身份登录 以下是源自终端的错误信息:

danny@ubuntu:~/Desktop$ sudo qemu -kernel os.bin
open /dev/kvm: No such file or directory
Could not initialize KVM, will disable KVM support
pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"
qemu: fatal: Trying to execute code outside RAM or ROM at 0x000a0000

EAX=00004500 EBX=00000000 ECX=00000000 EDX=00000000
ESI=00000000 EDI=00000000 EBP=00000000 ESP=00009fe0
EIP=0000fdfb EFL=00000002 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =9000 00090000 ffffffff 00cf9300
CS =9020 00090200 0000ffff 00009b0f
SS =9000 00090000 0000ffff 00009300
DS =9000 00090000 0000ffff 00009300
FS =9000 00090000 …
Run Code Online (Sandbox Code Playgroud)

c linux kernel qemu emulation

7
推荐指数
1
解决办法
2万
查看次数

如何在libvirt中创建瞬态域?

如何使用libvirt创建瞬态域?(使用QEMU/KVM作为后端)

该文档讨论了此链接上的瞬态域和持久域之间的区别:http://wiki.libvirt.org/page/VM_lifecycle#Transient_guest_domains_vs_Persistent_guest_domains

尽管如此,我还没有找到任何关于如何创建一个的具体例子.

我找到的唯一指针是在这封电子邮件中:https://www.redhat.com/archives/libvirt-users/2011-August/msg00057.html,其中维护者建议在XML的描述字段中添加<transient/>标记<disk>.

当我尝试时,我得到了这个令人失望的答案:"libvirtError: unsupported configuration: transient disks not supported yet".

这个功能真的"还不支持",还是我错过了什么?该文档让我觉得应该支持这一点.

任何与C或Python绑定,virsh或virt-manager相关的答案都将受到高度赞赏!

virtualization kvm qemu libvirt

7
推荐指数
1
解决办法
3323
查看次数

HLT指令导致QEMU中的一般保护错误

我在QEMU下运行我的保护模式内核,并且在尝试执行汇编程序HLT指令时导致一般保护错误.CPL为0,EFLAGS中IOPL为0,启用中断.

这可能是QEMU问题还是我错过了什么?

在模拟SMP(对称多处理器)时会发生这种情况.

x86 assembly qemu

7
推荐指数
1
解决办法
578
查看次数

如何用"x/i $ pc"在GDB中反汇编16位x86引导扇区代码?它被视为32位

例如,使用BIOS打印a到屏幕的引导扇区main.asm:

org 0x7c00
bits 16
cli
mov ax, 0x0E61
int 0x10
hlt
times 510 - ($-$$) db 0
dw 0xaa55
Run Code Online (Sandbox Code Playgroud)

然后:

nasm -o main.img main.asm
qemu-system-i386 -hda main.img -S -s &
gdb -ex 'target remote localhost:1234' \
    -ex 'break *0x7c00' \
    -ex 'continue' \
    -ex 'x/3i $pc'
Run Code Online (Sandbox Code Playgroud)

我明白了:

0x7c00:      cli    
0x7c01:      mov    $0x10cd0e61,%eax
0x7c06:      hlt 
Run Code Online (Sandbox Code Playgroud)

所以看起来它mov ax, 0x0E61被解释为32位mov %eax并且将下一条指令int 0x10作为数据.

我怎么能告诉GDB这是16位代码?

也可以看看:

x86 assembly gdb qemu disassembly

7
推荐指数
3
解决办法
3732
查看次数

QEMU没有安装在Ubuntu中

./configure它显示此错误后:

ERROR: pixman >= 0.21.8 not present. Your options:
         (1) Preferred: Install the pixman devel package (any recent
             distro should have packages as Xorg needs pixman too).
         (2) Fetch the pixman submodule, using:
             git submodule update --init pixman
Run Code Online (Sandbox Code Playgroud)

installation ubuntu qemu failed-installation ubuntu-14.04

7
推荐指数
1
解决办法
8933
查看次数

无法在vfio pci设备的文件描述符上使用pread

所以我和qemu kvm合作了一段时间,现在我需要通过PCI设备.我做了所有必要的程序来完成这项工作:启用iommu,modprobed vfio模块,绑定设备到vfio并检查vfio组确实是创建的等等...但是当我用任何pci设备启动qemu时,我收到错误消息:

vfio:无法读取设备配置空间

我深入研究qemu的代码,看看问题可能是什么,并发现问题出现在设备的pread上.即使偏移量为0,也会发生这种情况,并且对文件描述符执行正常读取时没有问题,因为我更改了代码以进行测试.检查errno因为pread失败的原因给我一个' 非法搜索 '错误消息.

我写了一些代码,看看这是否发生在qemu上下文之外(认为它可能是qemu代码中干扰设备的东西),并且有同样的问题.我也尝试用pread读取一个普通的文件,并且完美地工作......这是我编写的代码来测试它,我把它分解了一下,以便能够指出更相关的部分:

#define BUF_SIZE 4096

int main(){     
    char buf[BUF_SIZE], buf1[BUF_SIZE], buf2[BUF_SIZE];         
    int ret,group_fd, fd, fd2;  
    size_t nbytes = 4096;   
    ssize_t bytes_read;     
    int iommu1, iommu2;

    int container, group, device, i;
    struct vfio_group_status group_status = { .argsz = sizeof(group_status) };
    struct vfio_iommu_type1_info iommu_info = { .argsz = sizeof(iommu_info) };
    struct vfio_iommu_type1_dma_map dma_map = { .argsz = sizeof(dma_map) };
    struct vfio_device_info device_info = { .argsz = sizeof(device_info) };    
    container = open("/dev/vfio/vfio",O_RDWR);        

    if(ioctl(container,VFIO_GET_API_VERSION)!=VFIO_API_VERSION){
        printf("Unknown api version: %m\n");    
    } …
Run Code Online (Sandbox Code Playgroud)

c linux virtualization qemu vfio

7
推荐指数
1
解决办法
399
查看次数

如何替换`qemu-system -redir`命令参数?

我有一个使用以下选项启动qemu的脚本:

qemu-system-x86_64 [...] -net nic,model=rtl8139 -net user,hostfwd=tcp::5555-:1522 -net dump,file=/tmp/vm0.pcap -redir tcp:9999::9 -redir tcp:17010::17010 -redir tcp:17013::17013

我想更新脚本以使用现代qemu选项。

我尝试使用以下参数,如手册页中所述

qemu-system-x86_64 [...] -net nic,model=rtl8139 -net dump,file=/tmp/vm0.pcap -net user,id=tcp1522,hostfwd=tcp::5555-:1522 -netdev user,id=tcp9,hostfwd=tcp::9999-:9 -netdev user,id=tcp17010,hostfwd=tcp::17010-:17010 -netdev user,id=tcp17013,hostfwd=tcp::17013-:17013

但是来宾无法再访问网络,主机也无法在转发的端口上访问该网络。

不推荐使用的-redir选项的确切含义是什么?

networking qemu

7
推荐指数
1
解决办法
2717
查看次数

如何在 Mac 主机上将 USB 与 QEMU 结合使用?

我尝试以下方法通过 macOS 主机上运行的 Ubuntu 来宾访问 USB 存储设备:

sudo qemu-system-x86_64 -m 8G -boot d -smp 4 -net nic -net user \
   -hda Ubuntu/ubuntu.img -machine type=q35,accel=hvf \
   -device intel-hda -device hda-duplex \
   -device nec-usb-xhci -device usb-host,vendorid=0x0781,productid=0x5580
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法从访客访问 USB 设备。访客系统日志说:

... kernel: [...] usb 5-1: USB new high-speed USB device number 3 using xhci_hcd
... kernel: [...] usb 5-1: New USB device found, idVendor=0781, idProduct=5580, bcdDevice= 0.10
... kernel: [...] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
... kernel: [...] usb …
Run Code Online (Sandbox Code Playgroud)

macos usb qemu

7
推荐指数
1
解决办法
7746
查看次数

如何从 Docker 容器内检测 QEMU 模拟?

从 docker 容器(在我的例子中运行基于 Debian Busty 的映像)中,如何检测它是否在 QEMU 模拟下运行(如在 ARM Mac 上运行 AMD64 映像)?

从非 docker 的角度来看,我看到了cpuinfo可能会出现这种情况的建议,但当从容器内部运行时,它不会产生任何与 QEMU 直接相关的内容:

$ docker run -it --entrypoint /bin/bash debian-buster-based-amd64-image

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

root@c93f6a8ec754:/app# cat /proc/cpuinfo
processor   : 0
BogoMIPS    : 48.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 asimddp sha512 asimdfhm dit …
Run Code Online (Sandbox Code Playgroud)

arm qemu docker debian-buster apple-m1

7
推荐指数
1
解决办法
1765
查看次数

Linux x86_64 上的 QEMU2 不支持 Android Studio ARM64 AVD?

我在 Linux x86_64 上的 Android Studio 中创建了一个 ARM64 的虚拟设备。
当我从 GUI 启动它时,它显示该进程已终止。
当我从命令行启动它时:
./emulator -avd VM2
它显示:
PANIC: Avd's Cpu Architecture 'arm64' is not supported by the QEMU2 emulator on x86_64 host.
详细信息:
主机CPU:Intel Core i5-4210U;启用英特尔VT;64 位;
主机操作系统:Debian GNU/Linux 11;64 位;
Android Studio:Linux 版 Bumblebee;Linux 4.0;
安卓系统:API32 arm64-v8a;12.0arm64-v8a;
系统支持KVM;

我尝试过:
完全重新安装Android Studio;
不同版本的Android Studio;
不同版本的Android ARM64;
安装 qemu-system-arm;gcc-arm...;

但它们都不起作用。我该如何解决?

arm qemu android-virtual-device android-studio

7
推荐指数
1
解决办法
3679
查看次数