Makefile 没有正确复制二进制代码

Makefile not copying binary code properly

我正在努力制作一个简单的操作系统(为了好玩),但我偶然发现了一个相当奇怪的问题,我找不到解决方法。

当我尝试将 kernel.bin 连接到 boot/boot_sect.bin 并将结果保存在 os-image 中时,它似乎复制了汇编代码,但是 kernel.bin 文件按预期连接。但是 boot/boot_sect.bin 确实存在并且确实包含正确的二进制数据,如下所示。

当我使用 Windows 10 文件资源管理器将 boot/boot_sect.bin 复制到 boot_sect_real.bin 时,然后 运行 使用相同的命令但在 boot_sect_real.bin 上,一切都按预期工作。因此,它似乎与 boot_sect.bin 在目录中或 boot_sect.bin 和 boot_sect.asm 在同一目录中有关。我也在使用 MinGW 来使用 Makefile (使用 mingw32-make)

这是 Makefile,os-image 命令使用注释突出显示:

C_SOURCES = $(wildcard kernel/*.c drivers/*.c)
HEADERS = $(wildcard kernel/*.h drivers/*.h)

OBJ = ${C_SOURCES:.c=.o}

all: os-image

########################################
os-image: boot/boot_sect.bin kernel.bin
    copy /b $<+kernel.bin os-image
########################################

%.o : %.c ${HEADERS}
    gcc -ffreestanding  -c $< -o $@

%.o : %.asm
    nasm $< -f elf -o $@

%.bin : %.asm
    nasm $< -f bin -o $@

kernel.bin: kernel/kernel_entry.o ${OBJ}
    ld -T NUL -o kernel.tmp -Ttext 0x1000 $^
    objcopy -O binary -j .text kernel.tmp kernel.bin 

这就是我 运行 将所有这些放在其中的目录:

这是引导目录的内容:

这是内核目录的内容:

(drivers目录现在是空的)

这是 kernel.bin 文件的内容:

这是 boot/boot_sect.bin 文件的内容:

但是os-image文件包含汇编代码?

(我正在使用带 /b 的复制命令)

有什么方法可以将 kernel.bin 的二进制内容连接到 boot/boot_sect.bin 并将结果保存在 os-image 中?怎么了?

更新:我发现这件事发生了,如果它值得的话: 它正在使用 .asm 文件,即使我在命令中指定了 .bin。

好吧,我现在确实觉得自己很蠢。

我变了

复制/b boot/boot_sect.bin+kernel.bin os-图片

复制/b boot\boot_sect.bin+kernel.bin os-图片

这是一个简单的字符替换!