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

組込みOSセット購入

夏休みの課題として12ステップで作る組込みOS自作入門を進めることにした。いわゆるKOZOS

独自OSを作ってみよう!

12ステップで作る組込みOS自作入門

12ステップで作る組込みOS自作入門

マイコンボード上に実装していくそうで、そちらも購入が必要だったので、出版社のサイトにある組込みOSセットを注文した。必要なツール全部要りで9,110円。私は回路とか電源の知識が無かったから助かる。

はじめの一歩シリーズ タイトル一覧

送料無料なので秋月などで個別に買うよりも安い。配送も早く、注文の翌日発送、翌々日昼には入手できた。

f:id:ishn:20120809122116j:image:w360


# なぜかScratchの本も入っていた。"見本"の印がしてある。おまけ?レゴをプログラミングするらしい。これはこれで面白そう。

スクラッチ+WeDoではじめる簡単ロボティクス―ゲームで遊ぶな、ゲームを作ろう!

スクラッチ+WeDoではじめる簡単ロボティクス―ゲームで遊ぶな、ゲームを作ろう!

セット内容は

  • 12ステップで作る組込みOS自作入門
  • H8/3069Fネット対応マイコンLANボード
    • 本体
    • 25Mhzクリスタル
    • 40ピンソケットx2
    • 回路図
    • 説明書
    • 完成品についての説明書
    • マニュアル、ツールが入ったCD-ROM
  • GP05-US0510 超小型スイッチングアダプター5V1A(AC100-AC240動作) 内径2.1mm
  • RS232Cシリアルケーブル(Dサブ9Pオス)-(9Pメス)ストレート結線(1.8m)
  • (おまけ)スクラッチ+WeDoではじめる簡単ロボティクス

今後

ある程度内容まとめて、他の学生向けにチュートリアルでも置くといいかも。あと、休日に我が家でこんな感じのゆるい勉強会を定期的に開きたい所存。

  • 紹介スライド(背景、環境構築、デモまで)
  • 環境構築、デモ実行
  • 休憩(昼食)
  • もくもく

みたいな風に。
次回は爆弾男ゲームのアルゴリズム作成とか予定

結果

"Smalltalkならでは"な処理までは進めなかった。持参した参考書はPC98上のSmalltalk/Vを元にしており実行環境が無かった。フリーですぐ使えそうな実装としてSqueak, GNU Smalltalkを試したが、

という感じだった。

ただオブジェクトとメッセージの簡単な話はフォローできたので一応の成果はあった。