2015年8月19日水曜日

12ステップで作る組込みOS自作入門 (step1~6)

「12ステップで作る組込みOS自作入門」を読んでいるところです.
感想をば.

1/3ぐらい読んで、UNIXとCとgccとMakefileぐらいは扱える人でないと、会得して先に進むのは難しい、そんなレベルの本だと思いました.

それと、組み込みOSの解説とは云え、ブート・ローダーの実装までで500ページあるうちの約半分を費やしているのは本書の特徴かと思われます.いきなり割り込みやスレッドから解説したのじゃ会得したコトにならん!という筆者の意思の現われかと.ひら的に興味があるのはstep8のスレッド以降ではありますが、リンカやELFという普段スルーしていて省みるコトの少ない、ハード寄りのソフトウェアについて具体的に解説してもらえるのはとても有難いと思います.

step1  開発環境の整備
PC上でコンパイラやら焼きソフトを動かすのが目的.とりあえずこの章についてはmanual的にやればよいと思われる.Linuxのコマンド操作は基礎知識として必要.

step2  メモリchipの回路実装、シリアル通信のC実装
まずメモリchipのチップセレクト(CS)回路実装を理解し、その流れでメモリマップドI/Oについて理解する.さらにその流れで、H8に内蔵されているSCIを活用したシリアル通信のソースコードを理解する、、、という流れ.H8のSCIの仕様書を読解しないとサンプルソースコードを完全には理解できないかもしれない.
わたしはシリアル通信のハード(verilog)もソフト(C)も書いた経験があるので、H8のSCIを勉強ネタとして改めて読解する気がないので詳細はスルー.誰かの成果物を流用できればそれでいい.H8のSCIは使いやすそうで良さそうだなという印象を持った.

ひら的にはstep1,step2で新たに学ぶべきところはありませんでした.

step3  メモリの構成、リンカスクリプト
Linuxにせよワンチップマイコンにせよ、コンパイルが正常終了すりゃぁ気分は上々です.リンカの存在なんかは通常は気にしません.この章では実行形式ファイルがリンカによりどのように生成されるのかを解説しています.
この章の問題提起は、FLASH上に領域確保された初期値あり変数に上書き出来ない問題をどう回避するのか?です.回避策はシンプルで、変数領域をRAMに確保し、初期値をROMに確保し、起動時に初期値をROM→RAMへコピーします.ワンチップマイコンの開発環境ですと、ベンダー提供のランタイムルーチンが裏で尽力してくれているのでこういう話を知らずにいました.
メモリ領域定義および変数領域のメモリへの適切な配置を行っているのがリンカであり、リンカの動作を記述するのがリンカスクリプトであると理解できます.リンカスクリプトって、こんな素っ気無い呪文めいていて訳が判らんでしたがこの章を読むと意味が通じるようになります.
        .text : {
                *(.text)
        }

ひら的にはstep3で学ぶべきところ多々あり.

step4   XMODEMプロトコルでのファイル転送、およびアセンブラの解説
H8/3069FのFLASH(512kB)を焼いて使うのではなく、プログラムを内蔵RAM(16kB)に転送してRAM上で動かすのが本書のデバッグの仕方です.そのためにXMODEMプロトコルでファイル転送しますので、XMODEMを実装したソースコードを解説しています.
step4ではアセンブラについても解説されていますが、ここの解説だけでアセンブラを理解するのは難しいかもしれない.

XMODEMとアセンブラの話なので、step4はサラッと読んでおしまい.

step5   ELFをRAM上に展開する
実行形式ファイルの一種であるELFを、H8/3069Fのプログラムで解析し、H8/3069FのRAM上に展開するという、興味深い話題です.
昔々、ELFの仕様を読んだ経験があるのですが、膨大な仕様のうちで必須の箇所が何処なのかは判りませんでした.無駄な学習ってやつでした.この章では、ELFをRAMに展開するローダーの具体例が示されているので、ムダ無く理解できて有難いです.

step6   RAM上のプログラムを走らせる
PCのターミナルから"run"コマンドを打つと、ローダーがentry point(ELFに格納されている情報)へ制御を移す、そういう仕様でソースコードをまとめています.step5とstep6で1つの章を形成しています.

関数のポインタ宣言って、void (*f)(void); という妙な形をしているんですね.知りませんでした.

----
以上で、第一部であるstep1~6はさらりと読了.
全部で12stepあるわけですから、実に半分をメモリとリンカとローダーに費やしています.

この先は、次のようになっています.ひら的には具体的なコトを良く知らないほぼほぼ未体験ゾーんです.(割り込みは除くが)
 step7    割り込み
 step8    スレッド
 step9    スケジューラ
 step10  メモリ管理
 step11  タスク間通信
 step12  外部割込み

step1へ戻る        次へ進む

かしこ


人気ブログランキングへ

0 件のコメント:

コメントを投稿