読者です 読者をやめる 読者になる 読者になる

【組込OS自作入門】1stステップのメモ

環境セットアップがこの章のメイン。
ubuntu16.04LT上にクロス開発環境を構築した.
12ステップすべてを振り返ると、ここの環境構築に一番時間がかかった。

基本概念のお勉強

セルフコンパイラ

プログラムを実行するマシンで開発することを、セルフ開発という。
そのときに使用するコンパイラをセルフコンパイラと呼ぶ。

ロスコンパイラ

開発用のマシンをターゲットマシンと別に用意する場合には、クロス開発という。
そのときに使用するコンパイラをクロスコンパイラと呼ぶ。

クロス環境構築の手順

binutils, gccのダウンロード

binutils-2.19.1を以下から持ってくる
Index of /pub/GNU/binutils

gcc-3.4.6は以下から持ってくる。
http://www.ring.gr.jp/pub/GNU/gcc/

binutils-2.19.1のインストール

tar xvzf binutils-2.19.1.tar.gz
cd binutils-2.19.1
./configure --target=h8300-elf --disable-nls --disable-werror
make
sudo make install

gcc-3.4.6のインストール

tar xvzf gcc-3.4.6.tar.gz
$ cd gcc-3.4.6
$ ./configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --disable-werror --enable-languages=c
$ make
$ sudo make install

本に書かれている通り、gcc/collect2.cを直さなくてはならない。
一行直すのみ。

ただ、直してからmakeしても新たに下記のエラーが出る。

f:id:yusuke_ujitoko:20160829011018p:plain

この時にはgcc3.4.6/gcc/config/h8300/h8300.cに、
以下のパッチを当てる必要がある。

55,56c55,56
< static void h8300_emit_stack_adjustment (int, unsigned int);
< static int round_frame_size (int);
---
> static void h8300_emit_stack_adjustment (int, HOST_WIDE_INT);
> static HOST_WIDE_INT round_frame_size (HOST_WIDE_INT);
371c371
< h8300_emit_stack_adjustment (int sign, unsigned int size)
---
> h8300_emit_stack_adjustment (int sign, HOST_WIDE_INT size)
400,401c400,401
< static int
< round_frame_size (int size)
---
> static HOST_WIDE_INT
> round_frame_size (HOST_WIDE_INT size)

これでmakeできる。

フラッシュROM書き込みツール

http://asakita.net/kabekin/2013/01/1209.html
からそのまま引用。

H8Writerを下記から入手
http://mes.sourceforge.jp/h8/writer-j.html
/usr/local/binにコピーして実行属性を付けておく
#chmod +x h8write
ubuntu10.04 では M/B内蔵COM0はデバイス名=ttyS0でOK

Hello world

各種ファイルを写経する。
ここのへんは黙って写していく作業。

  • main.c
  • startup.s
    • スタートアッププログラム。
    • 各種初期化を行ったあとmain()関数を呼び出す処理が書かれている
  • vector.c
    • 割り込みベクタ。
    • 関数へのポインタの定義がある。
  • lib.h, lib.c
  • serial.h, serial.c
  • defines.h
  • ld.scr
  • Makefile
make
make image
sudo make write

として書き込む.

シリアルUSBケーブルの種類によって書き込めない場合がある.
これに切り替えてパスできた.
https://www.amazon.co.jp/gp/product/B00QUZY4WO/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1

あとはminicomをインストールし,シリアル通信の設定を行う.
通信の値は下記のようにする

ボーレート 9600bps
データ長 8ビット
ストップビット長 1ビット
パリティ 無し
ハードウェアフロー制御 無し
ソフトウェアフロー制御 無し


f:id:yusuke_ujitoko:20161001103856p:plain
バッファに残ってるけど,成功