我有一个简单的任务 - 运行此代码" 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:
答案 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
您可以检查vt
或lbrv
或svm
的/ proc / cpuinfo字段标志的输出,如果不存在,则可能不支持虚拟化。
您可能还需要先在BIOS中启用虚拟化。
如果您的计算机不支持硬件虚拟化,则仍然无法正常工作。
在这种情况下,您可能需要强制进行仿真,例如:
qemu -machine pc,accel=tcg (...other options...)
此行为可能是您正在使用的qemu和Ubuntu版本的函数;在Debian上,如果未加载kvm,amd64 qemu似乎会自动回退。
[编辑 - 关于硬件虚拟化的说明等]