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

时间:2016-08-09 12:09:36

标签: windows makefile command mingw

我正在制作一个简单的操作系统(为了好玩),但我偶然发现了一个我无法找到解决问题的特殊问题。

当我尝试将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 

这就是我运行所有这些内容的目录: image

这是启动目录的内容: image

这是内核目录的内容: image

(驱动程序目录现在为空)

这是kernel.bin文件的内容: image

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

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

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

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

更新:我发现这种情况发生了,如果它有价值的话: image 即使我在命令中指定了.bin,它也使用.asm文件。

1 个答案:

答案 0 :(得分:0)

嗯,我现在肯定感到愚蠢。

我改变了

copy / b boot / boot_sect.bin + kernel.bin os-image

copy / b boot \ boot_sect.bin + kernel.bin os-image

这是一个简单的角色替换!