忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/11/22 (Fri) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 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)


注意:exportコマンドが使える環境(以下の場合はbash)で行う事、export SHELLが/bin/bashになってるのも要確認

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.」らしい
Errorという行がでなければ多分成功(「Nothing to be done for 'install'」は「もうやるべき事がない」という意味で成功の証)
そしてインストール
%sudo make install

最後にパスを通す、bashの設定ファイル(.bashrc)に追記して適用
%export PATH=/usr/local/h8300-hms/bin:$PATH

以下できちんとパスが通っている事とbinutilがきちんとインストールされている事を確認できる
%h8300-hms-ld -v
%cd ..

gccH8/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すると文字が表示されるよ

拍手[0回]

PR
忍者ブログ [PR]