1stステップ 開発環境の作成
マイコンとの接続にはシリアルポートが必要だが、メインのGentooマシンには装備されていなかったので、LAN内のFreeBSDマシンのそれを借りることにする。ただし開発環境はメインのパソコンにしたかったので、1.ファイル編集はディレクトリを遠隔マウントして対応、2.コマンドは遠隔ログインにて発行 という形にした。
今回はFreeBSDでsshdを立てておいて、1,2どちらもそれで通す。また、gccの生成にbashが必要なのでportsから入れておく。
1.ディレクトリ遠隔マウント
big my secret.: HOWTO: sshfs in gentoo (sshfs-fuse)
sshfs ishn@[FreeBSDマシンのホスト]:/home/ishn ~/mnt/
以降、ファイル編集やダウンロードは~/mntで行うことにする。
2.遠隔ログイン
sshで通常通りログイン
つづいてクロスコンパイル環境構築へ
# 12ステップ本はかなり丁寧に書かれていて、Cygwin, Linux, FreeBSDで動作検証されていて、バイナリパッケージ版のインストールの方法や、コンパイルエラーへの対応も載っている。
binutils
今回は以下を使用。
- binutils-2.19.92.tar.bz2
より新しいバージョンもあったけど、本とマイナーバージョンを統一した。
FreeBSDにログインしてから構築する。
./configure --target=h8300-elf --disable-nls --prefix=$HOME/12step gmake gmake install setenv LD_LIBRARY_PATH ${HOME}/12step/lib setenv PATH ${PATH}:${HOME}/12step/bin rehash
- --prefix=$HOME/12stepとして、rootユーザ不要に。
- setenvをしているのは、特殊な場所(~/12step)にインストールしたバイナリを読みこませるため。ログインしなおしたら毎回やる必要があるのでログインスクリプトに記述するべきかも。
gcc
同様にマイナーバージョンを統一した。
- gcc-3.4.6.tar.bz2
setenv SHELL /usr/local/bin/bash ./configure --target=h8300-elf --disable-nls --disable-threads --disable-shared --enable-languages=c --prefix=$HOME/12step gmake gmake install
途中でこのようなコンパイルエラーになるが、本の通りに修正すればOK
./libgcc2.c: In function `__muldi3': ./libgcc2.c:537: error: unrecognizable insn: (insn 244 243 245 0 ./libgcc2.c:528 (set:HI (reg:HI 3 r3) (const_int 4294967222 [0xffffffb6])) -1 (nil) (nil)) ./libgcc2.c:537: internal compiler error: in extract_insn, at recog.c:2083
gcc/collect2.c
- redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT); + redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT, 0755);
さらに
./libgcc2.c: In function `__muldi3': ./libgcc2.c:537: error: unrecognizable insn: (insn 244 243 245 0 ./libgcc2.c:528 (set:HI (reg:HI 3 r3) (const_int 4294967222 [0xffffffb6])) -1 (nil) (nil)) ./libgcc2.c:537: internal compiler error: in extract_insn, at recog.c:2083
とエラーが出るが、64bit環境での問題のようで書籍サポートページにパッチの情報がある。
http://kozos.jp/books/makeos/index.html#gnu_tools:title\
パッチを適当な名前で保存して当てておく。
patch gcc/config/h8300/h8300.c < ../gcc-3.4.6-h8300.patch
フラッシュROM書き込みツール
Open H8 writer
上記からh8write.cを拾ってきてFreeBSD用に編集する。
-#define LINUX +#undef LINUX #undef Solaris -#undef FreeBSD +#define FreeBSD #undef Win32
gcc h8write.c -o h8write -Wall mv h8write $HOME/12step/bin
Hello World
10個のファイルを本の通りに作った。Makefileは一部書き換えた。
- PREFIX = /home/ishn/12step
- H8WRITE = $(BINDIR)/h8write
- H8WRITE_SERDEV = /dev/cuau0
make make image
ROM書き込み
make write (rootで行う)
/home/ishn/12step/bin/h8write -3069 -f20 kzload.mot /dev/cuau0 H8/3069F is ready! 2002/5/20 Yukio Mituiwa. writing WARNING:This Line dosen't start with"S". Address Size seems wrong WARNING:This Line dosen't start with"S". Address Size seems wrong ..... EEPROM Writing is successed.
起動
(rootで) cu -l /dev/cuau0
Connected (本体ディップスイッチを設定して、電源を入れなおす) Hello World! (以降、電源を入れなおすか、リセットボタンを押すと出力) Hello World! Hello World! Hello World! (~.と入力するとquitできる。) Connection to [FreeBSDのホスト名] closed.
感想
とりあえずできたけど、まだ全貌はわかってない。1章分だったけど結構大変だった。できるなら毎日1章進めたい。