OS自作入門 -Advent20-
Step6 もう一度、Hello World 前半 帰ってきたHello Worldとのことで、 1step目でやったHello WorldはROMに書き込んで直接実行していたものだった。このstepではブートローダーを使用しRAM上でHello Worldが実行できるようにしていく。 エントリ・ポ […]
未知との出会いとワクワクを。
Step6 もう一度、Hello World 前半 帰ってきたHello Worldとのことで、 1step目でやったHello WorldはROMに書き込んで直接実行していたものだった。このstepではブートローダーを使用しRAM上でHello Worldが実行できるようにしていく。 エントリ・ポ […]
Step5 ELFフォーマットの展開 後半 前回はreadelfの結果を用いてelfフォーマットの中身を読んでみた。さて、今回はこれを元にしてelfフォーマットのファイルをメモリ内に展開するコードを追加する。 追加・編集するのは以下のファイル。 elf.h, elf.c (追加) ELF形式の解析 […]
Step5 ELFフォーマットの展開 前半 これまででファイルの転送ができるようになった。そこで次は実行形式ファイルを転送しメモリ上に展開することをやってみる。 オブジェクト・ファイル・フォーマット 詳細に触れていなかったがelf形式のような内部がヘッダなどによって特定のフォーマットで記述されている […]
Step4 シリアル経由でファイルを転送する 延長戦 意外と長くてstep4は4部構成になってしまった。今回はアセンブラについての詳細説明とまとめになりそうだ。 コンパイルしてアセンブラを見てみる サンブルとしてlib.cにテスト用の関数#funcを定義してそれをmain.c追加した状態でコンパイル […]
Step4 シリアル経由でファイルを転送する 後半 この記事でstep4は3つめの記事になる。おそらくあと一回で終わるだろう。新しい知識の上に新しい知識を重ねるので振り返ることが多くて理解に時間がかかるな。続きにいくとしよう。Step4を通して、ブートローダーとは何なのか、どのような手順でOSを起動 […]
Step4 シリアル経由でファイルを転送する 中盤 このStep時間が思いの外時間がかかるため3編構成で取り組むことにした。今回は中盤戦のmain.cを修正するところから始めよう。 main.cの修正 Step4の前半ではxmodemの実装をしたのでそれを利用する箇所の修正を行う。 xmodem.h […]
Step4 シリアル経由でファイルを転送する 前半 このstepではブートローダーというものを作成していくことになりそうだ。ブートローダーがなんであるのか。に関しては後述。 さて始めよう。 ブートローダー 実はこれまでのステップでやっていたことはブートローダーを作成するまでの前準備にすぎなかった。H […]
Step3 静的変数の読み書き 後半 Step3の前半ではメモリの仕組み、どこに何を配置すべきなのか、リンカとローダーの違い辺りの知識が深まった。今回はそれに対応するようにプログラムを書き直していくことになりそう。 変数の初期値が配置されるアドレス(PA)とプログラムが変数にアクセスする際のアドレス […]
Step3 静的変数の読み書き 前半 どうやらこの本は前半にある程度の知識に関する座学、その後にソースコードに手を加えて先に進んでいくという流れらしい。なので私にとっては前半部分の方がやや敷居が高い。ソースコードの方になるとまぁ読めるし書くのも苦痛ではないのでそんなでもない。 ということで今日はメモ […]
Step2 シリアル通信 後半 前回の話でシリアル通信とデータ転送に関して少し理解が進んだ。メモリ空間上にマッピングされているアドレスに対してbyteを書き込むことによってモードの調整や制御ができるようになる。ことシリアル通信に関して言えば、SSRとTDRを用いて送信完了ビットが立っている時にTDR […]