Knt Blog

あっちこっちの趣味を書き留める場所

OS自作入門(2日目):読書とアセンブリコードいじり

knt-eagle.hatenablog.com

↑の続き

環境

  1. OS: Windows 10 Pro
  2. Memory(多分関係ない): 16GB
  3. Console: Windows PowerShell 5.1.18362.1171
  4. WSL上のLinux(手順7でのみ使用): Ubuntu 20.04.01 LTS
  5. NASM: 2.15.05
  6. VirtualBox: 6.1.18 r142142

今回やったこと

  1. 読書(OS自作入門):

    1. P29-42:アセンブラの関数、レジスタ、メモリの説明
  2. ソースコード書き換え for nasm (project/02_day/helloos3/helloos.nas)

    1. RESBTIMESDBに変更
    2. 0x7dfe-$0x7dfe-($-$$)に変更

    (参考サイト様①:Ubuntu 18.04で「30日でできる!OS自作入門」をやりたい[2日目] - free(malloc(sizeof(MRM)));)

  3. nasmでアセンブル

     nasm helloos.nas -o helloos.img
    
  4. VirtualBoxで実行

    f:id:knt_eagle:20210126014545p:plain
    実は表示する文字列を少し変えてみた

    上手くいってしまったが、参考①筆者の方によるUbuntu+qemuエミュレーションでは、2.bの変更部分にて、0x7dfe-($-$$)が0で埋めたいブートセクタのバイト数(=510)に一致しなかったためにエラーが出たみたいだ。こちらの方法でエラーが出なかった理由は分からないが、確実に510バイト指定をしていることを保証するため、参考①の方法に従って、TIMES 0x7dfe-0x7c00-($-$$)に変えておくことにした。

  5. VirtualBoxで再実行

    f:id:knt_eagle:20210126014545p:plain
    動作自体は先程と変わらず

  6. Makefile作ってみた

    (参考サイト様②:Linuxで書くOS自作入門 2日目 - Tsurugidake's diary)

     default:
         make img
    
     ipl.bin: ipl.asm Makefile
         nasm ipl.asm -o ipl.bin -l ipl.lst
    
     tail.bin:   tail.asm Makefile
         nasm tail.asm -o tail.bin -l tail.lst
    
     helloos.img:    ipl.bin tail.bin Makefile
         cat ipl.bin tail.bin > helloos.img
    
     asm:
         make -r ipl.bin
    
     img:
         make -r helloos.img
    
     clean:
         -rm ipl.bin
         -rm tail.bin
         -rm ipl.lst
         -rm tail.lst
    
     src_only:
         make clean
         rm helloos.img
    
  7. Makeした(ここだけWSL上の操作)

     make img
    
  8. VirtualBoxで実k(ry

    f:id:knt_eagle:20210126014545p:plain
    動作自体は先程と変わらず(2回目)

今後の開発環境についての小言

手っ取り早く勉強を始められると思ってPowerShell+VirtualBoxで開発を進めていたが、ググって出てくる環境のほとんどがLinux(+qemu)+VirtualBoxなので、今後進めにくくなるかもしれない。あえてPowerShellで進めてぶち当たった問題と解決策をこのブログで共有していくのはありかもしれないが、WSLでUbuntu動かせるのに、そんな需要あるのだろうか...?