TOPPERS/ASPのcfg

TOPPERS/ASPのcfgをビルドする。

seiryu$ export BOOST_DIR=/usr/local/include/boost
seiryu$ export LIBBOOST_SUFFIX=" "

boost_program_systemがないとエラーになるので追加する。
cfg/cfg/Makefile
■変更前
BOOST_LIBFILES = -lboost_filesystem$(LIBBOOST_SUFFIX) -lboost_program_options$(LIBBOOST_SUFFIX)
■変更後
BOOST_LIBFILES = -lboost_filesystem$(LIBBOOST_SUFFIX) -lboost_program_options$(LIBBOOST_SUFFIX) -lboost_system$(LIBBOOST_SUFFIX)

seiryu$ cd asp/cfg
seiryu$ make depend
seiryu$ make

問題なければcfg/cfgにcfgができる。

Boostのインストール

MacOSX v10.4.11 PowerPCにBoost1.4.0 をインストールする。
http://www.boost.org/
よりダウンロード。

seiryu$ chmod +x ./bootstrap.sh ./tools/jam/src/build.sh
seiryu$ ./bootstrap.sh --prefix=/usr/local --libdir=/usr/local/lib --with-toolset=darwin --without-libraries=math
seiryu$ ./bjam -j 3
seiryu$ ./bjam install

mathを除外しているのは、"long double"に未対応のエラーになるため。
bjamの"-j 3"はmakeと同じくジョブの数なので付けなくても良い。

SkyEyeを試す

前々から気になっていたSkyEyeをためす。
TOPPERS/ASPならデバイスマネージャと通信できるみたいだが、とりあえずブートをprintfデバッグしたいだけなのでTOPPERS/JSPで動かしてみる。

【環境】
skyeye-1.2.8_RC1
ターゲット:AZ9360MB

AZ9360MBに搭載されているNS9360とUART等の構成は同じNS9750がSkyEyeで対応しているみたいなので、NS9750の設定にして実行するが動かない。SkyEyeのログからみるにカーネルのputcをポーリングでしているところでループしている。
SkyEyeのNS9750まわりのソースコード見てみたが別CPU向けのファイルを持ってきただけでちゃんと対応していないっぽい。残念。

ARMのgcc環境を構築する6

諸般の理由によりまたgcc環境を構築する。
今度はgcc version 4.3.2。
手順は後日載せるにして、gcc version 4.3からgccコンパイルするときにGMPとMPFRのライブラリが必要になっている。
http://gmplib.org/
http://www.mpfr.org/

GMPとMPFRはLGPL。ということは静的リンクになる組み込み用途の製品開発ではGPL/LGPLを避けたいなら使えないってこと?
GMPとMPFRはずしもコンパイル通るのかな...
GPLv3でもlibgccとかのライセンス除外規定は継続されるみたいだけど、GMPとMPFRは別だろうな...
http://www.fsf.org/news/2009-01-gcc-exception

GMPとMPFRいらないバージョンで作り直すか...

chumbyのシリアルポート接続成功

chumbyのシリアルポートにUSB-シリアル変換を繋いでTeraTermに表示をさせることができるようになった。

まず、chumbyをばらす。
http://journal.mycom.co.jp/articles/2008/07/21/cookingchumby03/index.html
を参考に液晶側から外した。
合成ゴムと液晶の間に、傷がつかないように柔らか目のモノを差し込んで接着部をはがす。
プラスチック製の耳かきを使ったらちょうどいい感じでした。


シリアルポートをつなげるのは↑ここ。
RXが2つあるが一つしか必要ない。
コネクタを用意したいところだが手持ちにサイズが合うのがなかったので4本の電線を繋ぐ。
基板の見えている側からハンダ付けしている。

基板中央に延びている紫と橙の電線はとりあえず今は関係ない。


全体はこんな感じ。(電線を三つ編みにしたら思ったより短くなった...)

電線の反対側はUART(TTLレベル)をUSBに変換する。
chumbyの公式サイトには、
http://www.superdroidrobots.com/shop/item.asp?itemid=335
を使えとあるが、輸入するのは面倒だし、日本で入手できる方が都合が良いので、秋月電子通商さんの
FT232RL USBシリアル変換モジュール [AE-UM232R]
http://akizukidenshi.com/catalog/items2.php?q=%22K-01977%22&s=score&p=1&r=1&page=
を使った。
FT232RLの1ピン(TXD)にchumbyのRX、5ピン(RXD)にchumbyのTX、7ピンと24ピン(GND)にchumbyのGNDを繋いでいる。3Vは未接続でUSBから供給するようにしている。
裏側はこんな感じ。

USBをPCに接続し、TeraTermで38400bpsに設定し、chumbyの電源ON。
無事にシリアルからの表示がTeraTermに出た。

今回使ったUSBシリアル変換モジュールのUSB側のドライバをchumbyで動かすことができるようなので、chumbyのシリアルをchumbyのUSBにつないでchumby上でデバッグができるかもしれない。
http://d.hatena.ne.jp/ISH/searchdiary?word=%2a%5bChumby%5d

ROMの書き換え2

AZ9360MBのROM書き換え後、リセット?していた問題について。
元々書き込まれていたユーザーアプリとデフォルトアプリのROMをチェック。
ELF形式のヘッダが付いていない。替わりに別の形式のヘッダが付いている。

http://www.ydktec.com/support/download/TOPPERS/az9360_toppers_jsp.zip
からAZ9360KIT/SDKソースコードをダウンロードして斜め読み。
BOOTからユーザーアプリまたはデフォルトアプリをRAMにコピーする前にCRCチェックを行っている。
ヘッダ部にはCRCなどが入っている様子。

SDKの環境でROMを作るときにヘッダを付加しているはずなので確認したらWindows用ツール(itron/az9360/aplhdr.exe)が同梱されていた。
itron/az9360/make.sh
の89行目がツールを呼び出している処理。

公式版のTOPPERS/JSPで作成したROMをAZ9360MBでftp&updateコマンドで書き込むには、
itron/az9360/aplhdr.exeとaplhdr.datを適当な位置にコピー(今回はcfgの下に置いた)
Makefileからaplhdr.exe呼び出し。(下記*.bin生成の行追加とimage.binの生成の行追加。)
を変更すればいいはず。

#
#  全体のリンク
#
$(OBJFILE): Makefile.depend $(ALL_OBJS) $(MAKE_KERNEL) $(OBJNAME).chk
	$(LINK) $(CFLAGS) $(LDFLAGS) -o $(OBJFILE) \
			$(START_OBJS) $(TASK_OBJS) $(ALL_LIBS) $(END_OBJS)
	$(NM) $(OBJFILE) > $(OBJNAME).syms
	$(OBJCOPY) -O srec -S $(OBJFILE) $(OBJNAME).srec
	$(OBJCOPY) -O binary -S $(OBJFILE) $(OBJNAME).bin
	$(SRCDIR)/cfg/aplhdr $(SRCDIR)/cfg/aplhdr.dat $(OBJNAME).bin image.bin
	$(SRCDIR)/cfg/chk -m $(OBJNAME).syms,$(OBJNAME).srec \
			-obj -cs $(OBJNAME).chk -cpu $(CPU) -system $(SYS)

生成されたimage.binをftpでアップし、updateコマンドでFROMへ書き込む。
DOS窓にて。

ftp 192.168.0.1
ftp> bin
ftp> put image.bin
ftp> bye

ディップスイッチ3〜5をONにしてデフォルトアプリで起動。
TeraTerm(UART1)にて。

A:>update prog image.bin

電源OFF→ディップスイッチ3〜5をOFFしてユーザーアプリで起動。
TeraTerm(UART1)に見慣れた表示が出力される。

task1 is running (001). | 
task1 is running (002). | 
task1 is running (003). | 
task1 is running (004). | 

無事、sample1が動作するのが確認できた。