无法在Ubuntu上运行qemu,即使对于简单的访客也是如此

时间:2014-03-25 18:29:15

标签: ubuntu nasm loader bootloader qemu

我有一个简单的任务 - 运行此代码" boothi.asm":

use16 
org 0x7C00 

    xor ax, ax 
    mov es, ax 
    mov ds, ax 
    mov ss, ax 
    mov sp, 0x1000 

    mov ax, 3 
    int 10h 

    mov si, mHello
    call print

die: jmp short die

mHello db 'Hello, world - i was booted!',10,13,0


print:
    cld
    pusha
.PrintChar:
    lodsb
    test al, al
    jz short .Exit
    mov ah, 0eh
    mov bl, 7
    int 10h
    jmp short .PrintChar
.Exit:
    popa
    ret

我用它编译了它:

nasm -f bin boothi.asm -o boothi.bin

但我不明白 - 我如何在虚拟机上运行它来测试。我尝试创建软盘映像并使用qemu运行它:

dd if=/dev/zero of=disk.img bs=1024 count=1440
dd if=boothi.bin of=disk.img conv=notrunc

但是下一步 -

qemu -fda disk.img -boot a
我有奇怪的麻烦 -

Could not access KVM kernel module: No such file or directory
failed to initialize KVM: No such file or directory

我尝试安装qemu和kvm。但是这个错误在于。 但qemu尝试运行此代码并检查所有设备 - 硬盘\ cdrom \ floppy - 并编写类似&#34的smth;没有可以加载\ boot"。 如何在Ubuntu上测试这个asm代码?


在我的电脑上输出命令:

root@alena-VirtualBox:~# ls -l /dev/kvm
ls: cannot access /dev/kvm: No such file or directory
root@alena-VirtualBox:~# lsmod|grep kvm
kvm                   359488  0 
root@alena-VirtualBox:~# groups
root
root@alena-VirtualBox:~# qemu -version
No command 'qemu' found, did you mean:
 Command 'qtemu' from package 'qtemu' (universe)
 Command 'aqemu' from package 'aqemu' (universe)
qemu: command not found
root@alena-VirtualBox:~# qemu-system-i386 -version
QEMU emulator version 1.0 (qemu-kvm-1.0), Copyright (c) 2003-2008 Fabrice Bellard
root@alena-VirtualBox:~# cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 42
model name  : Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz
stepping    : 7
microcode   : 0x616
cpu MHz     : 2469.580
cache size  : 6144 KB
fdiv_bug    : no
hlt_bug     : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 5
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx rdtscp lm constant_tsc up pni monitor ssse3 lahf_lm
bogomips    : 4939.16
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

2 个答案:

答案 0 :(得分:3)

查看汇编程序,需要在引导扇区的末尾添加引导签名 - 0xaa55 - 请参阅http://www.nondot.org/sabre/os/files/Booting/nasmBoot.txt

我添加了以下两行,然后你的例子工作了:

times 510-($-$$) db 0   ; Fill the file with 0's
dw 0AA55h               ; End the file with AA55

答案 1 :(得分:0)

如果您的系统支持硬件虚拟化

该错误消息表示qemu正在尝试使用kvm进行虚拟化,无法访问kvm内核设备。您可能会发现文件/dev/kvm不存在。

您的主机需要加载kvm内核模块。

您可以通过运行来检查模块是否已加载:

lsmod|grep kvm

如果没有产生输出,您可以执行以下命令来加载模块:

sudo modprobe kvm

如果您能够运行qemu,则可以通过将以下行添加到文件/etc/modules来使更改持久:

kvm

否则

您可以检查vtlbrvsvm的/ proc / cpuinfo字段标志的输出,如果不存在,则可能不支持虚拟化。

您可能还需要先在BIOS中启用虚拟化。

如果您的计算机不支持硬件虚拟化,则仍然无法正常工作。

在这种情况下,您可能需要强制进行仿真,例如:

qemu -machine pc,accel=tcg (...other options...)

注意

此行为可能是您正在使用的qemu和Ubuntu版本的函数;在Debian上,如果未加载kvm,amd64 qemu似乎会自动回退。

[编辑 - 关于硬件虚拟化的说明等]