我正在制作一个简单的操作系统(为了好玩),但我偶然发现了一个我无法找到解决问题的特殊问题。
当我尝试将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
(驱动程序目录现在为空)
(我正在使用带/ b的复制命令)
有什么方法可以将kernel.bin的二进制内容连接到boot / boot_sect.bin并将结果保存在os-image中?出了什么问题?
答案 0 :(得分:0)
嗯,我现在肯定感到愚蠢。
我改变了
copy / b boot / boot_sect.bin + kernel.bin os-image
到
copy / b boot \ boot_sect.bin + kernel.bin os-image
这是一个简单的角色替换!