プログラム / 2009/01/15 (Thu) / 編集 |
いやっほーいい、やっとコンパイル成功&RCXへの転送に成功したぉ
結局USB IR Towerではなくシリアルのやつを使ったんだがね、USBのドライバは見つからなかった、、、orz
([2009/1/15])BrickOSでLEGO MINDSTORMにMakefileのテンプレ
環境;
MacBook(intel inside)
MacOSX 10.5.6
gcc version 4.0.1 (Apple Inc. build 5465)
必要な物
binutils 2.16
gcc 3.4.3
Newlib 1.13.0
brickos 0.9.0
パッチをいくつか(zip)
結局USB IR Towerではなくシリアルのやつを使ったんだがね、USBのドライバは見つからなかった、、、orz
([2009/1/15])BrickOSでLEGO MINDSTORMにMakefileのテンプレ
環境;
MacBook(intel inside)
MacOSX 10.5.6
gcc version 4.0.1 (Apple Inc. build 5465)
必要な物
binutils 2.16
gcc 3.4.3
Newlib 1.13.0
brickos 0.9.0
パッチをいくつか(zip)
注意:exportコマンドが使える環境(以下の場合はbash)で行う事、export SHELLが/bin/bashになってるのも要確認
まずはダウンロードして
%wget 'ftp://ftp.gnu.org/gnu/binutils/binutils-2.16.tar.gz'
解凍して中に入る
%tar xzf binutils-2.16.tar.gz
%cd binutils-2.16
configureする、インストール先は「/usr/local/h8300-hms」、完成するプログラムは「h8300-hms-xxx」、対象アーキテクチャは「h8300-hms」
%sudo ./configure --prefix=/usr/local/h8300-hms --program-prefix=h8300-hms- --target=h8300-hms
でもってmake
%make CC='cc -no-cpp-precomp' CFLAGS="-O2 -fomit-frame-pointer" all
そしてインストール
%sudo make install
最後にパスを通す、bashの設定ファイル(.bashrc)に追記して適用
%export PATH=/usr/local/h8300-hms/bin:$PATH
以下できちんとパスが通っている事とbinutilがきちんとインストールされている事を確認できる
%h8300-hms-ld -v
%cd ..
Newlib is a C library intended for use on embedded systems.とあるように、newlibはC言語用のライブラリのソースコードらしい。
gccとnewlibの準備
%wget 'ftp://ftp.gnu.org/pub/gnu/gcc/gcc-3.4.3/gcc-3.4.3.tar.gz'
%wget 'ftp://sources.redhat.com/pub/newlib/newlib-1.13.0.tar.gz'
%tar xzf gcc-3.4.3.tar.gz
%tar -xzf newlib-1.14.0.tar.gz
gcc内にnewlibへのシンボリックリンクを貼る
%cd gcc-3.4.3/
%ln -s ../newlib-1.13.0/newlib .
次にgccをコンパイルするためのディレクトリを用意する
(別にgcc内でやってもいいけどコンパイルに失敗したときにめんどくさくなる)
%cd ..
%mkdir build_gcc_h8300-hms
%cd build_gcc_h8300-hms
configureでMakefileを生成する
%../gcc-3.4.3/configure --prefix=/usr/local/h8300-hms --program-prefix=h8300-hms- --target=h8300-hms --enable-languages=c,c++ --with-newlib
makeする
%make CC='cc -no-cpp-precomp' CFLAGS="-O2 -fomit-frame-pointer" all
インストールする
%sudo make install
ちゃんとインストールできてるか確認する
%h8300-hms-gcc -v
%h8300-hms-g++ -v
%cd ..
%mkdir build_newlib_h8300-hms
%cd build_newlib_h8300-hms/
%../newlib-1.13.0/configure --prefix=/usr/local/h8300-hms --program-prefix=h8300-hms- --target=h8300-hms
%make CC='cc -no-cpp-precomp' CFLAGS="-O2 -fomit-frame-pointer" all
%sudo make install
wget 'http://jaist.dl.sourceforge.net/sourceforge/brickos/brickos-0.9.0.tar.gz'
tar -xzf brickos-0.9.0.tar.gz
cd brickos-0.9.0/
ここから3つほどパッチを当てる
[Marc Abramowitz]Building brickOS tools on Mac OS Xより
%patch -p0 < ../brickos-0.9.0-rcx_comm.patch
[Jochen Hoenicke]BrickOS Patchesより
patch -p0 < ../brickos-gcc33.diff
インストールディレクトリを「/usr/local/h8300-hms」にしたので
patch -p0 < ../brickos-0.9.0-configure.patch
./configure
make
つまり機器の構成は
RCX <-IR(赤外線)通信-> IR Tower(Serial) <- RIS付属ケーブル - keyspan(Serial<->USB変換機) -> Mac
みたいな感じです。(keyspan以外を使ったり、USB IR Towerを使用する場合は「ttyの番号」を正しい値に変更してください)
まずはファームウェア(BrickOS)の転送
%util/firmdl3 -s --debug --tty=<ttyの番号> boot/brickos.drec
にすればいいので
%util/firmdl3 -s --debug --tty=/dev/cu.Keyspanxxxxxxx boot/brickos.srec
でもってプログラムの転送、とりあえずデモプログラム
%util/dll --tty=/dev/cu.Keyspanxxxxxxx demo/helloworld.lx
RCXでrunすると文字が表示されるよ
binutils
クロスコンパイラのコンパイルに必要、2.17以降だとダメだという情報があったので2.16まずはダウンロードして
%wget 'ftp://ftp.gnu.org/gnu/binutils/binutils-2.16.tar.gz'
解凍して中に入る
%tar xzf binutils-2.16.tar.gz
%cd binutils-2.16
configureする、インストール先は「/usr/local/h8300-hms」、完成するプログラムは「h8300-hms-xxx」、対象アーキテクチャは「h8300-hms」
%sudo ./configure --prefix=/usr/local/h8300-hms --program-prefix=h8300-hms- --target=h8300-hms
でもってmake
%make CC='cc -no-cpp-precomp' CFLAGS="-O2 -fomit-frame-pointer" all
- -no-cpp-precomp Appleのメーリングリストによると、「Reason why we prefer -no-cpp-precomp over -traditional-cpp is that -traditional-cpp carries different meaning in FSF GCC on linux/bsd/* platforms. So if you're porting code to Mac OS X you may get different behavior from GCC. If gradually all Mac OS X developers start using -no-cpp-precomp then one day we can restore FSF -traditional-cpp meaning in Apple's GCC compiler」
- -fomit-frame-pointer 「Don't keep the frame pointer in a register for functions that don't need one. This avoids the instructions to save, set up and restore frame pointers; it also makes an extra register available in many functions. It also makes debugging impossible on some machines.」らしい
そしてインストール
%sudo make install
最後にパスを通す、bashの設定ファイル(.bashrc)に追記して適用
%export PATH=/usr/local/h8300-hms/bin:$PATH
以下できちんとパスが通っている事とbinutilがきちんとインストールされている事を確認できる
%h8300-hms-ld -v
%cd ..
gccのH8/300用クロスコンパイラ
日立製のマイクロプロセッサ、H8/300用にコンパイルするためのコンパイラをコンパイルする。Newlib is a C library intended for use on embedded systems.とあるように、newlibはC言語用のライブラリのソースコードらしい。
gccとnewlibの準備
%wget 'ftp://ftp.gnu.org/pub/gnu/gcc/gcc-3.4.3/gcc-3.4.3.tar.gz'
%wget 'ftp://sources.redhat.com/pub/newlib/newlib-1.13.0.tar.gz'
%tar xzf gcc-3.4.3.tar.gz
%tar -xzf newlib-1.14.0.tar.gz
gcc内にnewlibへのシンボリックリンクを貼る
%cd gcc-3.4.3/
%ln -s ../newlib-1.13.0/newlib .
次にgccをコンパイルするためのディレクトリを用意する
(別にgcc内でやってもいいけどコンパイルに失敗したときにめんどくさくなる)
%cd ..
%mkdir build_gcc_h8300-hms
%cd build_gcc_h8300-hms
configureでMakefileを生成する
%../gcc-3.4.3/configure --prefix=/usr/local/h8300-hms --program-prefix=h8300-hms- --target=h8300-hms --enable-languages=c,c++ --with-newlib
- --enable-languages=c,c++ CとC++の両方のコンパイラを作る
- --with-newlib デフォルトでインストールされてるヘッダ(/usr/include)ではなくNewlibを使う。
makeする
%make CC='cc -no-cpp-precomp' CFLAGS="-O2 -fomit-frame-pointer" all
インストールする
%sudo make install
ちゃんとインストールできてるか確認する
%h8300-hms-gcc -v
%h8300-hms-g++ -v
%cd ..
Newlib
もうめんどいのでコメントは省略%mkdir build_newlib_h8300-hms
%cd build_newlib_h8300-hms/
%../newlib-1.13.0/configure --prefix=/usr/local/h8300-hms --program-prefix=h8300-hms- --target=h8300-hms
%make CC='cc -no-cpp-precomp' CFLAGS="-O2 -fomit-frame-pointer" all
%sudo make install
BrickOS
wget 'http://jaist.dl.sourceforge.net/sourceforge/brickos/brickos-0.9.0.tar.gz'
tar -xzf brickos-0.9.0.tar.gz
cd brickos-0.9.0/
ここから3つほどパッチを当てる
[Marc Abramowitz]Building brickOS tools on Mac OS Xより
%patch -p0 < ../brickos-0.9.0-rcx_comm.patch
[Jochen Hoenicke]BrickOS Patchesより
patch -p0 < ../brickos-gcc33.diff
インストールディレクトリを「/usr/local/h8300-hms」にしたので
patch -p0 < ../brickos-0.9.0-configure.patch
./configure
make
BrickOSの使い方
BrickOSはRCX(LEGO MINDSTORMの本体である黄色いやつ)にファームウェアとしてダウンロードする、WindowsだとRCX用の赤外線タワー(IR Tower)用のドライバが存在するので問題ないが、Macな人にはこのドライバが存在しない(以前はLEGOがSDKを配布していたが、なぜか公開を停止している。ちなみにLinux用には[The LegoUSB Project]legousbtowerというのがある)ので、以下はLEGO 向けシリアルポート&ケーブル情報のRIS付属ケーブルとKeyspanのHigh Speed USB Serial Adapterを利用した。つまり機器の構成は
RCX <-IR(赤外線)通信-> IR Tower(Serial) <- RIS付属ケーブル - keyspan(Serial<->USB変換機) -> Mac
みたいな感じです。(keyspan以外を使ったり、USB IR Towerを使用する場合は「ttyの番号」を正しい値に変更してください)
まずはファームウェア(BrickOS)の転送
%util/firmdl3 -s --debug --tty=<ttyの番号> boot/brickos.drec
にすればいいので
%util/firmdl3 -s --debug --tty=/dev/cu.Keyspanxxxxxxx boot/brickos.srec
でもってプログラムの転送、とりあえずデモプログラム
%util/dll --tty=/dev/cu.Keyspanxxxxxxx demo/helloworld.lx
RCXでrunすると文字が表示されるよ
PR
トラックバック
URL :
コメント