如何为q35机器制作简单的bootloader
How to make simple bootloader for q35 machine
我正在关注 babystep bootloader guide writing the code on 当我 运行 带有 qemu-system-x86_64 -machine type=pc,accel=kvm -drive 'format=raw,file=boot.bin'
的图像按预期工作时,但我想将机器类型更改为 q35
.
这是我的代码:
.global _start
.code16
.text
_start:
cli
jmp .
.org 510
.word 0xaa55
编译:
gcc \
-Wl,--oformat=binary \
-Wl,-Ttext=0x7c00 \
-Wl,--build-id=none \
-nostartfiles \
-nostdlib \
-m32 \
-o boot.bin \
boot.s
它应该挂起,type=pc
我有以下结果:
如果您尝试在此处键入 Ctrl-Alt-Delete
,则没有任何反应,这是预期的行为。
并且 type=q35
结果如下:
如何使用 type=q35
获得与 type=pc
相同的结果?
P.S.: 部分解:
qemu-img create -f qcow2 -o lazy_refcounts=on disk.qcow2 16G
sudo modprobe nbd max_part=8
sudo qemu-nbd --connect=/dev/nbd0 disk.qcow2
sudo dd if=boot.bin of=/dev/nbd0 status=progress
sudo qemu-nbd --disconnect /dev/nbd0
# ... -drive 'format=qcow2,l2-cache-size=2M,cache-clean-interval=900,file=disk.qcow2' ....
在我理解为什么 raw
格式不起作用以及是否真的是解决该问题的唯一可能方法之前,我不会接受它。
要修复这个错误,图像应该有 515585 字节或更多,我不知道这个数字是从哪里来的,我测试了几种组合直到达到这个结果,如果你尝试少一个字节它不会工作,但更多字节工作正常。
truncate -s515585 boot.bin
我正在关注 babystep bootloader guide writing the code on qemu-system-x86_64 -machine type=pc,accel=kvm -drive 'format=raw,file=boot.bin'
的图像按预期工作时,但我想将机器类型更改为 q35
.
这是我的代码:
.global _start
.code16
.text
_start:
cli
jmp .
.org 510
.word 0xaa55
编译:
gcc \
-Wl,--oformat=binary \
-Wl,-Ttext=0x7c00 \
-Wl,--build-id=none \
-nostartfiles \
-nostdlib \
-m32 \
-o boot.bin \
boot.s
它应该挂起,type=pc
我有以下结果:
Ctrl-Alt-Delete
,则没有任何反应,这是预期的行为。
并且 type=q35
结果如下:
如何使用 type=q35
获得与 type=pc
相同的结果?
P.S.: 部分解:
qemu-img create -f qcow2 -o lazy_refcounts=on disk.qcow2 16G
sudo modprobe nbd max_part=8
sudo qemu-nbd --connect=/dev/nbd0 disk.qcow2
sudo dd if=boot.bin of=/dev/nbd0 status=progress
sudo qemu-nbd --disconnect /dev/nbd0
# ... -drive 'format=qcow2,l2-cache-size=2M,cache-clean-interval=900,file=disk.qcow2' ....
在我理解为什么 raw
格式不起作用以及是否真的是解决该问题的唯一可能方法之前,我不会接受它。
要修复这个错误,图像应该有 515585 字节或更多,我不知道这个数字是从哪里来的,我测试了几种组合直到达到这个结果,如果你尝试少一个字节它不会工作,但更多字节工作正常。
truncate -s515585 boot.bin