2016-08-09 9 views
0

私は単純なオペレーティングシステム(楽しい)を作っていますが、私は修正方法を見つけることができない非常に特殊な問題に遭遇しました。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ディレクトリの内容です image

image

そして、これは「のようなルックスでこのすべてを実行しているメートルカーネルディレクトリの内容: image

(driversディレクトリが今空である)

これはkernel.binファイルの内容です: image

そして、これはの内容ですboot/boot_sect.binファイル: image

ただし、os-imageファイルにはアセンブリコードが含まれていますか? image

(私は/ Bでcopyコマンドを使用しています)

私は/ boot_sect.binを起動し、OSイメージに結果を保存するためにkernel.binのバイナリコンテンツを連結することができます方法はありますか?何がうまくいかないの?

UPDATE:私は、この出来事を発見し、それは何の価値がある場合: image 私がコマンドで.binファイル指定にもかかわらず、.ASMファイルを使用しています。

答えて

0

さて、私は確かに今は気が気になりません。

私は

コピー/ Bブート/ boot_sect.bin + kernel.bin OS-画像

へのコピー/ Bブートを変更\ boot_sect.bin + kernel.bin OS-画像

これは単純な文字の置き換えでした。

+1

ほとんどすべてのWindowsプログラムはどちらのスタイルのスラッシュも受け入れます。しかし、古いコマンドです。comのシェルプログラムは、ほとんどがスラッシュを許可しないので、バックスラッシュを使用する必要があります。 – MadScientist

関連する問題