組み込み自作OS-Macにて-Step1-その5

##############「Hello World」のソースコード(1.2.1 - 1.2.9)###################
ここhttp://kozos.jp/kozos/osbook/osbook_03/01/bootload/に、本書第1章で作成するプログラムのソースコードがおいてある。今回は、環境構築のテストが目的なので、そのまま流用させてもらう。

#クロス開発のソースコードは~/12step/src/01/bootloadに置く
cd ~/12step/src/
mkdir 01
cd 01
mkdir bootload
cd bootload


#ここにソースコードをダウンロードしてくる
#main()関数 main.c(1.2.2)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/main.c

#スタート・アップ startup.s(1.2.3)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/startup.s

#割り込みベクタの定義 vector.c(1.2.4)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/vector.c

#各種ライブラリ関数のヘッダ・ファイル lib.h(1.2.5)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/lib.h

#各種ライブラリ関数の本体 lib.c(1.2.5)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/lib.c

#シリアル・デバイス・ドライバのヘッダ・ファイル serial.h(1.2.6)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/serial.h

#シリアル・デバイス・ドライバの本体 serial.c(1.2.6)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/serial.c

#様々な型の定義 defines.h(1.2.7)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/defines.h

#リンカ・スクリプト ld.scr(1.2.8)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/ld.scr

#ビルド方法 Makefile(1.2.9)
curl -O http://kozos.jp/kozos/osbook/osbook_03/01/bootload/Makefile


#################Makefileの編集(1.2.9)#########################
本書では、各種ライブラリを/usr/localにインストールしているが、今回の私の環境ではこれらをすべて、~/12step/toolsにおいている。そこでMakefileを編集して、~/12step/toolsに読みに行くようにする。
#以下の合計3カ所をコメントアウトして書き換えた
vim Makefile










ドライバに関しては、USBシリアルケーブルをMacに接続した後、以下のコマンドを実行することで調べることができる。
ls /dev/tty.*
で調べたものを書いた。私の環境は、/dev/tty.usbserial-FTB3L7SJであった。

#####################ビルド(1.3)########################
#/Users/kappa/12step/src/bootloadにてmakeを実行
make

#うまくいったら、kzloadという実行形式ファイルが生成しているはず。。
ls
Makefile   kzload     ld.scr     lib.h      main.c     serial.c   serial.o   startup.s  vector.o
defines.h  kzload.elf lib.c      lib.o      main.o     serial.h   startup.o  vector.c

できた!

kzloadというファイルは、ELF形式というフォーマットで、h8writeでそのままH8/3069Fマイコン・ボードのフラッシュROMに書き込むことはできないそうだ。h8writeでフラッシュROMに書き込めるのは、モトローラSレコード・フォーマットという形式のファイルだそうだ。
ELF形式に変換するには、objcopyというコマンドが必要であるらしい。そして、binutilsをインストールした時に、objcopyも一緒にビルドされているとのこと。なんて、便利なんだろう。
それでは、以下のコマンドでフォーマット変換を行う。
~/12step/tools/h8300-elf/bin/objcopy -O srec kzload kzload.mot

ls
Makefile   kzload     kzload.mot lib.c      lib.o      main.o     serial.h   startup.o  vector.c
defines.h  kzload.elf ld.scr     lib.h      main.c     serial.c   serial.o   startup.s  vector.o

このコマンドは長いので、Makefileに記述がされている。よってmake imageというコマンドでいけるとのこと。

#一度消去して
rm kzload.mot

#Makefileに頼る
make image
~/12step/tools/bin/h8300-elf-objcopy -O srec kzload kzload.mot
ls
Makefile   kzload     kzload.mot lib.c      lib.o      main.o     serial.h   startup.o  vector.c
defines.h  kzload.elf ld.scr     lib.h      main.c     serial.c   serial.o   startup.s  vector.o


##################フラッシュROMへの書き込み(1.3.2)#####################
を~/12step/toolsにおいてあるkz_h8writeを用いてフラッシュROMへ書き込む

sudo ~/12step/tools/kz_h8write -3069 -f20 kzload.mot /dev/tty.usbserial-FTB3L7SJ

これまた、Makefileに記載があるので、make writeでもよい。
make write

そして、ここでまたハマった。
ハマったのは2カ所。
・1カ所目
ボード本体に電源のケーブルを挿入していなかった。
・2カ所目
ボード状のスイッチを左から「ON, ON, OFF, ON」にしていなかった。「ON, ON, OFF, ON」にすることで、CPUが書き込みモードで起動するようだ。あまりにも困ったものだから、著者のサポートページをよく読んだら、書いてあった。

マイコン・ボードの右上には,4連のディップ・スイッチがあります. これらはCPUの動作モード設定ピンに直結しているスイッチで,CPUの動作モードを 指定することができます.またディップ・スイッチのすぐ右には, リセット・ボタンがあります.

まず,ディップ・スイッチを左から,ON,ON,OFF,ONの状態(上,上,下,上)に してください. この状態で電源ONすると,フラッシュROM書き込みモードとしてCPUが起動します.

PCとH8/3069Fマイコン・ボードをシリアル・ケーブルで接続します. さらにマイコン・ボードに電源アダプタを接続し,電源を入れます. H8/3069Fマイコン・ボードには電源のON/OFFボタンがありませんので, 電源アダプタを接続するとそのまま電源ONになります.

H8/3069Fマイコン・ボードの電源を入れたらフラッシュROM書き込みモードで起動して いますので,h8writeを実行することで,シリアル経由でフラッシュROMに 書き込みができます.


写真を貼付けておく。

電源とシリアルコネクタに注目
ディップ・ スイッチに注目

うまくいくと、以下のようなログが表示される。
sudo make write
../../../tools/kz_h8write -3069 -f20 kzload.mot /dev/tty.usbserial-FTB3L7SJ
=================================================
 H8/3069F Flash Writer for KOZOS (Version 0.2.1)
 Copyright(C) 2011-2012 Shinichiro Nakamura
=================================================
Bitrate sequence: Done.
Inquiry device: Done.
Select device: Done.
Inquiry clock mode: Done.
Select clock mode: Done.
Select bitrate: Done.
Waiting for erase done:......
Programming:.....
Program: Done.

Complete.


#######picocomを用いてボードを起動し、シリアル通信を行う(1.3.4 - 1.3.10)###########

ディップ・スイッチを「ON, OFF, ON, OFF」に変更し、リセットボタンを押す。リセットボタンは、ディップ・スイッチの右隣にある。

あとは、通信をするだけ。
以前、Arduinoでシリアル通信をするために、picocomというコンパクトなシリアル通信の端末エミュレータをインストールしてあったので、それを使用する。

picocom -r -l /dev/tty.usbserial-FTB3L7SJ
picocom v1.7

port is        : /dev/tty.usbserial-FTB3L7SJ
flowcontrol    : none
baudrate is    : 9600
parity is      : none
databits are   : 8
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : yes
nolock is      : yes
send_cmd is    : sz -vv
receive_cmd is : rz -vv
imap is        : 
omap is        : 
emap is        : crcrlf,delbs,

Terminal ready
Hello World!                  #スイッチを押すたびにHello World!が出力される!!!!
Hello World!

Hello World!

#######cuを用いてボードを起動し、シリアル通信を行う(1.3.4 - 1.3.10)###########
cuはMacでデフォルトでついているエミュレータである。

sudo cu -l /dev/tty.usbserial-FTB3L7SJ
Connected.
Hello World!               #やはりスイッチを押すたびにHello World!が帰ってくる。
Hello World!
Hello World!
Hello World!
Hello World!

~.                                 #終了するときは、~.と入力してEnterを押せばいい。


Disconnected.


以上で、MacによるStep1は終了した!!!!!!!!!!!!!!!!!
一日で終わって本当に良かった。
これも、ネット上に丁寧にログを残してくださっている皆様のお陰。


###################追記1##################

最後に環境変数PATHに$HOME/12step/tools/binを追加していたが、普段は必要ないので、コメントアウトしておく方がよい。そうでないと、クロス開発用のgccが優先されてしまう。
#export PATH=/opt/local/bin:/opt/local/sbin:$PATH

export PATH=$HOME/12step/tools/bin:/opt/local/bin:/opt/local/sbin:$PATH

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

#export PATH=$HOME/12step/tools/bin:/opt/local/bin:/opt/local/sbin:$PATH
のように戻しておくこと。


##################追記2##################
いろいろ検証してみたが、どうやらPATHに~/12step/tools/binを必要はないようだ。
なぜなら、makeファイルの中で
PREFIX  = ~/12step/tools
としており、これにより、
BINDIR  = $(PREFIX)/bin

BINDIR  = ~/12step/tools/bin
となるためである。


###############追記3####################
最終的なディレクトリ構成をメモしておく。
http://kozos.jp/kozos/osbook/osbook_03/ に習った形式で進める予定。
tree -L 2 ~/12step/

#12step/src以下に開発プロジェクトを進めて行く
tree -L 2 ~/12step/src


以上


【参考文献】
坂井 弘亮『12ステップで作る組込みOS自作入門』カットシステム 2010