gpt4 book ai didi

assembly - 如何为q35机器制作简单的bootloader

转载 作者:行者123 更新时间:2023-12-04 07:16:11 31 4
gpt4 key购买 nike

我正在关注 babystep bootloader guideGAS as suggested here 上编写代码当我使用 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

关于assembly - 如何为q35机器制作简单的bootloader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68746570/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com