前のエントリでは u-boot の機能を使って u-boot 自身の置き換えを行った。この方法以外にも SheevaPlug では JTAG 経由で u-boot を書き換えることができる。これを行うためには OpenOCD というソフトを使う。
OpenOCD をコンパイルするために、まず http://www.ftdichip.com/Drivers/D2XX.htm から Mac OS X 用の FTDI ドライバをダウンロードする。この時点のバージョンは 0.1.6 だった。インストールの方法は dmg ファイルの中の ReadMe に書かれているのでこれを参考にすれば良い (下記、ディレクトリの移動などは省略している):
# cp libftd2xx.0.1.6.dylib /usr/local/lib/
# ln -sf /usr/local/lib/libftd2xx.0.1.6.dylib /usr/local/lib/libftd2xx.dylib
# cp ftd2xx.h /usr/local/include/
# cp WinTypes.h /usr/local/include/
openocd-0.1.0.tar.gz には SheevaPlug 用の config が入っていないので、SVN リポジトリから OpenOCD の最新版を取ってくる必要がある:
$ svn co svn://svn.berlios.de/openocd/trunk
Revision 1800 のソースを使用した。
svn のログや OpenOCD のメーリングリストを見ると Mac OS X でコンパイルする上での問題点の報告と修正が頻繁に行われているようだ。コンパイルエラーが出るようであればメーリングリストで状況を確認した方が良さそう。
OpenOCD のコンパイル:
$ ./bootstrap
$ ./configure –enable-ft2232_ftd2xx
$ make
$ sudo make -i install
Info の作成でエラーが出ていたが、とりあえず必要なさそうなので放っておくことにする。
ここで試しに OpenOCD を動かしてみるが、”Error: unable to open ftdi device: 3″ が表示されうまく動かない。FTDI ドライバの Knowledgebase を探ってみるとシリアルドライバをアンインストールせよとあるので試してみる。ただし、シリアルドライバは後々使うので消してしまうのではなくてモジュールをアンロードする方法を取ることにした:
# kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext
再度モジュールをロードするには以下のコマンドを入力すれば良い:
# kextload /System/Library/Extensions/FTDIUSBSerialDriver.kext
このようにモジュールをアンロードすれば一応動いた。
置き換えたい u-boot イメージファイルを uboot.bin という名前にする。このファイルがあるディレクトリで以下を実行する:
$ sudo openocd -f /usr/local/lib/openocd/board/sheevaplug.cfg -c init -c sheevaplug_reflash_uboot
失敗したようだったらもう一度同じコマンドを投入する。
書き換えが完了すると以下のメッセージが表示される:
NAND flash device ‘NAND 512MiB 3,3V 8-bit’ found
successfully erased blocks 0 to 4 on NAND flash device ‘NAND 512MiB 3,3V 8-bit’
wrote file uboot.bin to NAND flash 0 up to offset 0×00073000 in 89.607658s
シリアルコンソールから u-boot のバージョンを確認して、置き換えたものになっていたら成功。
OpenOCD のセットアップについては PlugWiki の Setting Up OpenOCD Under Linux も参考になるかも。
これで SheevaPlug をカスタマイズするために知っておいた方が良さそうな内容は大体試すことができたかな。
タグ: Linux, Mac, SheevaPlug