N=1

主にコンピュータ技術関連のことを投稿。 / 投稿は個人の意見であり所属団体の立場を代表するものではありません。

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

今回は以下を使用。

より新しいバージョンもあったけど、本とマイナーバージョンを統一した。

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章進めたい。