OS自作入門 -Advent13-

NO IMAGE

Step4 シリアル経由でファイルを転送する 中盤

このStep時間が思いの外時間がかかるため3編構成で取り組むことにした。今回は中盤戦のmain.cを修正するところから始めよう。

main.cの修正

Step4の前半ではxmodemの実装をしたのでそれを利用する箇所の修正を行う。

xmodem.hのincludeを行い、内容確認用のdump関数を作成し、お待ちかねxmodem_recvを使う処理をmain関数内に追加している。新たにgets関数が登場したが入力から値を受け取るライブラリ関数である。これで文字列を受け取り、strcmp(文字列比較)で比較をして、loadという名称だったらxmodemを使ってload、dumpだったらダウンロードした内容をdumpする。というような動きにになっている。実装したものをGithubに置いておく。

ld.scrの修正

内部に出てくるbufferの開始位置をリンカ・スクリプトに定義する。これでRAM領域にダウンロードした結果を展開することになる。

serial.h, serial.cの修正

次にシリアル受信用のライブラリ関数の追加を行う。これまでは画面出力用にH8 =シリアル出力=> ターミナルという感じだったがコマンド入力の受付をするために入力用の処理を追加する必要がある。新たにserial_is_recv_enableserial_recv_byteという関数を追加。Github serail.cに置いておく。

lib.h, lib.cの修正

さて、上述の通りここではget関数が出てくるのでそれも追加で実装しよう。lib.h, lib.cを修正する。エコーバック という処理が出てきた。初耳。ターミナルから入力した文字をそのままターミナルに出力するというやつ。これがないと無反応に見えるとのこと。なるほど。修正したファイルはGithub lib.cに置いておく。

Makefileの修正

xmodem.cをコンパイル対象に含める必要がある。その修正。

OBJS += lib.o serial.o

これを

OBJS += lib.o serial.o xmodem.o

こうしただけ。


さて、今日は少し短いがこれくらいに。次はようやく実行するフェーズだが先に軽く流し読んだらアセンブラの話とかターミナルの話とかが10ページ前後語られていたのである程度ボリュームがありそう。ちょっと新しい話が多くて消化不良気味だが全部読み終えたらまた最初から一読だけしないとだな。