我有这个makefile:
ASM = nasm
.PHONY: floppyimage kernel bootloader everything
goldos: everything
qemu-system-i386 -fda build/goldos.img
norun: everything
everything: floppyimage kernel bootloader build
floppyimage: build/goldos.img
build/goldos.img: build bootloader kernel
dd if=/dev/zero of=build/goldos.img bs=512 count=2880
mkfs.fat -F 12 -n "GOLDOS" build/goldos.img
dd if=build/bootloader.bin of=build/goldos.img conv=notrunc
mcopy -i build/goldos.img build/kernel.bin "::kernel.bin"
bootloader: build/bootloader.bin
build/bootloader.bin: build bootloader/bootloader.asm
$(ASM) bootloader/bootloader.asm -fbin -obuild/bootloader.bin
kernel: build/kernel.bin
build/kernel.bin: build kernel/kernel.asm
$(ASM) kernel/kernel.asm -fbin -obuild/kernel.bin
clean:
rm -r build
build:
mkdir -p build
出于某种愚蠢的原因,它开始说:
dd if=/dev/zero of=build/goldos.img bs=512 count=2880
2880+0 records in
2880+0 records out
1474560 bytes (1.5 MB, 1.4 MiB) copied, 0.00605087 s, 244 MB/s
mkfs.fat -F 12 -n "GOLDOS" build/goldos.img
mkfs.fat 4.2 (2021-01-31)
dd if=build/bootloader.bin of=build/goldos.img conv=notrunc
1+0 records in
1+0 records out
512 bytes copied, 5.852e-05 s, 8.7 MB/s
mcopy -i build/goldos.img build/kernel.bin "::kernel.bin"
init :: non DOS media (here, the parentesis are not part of the output)
Cannot initialize '::'
::kernel.bin: Success
make: *** [makefile:18: build/goldos.img] Error 1
bootloader.asm(在 github 上,由于超过 300 行)
我无法再运行这个,在网上找不到任何信息,kernel.asm 没有任何信息,
当我向该文件添加一些内容时,mcopy 开始起作用,但我删除了它。
已经尝试删除输出文件,但同样的错误。
将
jmp start
替换为 jmp strict short start
,然后添加 nop
。
BIOS 期望标头之前有 3 个字节,我可以通过在 talk
标签内添加对 fatal_reboot
的调用来获得更多空间,因为每个引用都在 fatal_reboot
之前运行对话。