Skip to content
uchan-nos edited this page Oct 23, 2016 · 3 revisions

はりぼて OS で ELF バイナリのアプリを起動したい!

変更したところメモ

  • haribote/ipl09.nas

    • 読み込むシリンダ数を 11 シリンダくらいに増やす
    • harib27f 時点でのアプリ数が結構ぎりぎりなので、9 シリンダのままだと ELF バイナリをディスク末尾に追加すると途中までしか読み込まれなかったりする。
  • haribote/elf.h,c

    • ELF バイナリを解析するのに必要な型定義など
  • haribote/console.c

    • OS 本体の変更点で最も本質的な部分
    • .hrb アプリの起動処理の横に、.elf アプリの起動処理を付け足す。
    • API は大部分はそのまま動くが、EDX == 8, 9, 10 の処理(malloc 関連の処理)は .hrb のヘッダに依存しているので、場合分けして .elf にも対応させる必要もある。(hrb_api 関数)
  • apilib/Makefile

    • apilib.lib を ELF に変換する
    • もともと apilib.lib は COFF 形式のオブジェクトファイルの集まり。
    • objcopy -I coff-i386 apilib.lib -O elf32-i386 libapi.a
  • app_make_elf.txt

    • app_make.txt を参考にして新規作成(詳しくは後述)
    • i386-elf をターゲットにビルドした GCC と LD を使うのがポイント。
  • haribote_elf.lds

    • .elf アプリの生成に使うリンカスクリプト
    • .text, .data, .bss セクションに加えて .stack, .malloc セクションを生成。
  • elines/elines.c

    • もともとの lines アプリをディレクトリごとコピペし、ファイル名を変更したもの
  • elines/Makefile

    • もともとの Makefile のコピー
    • しかし、ELF バイナリでは Makefile 中の STACKMALLOC は使われないので、2 行を削除しても良い。
  • elines/ld_variables.lds

    • Makefile にあった STACKMALLOC の定義はこちらへ。

app_make_elf.txt

haribote_elf.lds

Clone this wiki locally