50424


現在、Linux上でOS開発をしようと考えています。

<http://www.brokenthorn.com/Resources/OSDev11.html>

上記のサイトの下にある **DOWNLOAD DEMO HERE**
でソースコードをダウンロードし、コンパイルすることはできますがバイナリファイルを連結してQEMUで起動することができません。  
QEMUで起動可能なイメージファイルをLinuxで作成するにはどうすればいいですか？

自分なりに試したOSの連結方法を下記に示します。(失敗した方法です)

[code]

    cat KRNLDR.SYS KRNL.SYS > KERNEL
    
    dd if=/dev/zero of=os.img bs=512 count=10000
    dd if=Boot1.bin of=os.img bs=512 conv=notrunc
    dd if=KERNEL of=os.img bs=512 seek=1 conv=notrunc
    
[/code]

この方法ではダメでした。  
どうすればうまく起動できるでしょうか？知識のある方よろしくお願いします。


CC BY-SA 4.0
2018-11-12T11:20:36.253
50246
2019-01-12T10:05:01.503
2019-01-12T10:05:01.503
3060
24999
question
linux c unix kernel assembly
OSのイメージファイルの作成方法が分からない


"DOWNLOAD DEMO
HERE"をクリックしてダウンロードした"Demo4.zip"というファイルを展開すると、３つのディレクトリ、Stage1、Stage2、Kernel、に展開されました。

各ディレクトリには、アセンブラ(ASM)で書かれたソースプログラムと、"BUILE.bat"というファイルが入っています。  
"Kernel/BUILE.bat"の内容は次のようになっています。

[code]

    nasm -f bin Stage3.asm -o KRNL.SYS
    copy KRNL.SYS  A:\KRNL.SYS
    
    pause
    
[/code]

同様に、Stage1とStage2の下のBUILD.batは、

[code]

    nasm -f bin Boot1.asm -o Boot1.bin
    
    PARTCOPY Boot1.bin 0 3 -f0 0 
    PARTCOPY Boot1.bin 3E 1C2 -f0 3E 
    
    pause
    
[/code]

と

[code]

    nasm -f bin Stage2.asm -o KRNLDR.SYS
    
    copy KRNLDR.SYS  A:\KRNLDR.SYS
    
    pause
    
[/code]

それぞれのバッチ(bat)ファイルは、ブートドライブ(Aドライブに挿入されたフロッピーディスク）を起動ディスクにする操作の一部を行っているのではないかと思われます。(どのバッチファイルも、アセンブラのソースプログラムをアッセンブルして、出来上がったファイルをAドライブに書き込んでいますので）

"Stage1/BUILE.bat"、"Stage2/BUILE.bat"、"Kernel/BUILE.bat"を順に実行し、そのままマシンを再起動（そうすれば、Aドライブのフロッピーを使って起動されるはず）してみてはいかがでしょうか。


CC BY-SA 4.0
2018-11-13T09:02:36.687
50284
2018-11-13T09:02:36.687
217
50246
answer


Linux上でのフロッピーディスクイメージ作成に成功しました。  
以下は自分が書いたMakefileです。

[code]

    boot1.bin: Boot1.asm
        nasm -f bin $^ -o $@
    KRNLDR.SYS: Stage2.asm
        nasm -f bin $^ -o $@
    KRNL.SYS: Stage3.asm
        nasm -f bin $^ -o $@
    
    k.img: boot1.bin KRNL.SYS KRNLDR.SYS
        mformat -f 1440 -C -B boot1.bin -i $@ ::
        mcopy KRNLDR.SYS -i $@ ::
        mcopy KRNL.SYS -i $@ ::
    
    run: k.img
        qemu-system-i386 -drive file=k.img,format=raw,if=floppy -boot a
    
[/code]


CC BY-SA 4.0
2018-11-19T00:47:37.137
50424
2018-11-19T00:47:37.137
24999
50246
answer