私は単純なオペレーティングシステム(楽しい)を作っていますが、私は修正方法を見つけることができない非常に特殊な問題に遭遇しました。Makefileがバイナリコードを正しくコピーしていません
kernel.binをブートして/ boot_sect.binに接続し、結果をos-imageに保存しようとすると、代わりにアセンブリコードがコピーされているように見えますが、kernel.binファイルは期待通りに連結されています。しかし、以下に示すように、boot/boot_sect.binは存在し、正しいバイナリデータを含んでいます。
Windows 10ファイルエクスプローラを使用してboot_sect_real.binにboot/boot_sect.binをコピーした後、同じコマンドを実行する代わりにboot_sect_real.binを実行すると、すべて正常に動作します。したがって、boot_sect.binがディレクトリにあるか、boot_sect.binとboot_sect.asmが同じディレクトリにあるかのいずれかと関係しているようです。私はまた、これは、OS-imageコマンドでのMakefileは、コメントを使用して強調されている(MINGW32メークで)Makefileの
を使用するためにはMinGWを使用しています:
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 [email protected]
%.o : %.asm
nasm $< -f elf -o [email protected]
%.bin : %.asm
nasm $< -f bin -o [email protected]
kernel.bin: kernel/kernel_entry.o ${OBJ}
ld -T NUL -o kernel.tmp -Ttext 0x1000 $^
objcopy -O binary -j .text kernel.tmp kernel.bin
これはどのようなディレクトリであることをIこれは、bootディレクトリの内容です
そして、これは「のようなルックスでこのすべてを実行しているメートルカーネルディレクトリの内容:
(driversディレクトリが今空である)
そして、これはの内容ですboot/boot_sect.binファイル:
ただし、os-imageファイルにはアセンブリコードが含まれていますか?
(私は/ Bでcopyコマンドを使用しています)
私は/ boot_sect.binを起動し、OSイメージに結果を保存するためにkernel.binのバイナリコンテンツを連結することができます方法はありますか?何がうまくいかないの?
UPDATE:私は、この出来事を発見し、それは何の価値がある場合: 私がコマンドで.binファイル指定にもかかわらず、.ASMファイルを使用しています。
ほとんどすべてのWindowsプログラムはどちらのスタイルのスラッシュも受け入れます。しかし、古いコマンドです。comのシェルプログラムは、ほとんどがスラッシュを許可しないので、バックスラッシュを使用する必要があります。 – MadScientist