SnowLeopardにH8とSHのクロスコンパイル環境の準備

Mac OSX 10.6 SnowLeopardでSHとH8のためのプログラムをコンパイルするためのGCCをコンパイルしました。

なかなか最初はうまくいきませんでしたが、いくつかオプションを指定することでうまくいきました。

基本的にクロスコンパイル環境はbinutilsをコンパイルし、その後にGCCをnewlibといっしょにコンパイルすることになります。

その前に、GCCのコンパイルにはGMPとMPFR及び、MPCをインストールしておく必要があります。

今回使ったバージョンは以下の通りです。

  • GMP 5.0.1
  • MPFR 2.4.2
  • MPC 0.8.1
  • binutils 2.20
  • newlib 1.18.0
  • gcc 4.5.0

これらが~/src/以下に展開されている状態である場合のコンパイル例が以下の通りです。SHとH8の違いはTargetがsh-elfかh8300-elfかの違いだけです。

また~/.bash_profileに以下の二行を追加しておきます。

export PATH=$PATH:/usr/local/sh/bin
export PATH=$PATH:/usr/local/h8/bin
以下はコンパイルしたときに実行したコマンドです。-disable-werrorを追加しないとコンパイルできませんでした。
これで/usr/local/h8以下と/usr/local/sh以下にそれぞれgcc等がインストールされるはずです。
2010年5月14日追記:newlibのコンパイルが抜けていたのを追加
$ cd ~/src
$ cd ./gmp-5.0.1
$ ./configure
$ make
$ sudo install
$ cd ../mpfr-2.4.2
$ ./configure
$ make
$ sudo install
$ cd ../mpc-0.8.1
$ ./configure
$ make
$ sudo install
$ cd ../gcc-4.5.0
$ ln -s ~/src/newlib-1.18.0/newlib ./
$ cd ../
$ mkdir h8-binutils
$ cd ./h8-binutils
$ ../binutils-2.20/configure –prefix=/usr/local/h8 –program-prefix=h8300-elf- –target=h8300-elf –disable-nls –disable-werror
$ CC=’cc -no-cpp-precomp’ CFLAGS=”-O2 -fomit-frame-pointer” make all
$ sudo make install
$ cd ../
$ mkdir h8-gcc
$ cd ./h8-gcc
$ ../gcc-4.5.0/configure –prefix=/usr/local/h8 –program-prefix=h8300-elf- –target=h8300-elf –with-newlib –enable-languages=c
$ CC=’cc -no-cpp-precomp’ CFLAGS=”-O2 -fomit-frame-pointer” make all
$ sudo make install
$ cd ../
$ mkdir h8-newlib
$ cd ./h8-newlib
$ ../newlib-1.18.0/configure –prefix=/usr/local/h8 –program-prefix=h8300-elf- –target=h8300-elf
$ make
$ sudo make install
$ cd ../
$ mkdir sh-binutils
$ cd ./sh-binutils
$ ../binutils-2.20/configure –prefix=/usr/local/sh –program-prefix=sh-elf- –target=sh-elf –disable-werror
$ CC=’cc -no-cpp-precomp’ CFLAGS=”-O2 -fomit-frame-pointer” make all
$ sudo make install
$ cd ../
$ mkdir sh-gcc
$ cd ./sh-gcc
$ ../gcc-4.5.0/configure –prefix=/usr/local/sh –program-prefix=sh-elf- –target=sh-elf –with-newlib –enable-languages=c
$ CC=’cc -no-cpp-precomp’ CFLAGS=”-O2 -fomit-frame-pointer” make all
$ sudo make install
$ cd ../
$ mkdir sh-newlib
$ cd ./sh-newlib
$ ../newlib-1.18.0/configure –prefix=/usr/local/sh –program-prefix=sh-elf- –target=sh-elf
$ make
$ sudo make install

PHP 5.2.12 + GD + gettext

Mac OSX Leopard Serverのセキュリティーアップデートを実行するとまたPHPが置き換えられてしまった。

ので、GD付きで再コンパイル。と、gettextも有効にしたかったのでついでにいっしょにコンパイルします。

基本的に前回の記事にgettextを追加した内容になります。

  • libpng 1.4.1
  • libjpeg jpeg-8a
  • gd 2.0.35
  • gettext 0.17
  • php 5.2.12

バグの修正については前回の記事と同様に適用します。

$ cd ~/Downloads/src/libpng-1.4.1
$ CFLAGS="-arch x86_64" CCFLAGS="-arch x86_64" CXXFLAGS="-arch x86_64" LDFLAGS="-arch x86_64" ./configure
$ make
$ sudo make install

$ cd ~/Downloads/src/gd-2.0.35
$ CFLAGS="-arch x86_64" ./configure
$ cp libtool ../jpeg-8a/
$ cd ../jpeg-8a/
$ MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch x86_64 -g -Os -pipe" CXXFLAGS="-arch x86_64 -g -Os -pipe" LDFLAGS="-arch x86_64 -bind_at_load" ./configure --enable-shared
$ make
$ sudo make install

$ cd ~/Downloads/src/gd-2.0.35
$ MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch x86_64 -g -Os -pipe" CXXFLAGS="-arch x86_64 -g -Os -pipe" LDFLAGS="-arch x86_64 -bind_at_load" ./configure --with-zlib-dir=/usr --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/X11R6 --with-freetype-dir=/usr/X11R6 --with-xpm-dir=/usr/X11R6
$ make
$ sudo make install

$ cd ~/Downloads/src/gettext-0.17
$ MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch x86_64" CCFLAGS="-arch x86_64" CXXFLAGS="-arch x86_64" LDFLAGS="-arch x86_64" ./configure --prefix=/usr
$ make
$ sudo make install

$ cd ~/Downloads/src/php-5.2.12
$ MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch x86_64 -g -Os -pipe" CXXFLAGS="-arch x86_64 -g -Os -pipe" LDFLAGS="-arch x86_64 -bind_at_load" ./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --disable-dependency-tracking --with-apxs2=/usr/sbin/apxs --with-ldap=/usr --with-kerberos=/usr --enable-cli --with-zlib-dir=/usr --enable-trans-sid --with-xml --enable-exif --enable-ftp --enable-mbstring --enable-mbregex --enable-dbx --enable-sockets --with-iodbc=/usr --with-curl=/usr --with-config-file-path=/etc --sysconfdir=/private/etc --with-mysql-sock=/var/mysql --with-mysqli=/usr/bin/mysql_config --with-mysql=/usr --with-openssl --with-xmlrpc --with-xsl=/usr --without-pear --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-freetype-dir=/usr/X11R6 --with-gd=/usr/local -with-gettext=/usr
$ make
$ make test
$ sudo make install

phpinfoを確認すると無事GDとgettextが有効になっていました。

ロボカップジャパンオープン2010

今日は後輩たちの日本大会決勝トーナメントでした。

結果は残念ながら7位で世界大会には進めませんでしたが、いろいろあったのにリーグ戦から決勝トーナメントに進出できたり、最終的には3勝4負とまぁまぁの成績だったので良かったかなと。

技術力で負けたのではないのがせめてもの救いかな、来年は1年間しっかり開発に使えるはずなので大丈夫かな。

P.S.

隣のクラブ(大阪大学鳥人間チーム)のサーバーがハッキングされたみたいです….うちもセキュリティーの確認しないと。

Robohan

こんばんは。全然更新できてませんが、近況報告を。

大学の授業が始まって2週間目ですが、中高の時の親友(一緒にロボカップジュニアに出場してました)とRobohanという大阪大学のロボコンチーム(大阪大学工学部研究科公認団体)に入部しました。まだ設立して新しいのでNHKロボコンには2回目の出場です。

現在は6月のNHKロボコンに向けてロボットを製作中です。(詳細は言えません)

個人的には教育用ボードの試作品は届きました。基幹部分は部品も実装し、動作確認もできました。3PinのXHコネクタが入荷すれば完成し、センサー入力等も確認できるはずです。

DCC関係は…進んでいません。ただこのボードができればデコーダのプログラム動作試験はやりやすいかと。

ではまた。

PHP 5.2.12 + GD

Mac OSX Server 10.5.8のアップデートをしたらPHPのバージョンが5.2.12にアップされていて、またGDが入っていなかったので再コンパイル。

GDぐらい一緒にコンパイルしておいて欲しいのですが…今回つかったライブラリのバージョンは以下の通り。

  • libpng 1.4.1
  • libjpeg jpeg-8a
  • gd 2.0.35
  • php 5.2.12

今回は前回のMacにおけるiconv関係バグに加え、DNS関係のバグ(Bug #50508)が有り、php-5.2.12/ext/standard/dns.c の58行目からを以下のように修正しました。前回のiconvについての修正も行う必要があります。

#if HAVE_ARPA_NAMESER_COMPAT_H
#include
#endif

#if HAVE_ARPA_NAMESER_COMPAT_H
#ifndef HAVE_ARPA_NAMESER_H
#include
#endif
#endif

に変更してから以下のようにコンパイルしました。

$ cd ~/Downloads/src/libpng-1.2.40
$ CFLAGS="-arch x86_64" CCFLAGS="-arch x86_64" CXXFLAGS="-arch x86_64" LDFLAGS="-arch x86_64" ./configure
$ make
$ sudo make install

$ cd ~/Downloads/src/gd-2.0.35
$ CFLAGS="-arch x86_64" ./configure
$ cp libtool ../jpeg-8a/
$ cd ../jpeg-8a/
$ MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch x86_64 -g -Os -pipe" CXXFLAGS="-arch x86_64 -g -Os -pipe" LDFLAGS="-arch x86_64 -bind_at_load" ./configure --enable-shared
$ make
$ sudo make install

$ cd ~/Downloads/src/gd-2.0.35
$ MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch x86_64 -g -Os -pipe" CXXFLAGS="-arch x86_64 -g -Os -pipe" LDFLAGS="-arch x86_64 -bind_at_load" ./configure --with-zlib-dir=/usr --with-jpeg-dir=/usr/local/lib --with-png-dir=/usr/X11R6 --with-freetype-dir=/usr/X11R6 --with-xpm-dir=/usr/X11R6
$ make
$ sudo make install

$ cd ~/Downloads/src/php-5.2.12
$ MACOSX_DEPLOYMENT_TARGET=10.5 CFLAGS="-arch x86_64 -g -Os -pipe -no-cpp-precomp" CCFLAGS="-arch x86_64 -g -Os -pipe" CXXFLAGS="-arch x86_64 -g -Os -pipe" LDFLAGS="-arch x86_64 -bind_at_load" ./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --disable-dependency-tracking --with-apxs2=/usr/sbin/apxs --with-ldap=/usr --with-kerberos=/usr --enable-cli --with-zlib-dir=/usr --enable-trans-sid --with-xml --enable-exif --enable-ftp --enable-mbstring --enable-mbregex --enable-dbx --enable-sockets --with-iodbc=/usr --with-curl=/usr --with-config-file-path=/etc --sysconfdir=/private/etc --with-mysql-sock=/var/mysql --with-mysqli=/usr/bin/mysql_config --with-mysql=/usr --with-openssl --with-xmlrpc --with-xsl=/usr --without-pear --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-freetype-dir=/usr/X11R6 --with-gd=/usr/local
$ make
$ make test
$ sudo make install

マイコン学習キット、基板発注

本日ATMeaga644Pを使ったマイコン学習キットの基板の試作品を発注しました。

日本時間で15時20分に発注メールをOLIMEXに送信したら、19時40分にPDFの注文書が送られてきました。

たぶん今までで最速!。こんなに早いとうれしいなぁ

教育用マイコンボード

中二の時に同級生数人とロボット同好会を学校で発足させたのですが、今では中学ロボット同好会はロボット研究部に昇格し、高校にもロボット同好会ができています。

で、ロボットを作るためにはマイコンでモーターを回す回路を設計したりプログラムを作れるようにならないといけません。

がこれまで、いちから独学で回路もプログラムもとなると相当の実力をつけているころには高校生ということになってしまっていました。

なぜそんなに時間がかかるか考えると、プログラムをするためにはマイコンボードができてないと学習できない、基板設計するにはプログラムでどういうことをするのか理解していないといけない…..という無限ループになるからだということになりました。

そこで、僕らの学年の部長だったT-Engineとクラブ向けの学習用マイコンボードがついたロボットキットをつくることになりました。

完成した基板があることによりプログラムの学習が早期からできるというのが目論見です。しかもマイコンは汎用マイコンを搭載しファームウエア等もあえて搭載しないので今後1から回路設計した場合でもそのときの経験はそのまま利用することができます。また回路図を読むことによりどういう回路ならこういうことが実現できるのかという教科書にもなるため回路の学習の基礎にもなればと思っています。

これを用いて中学初期あたりから学習すれば早期にロボット作成の基本が学習できる”はず”です。

構成としてはAVRマイコンと2チャンネルのモータードライバとUSBシリアル変換&書込回路をワンボードにしたマイコンボードとタミヤのユニバーサルプレートにギアボックスをセットにしたものになると思います。

拡張性を考えてI2C、デジタル入出力、アナログ入力ポートも備えています。

で、僕はマイコンボードの設計をするので以下のような感じになっています。

教育用マイコンボード

教育用マイコンボード

あと、AVRStudioを使って1からレジスタを操作してプログラムをするまえに、NQCのように簡単にプログラミングができるような開発環境も用意することにしたのでそちらも開発しています。

Windowsだけの対応ですがC#で開発しています。といってもコンパイル時にこっそり用意しておいたヘッダファイルをインクルードし、リンク時に用意しておいたライブラリをくっつけるという作業をしているだけなのですが…

それでも1から操作するよりは容易にプログラミングに慣れることができると思います。以下は開発中の開発環境です。一番大変なのは実際の動作とは全く関係のない部分なのですが、コードの色分けを実装するとこでしたね(笑)。できればVisualStudioのInteliSenceのような入力補完機能をつけるのが目標です。

教育用開発環境

教育用開発環境

インクルードが全くないのに用意された関数がつかえます。

これはコンパイル時にこっそり用意しておいたライブラリのヘッダファイルをインクルードし、ライブラリをリンクするという作業を裏で行うのことにより実現しています。というかただそれだけなのですが…

追伸

DCCデコーダの開発用のための実験基板ができました。AVRとモータードライバとBEMF用の回路が載っています。

NHKの受信料と受信契約を考えてみた

よく扱われる話ではあるのですが…。どうしてNHKの受信料は払わないといけないのか、知的好奇心から検証してみることにしました。

先に断って置くとうちの家は受信料を払っています。

1.受信料未払い

まずはよく問題になっていた「受信料未払い」です。つまり、NHKとは既に受信契約を交わしている状態での未払いの場合を考えてみます。

AさんはNHKと「地上契約」を交わしているとします。この場合、当事者であるAさんは民法によりこの契約を履行する義務が発生します、つまり契約内容であるNHKの「日本放送協会放送受信規約」に従って受信料を払わなければなりません。これは法律で定められた義務にあたります。もしも不払いをした場合は債務不履行となり民法第414条に則って債権者であるNHKは裁判所に強制履行を請求することができ、民法第415条に則って損害賠償請求を行うことができます。

つまりまとめると、契約しているのに不払いをおこした場合はNHKは強制執行や損害賠償請求等の法的措置をとることができます

2.未契約

次に、受信契約すら交わしていない場合を考えてみます。

Bさんはテレビを購入し、家の屋根にアンテナを設置したとします。すると、NHKの人がやってきてこういうでしょう。「放送法で定められた義務ですからNHKに受信料を払ってください。」と。

NHKがいう放送法による根拠というのは放送法第32条にある「協会の放送を受信することのできる受信設備を設置した者は、協会とその放送の受信についての契約をしなければならない。ただし、放送の受信を目的としない受信設備又はラジオ放送(音声その他の音響を送る放送であつて、テレビジョン放送及び多重放送に該当しないものをいう。)若しくは多重放送に限り受信することのできる受信設備のみを設置した者については、この限りでない。」というものです。

「放送」とは一体何なのかという疑問もありますので、放送法第1条の1を読んでみると「「放送」とは、公衆によつて直接受信されることを目的とする無線通信の送信をいう。」とあります。ということはCATV等の有線はどうなるのかという疑問が湧きますがこれについては後で考えるとして、今はアンテナで受信する場合を考えます。

つまり、「協会の放送を受信することのできる受信設備」というのはアンテナとテレビのことと考えられます。アンテナが無くても受信はできませんし、テレビがなくても受信はできないのでこの2つはセットということになります。Bさんの場合はアンテナもテレビもあるので確かにNHKとの契約をする義務があります。

もし、契約せずに、NHKから訴えられたとすると考えられる最も悪い判決は「契約を締結し、テレビを設置してから現在までの受信料と「日本放送協会放送受信規約」によって決められた延滞利息を払え」というものでしょう。契約していなかったことに対する罰則はありませんのでこれが限度と思われます。ちなみにこの延滞利息というのは受信規約第12条の2「放送受信契約者が放送受信料の支払いを3期分以上延滞したときは、所定の放送受信料を支払うほか、1期あたり2.0%の割合で計算した延滞利息を支払わなくてはならない。」というものです。

しかし、よく放送法を読んでみると「ただし、放送の受信を目的としない受信設備(中略)ついては、この限りでない。」とあるので、例えNHKが映るテレビがあったとしても「民法しか見ない」のであれば契約する必要はありません。

つまりNHKを見る見ないに関わらず「受信料は払わなければいけない」とNHKがいうのであればそれに法的根拠はありません。ということは本当に民法しか見ないのであれば受信料は払わなくてもいいのです。(さらにいうとNHKが視聴者がNHKを見ていると証明するのは大変困難だと思われます…)

3.ケーブルテレビや光テレビ等の有線の場合

未契約の場合で触れたように放送法第32条によるNHKとの契約の義務があるのは「協会の放送を受信することのできる受信設備」を設置した場合です。前述したようにこの「放送」というのは放送法第1条の1により「無線通信の送信」ですから、「アンテナとテレビのセット」が「協会の放送を受信することのできる受信設備」です。ケーブルテレビを使っている場合はアンテナがありませんからそもそもこの「受信設備」を設置したことにはならずNHKを見ていたとしても契約の義務は発生しないことになりますから契約の義務はありませんし、契約していなければ受信料の支払いは必要ありません。

ここで注意しておかないといけないのはCATVだからといって契約していても払わなくてはいけないという意味ではありません。契約しているのであれば前述したように履行する義務がありますし、不履行の場合は法的措置もとられます。過去の東京地裁の判決においても契約しているのに支払わないのは認められないとしています。興味深いのはその理由として、「男性らは自由な意思に基づいて受信契約を結んでおり、解約の方法も事前に知ることはできた」としている点です。つまり解約していれば支払わなくてもよかったのに、ということです。

4.既に契約しているが、ケーブルテレビにする場合

今まで地上波でNHKを見ていたがケーブルテレビに加入し、アンテナを撤去する場合。

実はこれが興味深いのですが、「日本放送協会放送受信規約」の第9条には「放送受信契約者が受信機を廃止することにより、放送受信契約を要しないこととなったときは、直ちに、その旨を放送局に届け出なければならない。」とあります。つまり、アンテナを取り外すことによってNHKの放送を(無線で)受信できる受信設備がなくなる、即ち「受信機を廃止」した場合はNHKに届け出る義務があるのです。これは契約内容ですから履行する義務があります。さらに、第9条の2「放送受信契約の解約の日は、前項の届け出があった日とする。ただし、非常災害により前項の届け出をすることができなかったものと認めるときは、当該非常災害の発生の日とすることがある。」とあるように、この廃止届を提出すると同時に自動的に解約することになります。これも契約内容ですからNHKは断ることはできません。

ですからケーブルテレビに変える場合はNHKに届け出るのが義務であり、それと同時に解となり受信料の支払いも不要ということになります。

興味深いのは届け出るのが義務ということは即ち解約することが義務ということですね。まぁこの義務を果たさなかったとしてもNHKに損害はありませんから損害賠償請求もされませんが…

まとめ

テレビをアンテナで受信している場合で且つNHKを見る場合は契約する義務があり、受信料の支払いも必要。

テレビをアンテナで受信しているが、民法しかみない場合は契約する義務はなく、契約していなければ受信料の支払いは不要。

ケーブルテレビや光テレビ等の有線を使っている場合はNHKを見る見ないに関わらず契約する義務はなく、契約していなければ受信料の支払いは不要。

ということですね。ただしこれは一個人が興味で考察した内容であり、事実と異なる場合があります。この内容による如何なる損害も当方は一切の責任を負いかねます。