趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • Pine A64+ 2GBにarmbianをインストール

    投稿日 2017年 7月 26日 コメントはありません

    Pine A64+ であるが公式サイトのUbuntu Mateはアップデートを行っていくと /boot パーティションの容量不足でアップデートができなくなってしまいました。これを機会に、armbianを試してみました。(ちなみに、以前の記事では1GB版でしたが、その後、秋月で2GB版が出ていたので買ってしまいました・・・)

    1.イメージを書き込み

    Ubuntu Desktopをこちらから bit torrent 経由でダウンロードして、ファイル展開、Linux Mint のUSBイメージライタで16GBのMicroSDカードに書き込みます。

    2.起動

    HDMIで液晶モニタに接続、USBでキーボードとマウスを接続してMicroUSB経由で電源供給してしばらくすると、CLIのログイン画面が表示されます。ここで、ユーザー名:root、パスワード:1234でログインすると、rootのパスワード変更が求められますので、パスワード設定を行います。引き続き、一般ユーザーの作成が求められますので、ユーザー名とパスワードとその他のログイン情報(空欄のままで大丈夫)を設定していきます。設定が終わると、GUIが起動します。

    3.アップデートの適用

    DHCPサーバーのある環境なので、何もしなくてもネットワークに接続できるようになっています。termnialを開いて、

    $ sudo apt-get update
    $ sudo apt-get install

    でアップデートをすべて適用します。

    4.日本語サポートの追加

    左上の「Application」から「Setting」を選択、その下の「Language Support」を選択すると、「The language support is not installed competely」と表示されるので「Install」をクリックして不足部分のインストールを行います。この処理はかなり時間がかかります。途中、パスワード入力を求められるので、適宜入力してやります。
    インストール直後だとサポート言語はEnglishのみなので、下の方の「Install/Remove Languages…」をクリックして、Japaneseにチェックを入れて「Apply」をクリック。
    再起動してログオンし直すと、メニューなどが日本語化されます。

    5.時計表示の修正

    時計表示を右クリックしてプロパティを選択、タイムゾーンが空白になっているので、Japanに修正すると時刻表示が正しくなります。

    6.ArmbianのConfig

    デスクトップ上のConfigのアイコンをダブルクリックすると、uxtermが開いてその中でUbuntu16.04のconfiguration utilityが起動します。とりあえず必要な設定項目はないようですが、ここに設定があることを忘れないために備忘録としてメモしておきます。

    7.ToDo

    残っていること

    • 解像度が1280×720になっているので、1920×1080に変更したい。
    • 日本語入力の設定

  • NanoPi NEOを動かしてみた

    投稿日 2017年 7月 23日 コメントはありません

    秋月にまた安価なLinux板が出ていたので、つい買ってしまいました。

    今回買ったのは、Nano Pi NEO 512MB で、価格は1,680円。本家本元?のFRIENDLY ELECでは512MB版は$9.99のようなのですが、思い立ったら買えるということを考えると、高くはないかと思います。併せて、専用のヒートシンクも買ってきました。こちらは400円ですが、本家本元では$2.97。本家では、その他のオプションとして3Dプリントされたハウジングがあるようなのですが、こちらは残念ながら秋月にはありません。

    とりあえず、秋月の商品のところにあるリンクを辿って、official-ROMsからUbuntu-Core 4.11 をダウンロード、Linux Mint 16のUSBイメージライタで8GBのMicroSDに書き込みます。シリアルコンソールとして、手持ちのUSBシリアル変換ケーブルをNano Pi NEOの基板上のシリアル端子に接続してGtkTermで115200bpsのN81で接続、Ethernetは適当にDHCP環境のルータに接続して、MicroUSBにて電源供給すると、U-BOOTのメッセージに続いてLinuxの起動メッセージがつらつらと出てきて、そのうち勝手にログインしてくれます。シリアルコンソールの場合には自動的にログイン状態になるようです。初めから DHCPクライアントも動いているので、シリアルコンソールにIPアドレスも表示されます。

    コンソールのみですが、基本はUbuntuなので難しいことはありません。秋月からもリンクされているサポートページの「6 Work with Ubuntu-Core with Qt-Embedded」あたりに従っていけばOKです。とりあえず、お約束?の、

    $ sudo apt-get update
    $ sudo apt-get upgrade

    あたりと、

    $ sudo npi-config

    でパスワードの変更あたりを実施。

    $ sudo apt-get install avahi-daemon

    とやると、別の linux マシンから

    $ ssh pi@NanoPi-NEO.local

    とやってログインできるようになります。(NanoPi-NEOはデフォルトのホスト名。npi-config で設定変更できます)

    初めから avahi-daemon が入っていれば、イメージをMicroSDに書き込んで、とにかく起動して、しばらく待ってから

    $ ssh pi@NanoPi-NEO.local

    でログインできそうなのがちょっと残念かも。まあ、IPアドレス調べればいいだけなんですけどね。


  • 秋月のLPC11U35マイコンボードを動かしてみた

    投稿日 2017年 7月 10日 コメントはありません

    久しぶりに秋月へ行ったら、「USBメモリにファイルを書き込むのとほぼ同様の手軽さでプログラムを書き込むことができます」という触れ込みのマイコンボードが安く売っていたので、買ってみました。

    で、動かしてみるべく、Linuxマシン(環境はいつものLinux Mintです)へ接続すると、確かにマスストレージデバイスとして認識します。で、秋月のWebサイトにある動作確認用ファームウェアを書き込んで、リセットしてみても、再びマスストレージデバイスとして認識されて、LEDが点滅する気配がありません。

    mbedとしても動作する、というのでサンプルプログラムを作って同様に書き込んでみてもサッパリです。linuxではドラッグアンドドロップでの書き込みはうまく行かないのかと思って、コマンドラインで cp コマンドでコピーしてみてもダメです。

    で、ぐぐってみたら、どうやら linux ではそもそもファイル書き込みではうまくいかないようで、こちらの情報によると先頭の4ブロック(2キロバイト?)を削ってddで書き込むとうまく行くようです。

    ただ、デバイスファイルなんていろんな要因で変わってしまうので、毎回やるのは面倒ですし、事故のもとなので、pythonのスクリプト化しました。

    lsblkコマンドで見た時に、転送方法が usb で、モデルが’LPC1XXX IFLASH  ‘となっているデバイスファイルを探して、そのデバイスファイルをアンマウントして、ddコマンドで書き込むだけです。スクリプトファイル⇒mbedにlinuxから書き込むためのスクリプト

    ルート権限が必要なのは変わらないので、sudo 付きで python スクリプトを実行します。

    $ sudo python ./write_mbed.py firmware.bin 
    mbed device is /dev/sdc
    umount /dev/sdc
    dd if=firmware.bin of=/dev/sdc seek=4
    16+1 レコード入力
    16+1 レコード出力
    8456 bytes (8.5 kB, 8.3 KiB) copied, 0.387457 s, 21.8 kB/s

    みたいな感じで使います。(途中の umount とか dd コマンドの行はこのスクリプトの処理内容を表示しているだけで、書き込みに必要な操作は最初の1行目だけです)

     


  • Pine64を買ってみた

    投稿日 2017年 5月 21日 コメントはありません

    秋月に Pine64 A+ 1GB が入っていたので、買ってみました。価格はRaspberry Pi 3よりも安い2,980円。といっても、Pine64 A+はBluetoohもWiFiもないのでちょっと価格差的には微妙かもしれない。一緒に長さ15cmのmicroUSBケーブルとHDMIケーブルを購入。

    早速、秋月のページにある公式サイトへのリンクからUbuntu Mateのイメージをダウンロードして、ddコマンドで適当な8GBのMicroUSBに書き込んでMicroUSBコネクタに挿入、HDMIケーブルでディスプレイに接続、マウスとキーボードを接続、イーサケーブルをルータに接続して、MicroUSBコネクタを挿して電源投入。・・・が、電源LEDは点くものの、うんともすんとも言わない。
    MicroUSBケーブルを1.5mの長いものから購入した15cmの短いものに変更したら起動した。結構電流を食うので電圧降下しているのかもしれない。

    起動すると、グラフィカルログイン画面になるので、ユーザー名: ubuntu 、パスワード: ubuntu でログインする。当然かもしれないけど、英語モードで起動。ターミナルを開いたりしてみたが結構軽快に動くようである・・・が、やっぱりストレージがMicroSDなのでストレージアクセスを伴うものはちょっともたつく。

    とりあえず、アップデートをかけてみる。

    $ sudo apt-get update
    $ sudo apt-get upgrade

    を試してみるが、何かパッケージの不整合を起こしているみたいで、追加でコマンドが要る模様。指示に従って、以下の通り試してみた。

    $ sudo dpkg --configure -a
    $ sudo apt-get install -f
    $ sudo apt-get upgrade

    でとりあえず一通りはアップデートができた模様。

    System ⇒ Preferences ⇒ Hardware ⇒ Keyboard ⇒ Layout で Add を押して、キーボードレイアウトで Country で Japan を選んで Add を押す。レイアウトの順位を Japanese を一番上にして Close を押したら、キーボードレイアウトが日本語になった。

    System ⇒ Preferences ⇒ Personal ⇒ Language Support を選択すると、The language support is not installed completely と出るので、Install を押す。パスワードが聞かれるので入力すると、language support をインストールし始めた。しばらく待つと、インストール完了。
    この状態だと英語のみなので、 Install/Remove Languages … を押して、Japaneseにチェックを入れてApplyを押すと、フォントやfcitx、libreofficeのモジュールなどをダウンロード&インストールし始めた。
    完了したら、Language for menus and windows のリストの一番下にある日本語を一番上にドラッグ&ドロップ、Keyboard input method system を fcitx に設定して、Apply System-Wide をクリック、再度パスワードを聞かれるので入力。
    次に Regional Formats タブを選んでこちらも日本語を選択して Apply System-Wide をクリック。完了したら Close を押して、一旦ログアウトしてログインし直すと、日本語化が完了している。

    これだけだと、日本語入力で漢字キーが使えなかった。キーボードの選択で言語別で日本語を選択しておく必要があったようで、設定を修正。右上のキーボードのアイコンを右クリックして「設定」を選択すると、キーボードが英語になっているので、「+」を押して日本語キーボードを追加、順番を一番上に持ってくる・・・が、日本語入力はできない。

    とりあえず、

    $ sudo apt-get install synaptic

    で手慣れた Synaptic をインストール。

    Synaptic パッケージマネージャから ibus-anthy をインストールして、システム⇒設定⇒ユーザ向け⇒言語サポートで、キーボード入力に使うシステムとして IBus を選択して再起動後、右上のキーボードアイコンから日本語−Anthyを選択したところ、日本語入力ができるようになった。

    とりあえず、使えるようになった。


  • ESP32でNTP Clientを動かしてみた

    投稿日 2017年 2月 8日 コメントはありません

    一昨日のESP-WROOM-32(ESP32)をArduino IDEで動かしてみた続きです。

    Arduino IDEにはWiFi関連のサンプルプログラムがあるので、動かしてみました。

    「ファイル」⇒「スケッチ例」⇒「あらゆるボードのスケッチ例」⇒「WiFi」の下にいくつかサンプルが有りますが、こちらはESP32環境ではビルドできませんでした。Espressif社提供のライブラリとArduino IDEに初めから付いているWiFiライブラリでは完全に互換ではないようです。(確か、バージョン情報を取得するようなライブラリでコケてたような気がします)

    「ファイル」⇒「スケッチ例」⇒「ESP32 Dev Module用のスケッチ例」⇒「WiFi」の下の「WiFiIPv6」というのを開いてみると、NTPクライアントプログラムのように見えますので、これを動かしてみることにします。
    スケッチ例を開いて、冒頭にある

    #define STA_SSID "xxxxxxxxxxxxxxxxx"
    #define STA_PASS "xxxxxxxxx"

    の部分にSSIDとパスワードをセットして名前を付けて保存、シリアルポートを /dev/ttyUSB* に設定した後、シリアルモニタを起動して、次に基板上のタクトスイッチを押しながら、「マイコンボードに書き込む」としてやると、ビルドと書き込みが行われます。タクトスイッチは「Writing at 0x00010000… (5 %) 」という表示が出たところで離してもOK。

    書き込みが終わると、ESP-WROOM-32モジュールは勝手にリブートして起動します。

     

    シリアルモニタ側には IPv6 でのステーションとしての動作、アクセスポイントとしての動作状況の表示、IPv4のステーションとしての動作状況が表示され、IPv4のIPアドレス取得ができると、その後NTPクライアントが動作している状況が表示されました。

    また、同時にアクセスポイントとしても動作しているので、スマートフォンのWiFiアナライザなどのツールでみると「esp32-v6」というSSIDでのアクセスポイント動作が確認できました。


  • ESP32を動かしてみた

    投稿日 2017年 2月 6日 コメントはありません

    ふと秋月のWebサイトをみていたら、ESP-WROOM-32が発売になっていました。早速、秋月へ行ってゲットしてきました。

    で、とにかく動かしてみます。すでに先達もいるようなので、参考にさせてもらいながら、なるべく手抜きして動かします。開発環境はESP-WROOM-02の時と同様にArduinoで動かします。

    使用した部品

    使用した部品は以下の通りです。

    • ESP-WROOM-32
      まずこれがないと、ですね。
    • FT-232RQ USBシリアル変換キット
      最近のお気に入りのUSBシリアル変換基板です。Linuxでも安定して動作するのでGoodです。
    • NJU7223DL1
      3.3Vのレギュレータです。データシートの回路図だと入出力のコンデンサが小さくて済みそうなので、選びました。
    • 0.1uF 1608 チップコンデンサ✕3
      三端子レギュレータの入出力に各1個、USBシリアルのRTS端子とEN端子の間に1個
    • 22uF 1608 チップコンデンサ✕1
      ESP-WROOM-32の資料では電源入力に10uFが付いているので、手持ちの22uFのチップコンを使用
    • 10kΩ 1608 チップ抵抗✕2
      1個はEN端子のプルアップ、もう1個はIO0端子のプルアップ
    • 0.022uF 1608 チップコンデンサ✕1
      EN端子の入力とGND間に接続
    • 適当なタクトSW✕1
      IO0端子をGNDに落としてダウンロードモードに移行させるのに使います
    • ユニバーサルプリント基板
      これを使いました。最近は軽量化を目指して薄めの基板を使ってます。この基板は両面なのですが、内面がスルーホール処理されていないので表裏の接続ができていない箇所があってハマリました。
    • その他
      適当なピンヘッダ・ピンソケット、ポリウレタン被覆線、スズメッキ線

    ハードウェアの組み立て

    こちらの回路を参考に手抜きして作りました。

    • GND端子はUSBシリアル基板のGNDに接続
    • 3V3端子は三端子レギュレータの出力端子に接続
    • EN端子は10kΩでプルアップ、GNDとの間に0.022uF、USBシリアル基板のRTS端子との間に0.1uFを接続。この0.1uFによりPC側でRTSを制御するとESP-WROOM-32側にリセットがかかります。
    • IO0端子はプルアップ、および、タクトスイッチを接続して、ボタン押下でGNDに落ちるようにします。ボタンを押しながらArduino IDEで書き込み操作をすることで、書き込みモードへ移行できます。
      (注:IO0のプルアップは不要らしい。タクトスイッチによるIO0のコントロールがうまく行かなかった際につけたが、外してOKかは試していない。ちなみに、タクトスイッチでIO0がコントロールできなかった原因はノンスルーホール基板を使ったので基板の表裏で接続ができてなかったため。)
    • TXD0端子はUSBシリアル基板のRXDへ接続
    • RXD0端子はUSBシリアル基板のTXDへ接続

    回路図はこんな感じです。15ピンのGNDは手抜きで接続していませんが、動いています。

     

    こんな感じになりました。

    ESP-WROOM-32は裏返しに両面テープで基板に貼り付けてあります。基板を作りなおす時も多分無事に剥がせると思います。

    無計画に作ったので、裏側は汚いですw。左上のレギュレータ周りがどうしようもないですね。

    まずはハードウェアの動作確認

    Arduinoで書き込みをする前に、ハードウェアの動作確認をしておきます。
    といっても、よくよく結線を確認した後、電源を投入(USBケーブルで接続)するだけです。
    電源を投入したら、スマートフォンのWiFiアナライザなどアプリケーションで、「ESP-xxxxxx」というSSIDが見えることを確認しておきます。SSIDが見えればとりあえずESP-WROOM-32はアクセスポイントとして動作しているはずです。(注:Arduino環境の構築ができていれば、Arduinoのシリアルモニタで /dev/ttyUSB* を115200bpsでモニタすればブートローダなどの表示も確認できます)

    Arduino開発環境の構築

    PCはLinux Mint 18の64bit版です。

    まず、arduino IDE をインストールします。その前に、古いバージョンをアンインストール。

    $ cd arduino-1.6.12
    $ ./uninstall.sh 
    Removing desktop shortcut and menu item for Arduino IDE... done!

    arduino.cc から最新版の arduino-IDE をダウンロード。今回ダウンロードしたファイルは arduino-1.8.1-linux64.tar.xz です。

    $ cd ~
    $  xzcat ダウンロード/arduino-1.8.1-linux64.tar.xz | tar xvf -
    $ cd arduino-1.8.1/
    $ ./install.sh
    Adding desktop shortcut, menu item and file associations for Arduino IDE... done!

    次に、arduino-esp32 をインストール。このページのコマンドをコピペ。

    $ sudo usermod -a -G dialout $USER && \
    > sudo apt-get install git && \
    > mkdir -p ~/Arduino/hardware/espressif && \
    > cd ~/Arduino/hardware/espressif && \
    > git clone https://github.com/espressif/arduino-esp32.git esp32 && \
    > cd esp32/tools/ && \
    > python get.py
    [sudo] xxx のパスワード: 
    パッケージリストを読み込んでいます... 完了
    依存関係ツリーを作成しています 
    状態情報を読み取っています... 完了
    git はすでに最新バージョン (1:2.7.4-0ubuntu1) です。
    アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 39 個。
    Cloning into 'esp32'...
    remote: Counting objects: 2799, done.
    remote: Compressing objects: 100% (10/10), done.
    remote: Total 2799 (delta 1), reused 0 (delta 0), pack-reused 2785
    Receiving objects: 100% (2799/2799), 54.67 MiB | 3.44 MiB/s, done.
    Resolving deltas: 100% (1152/1152), done.
    Checking connectivity... done.
    Checking out files: 100% (903/903), done.
    System: Linux, Info: Linux-4.4.0-45-generic-x86_64-with-LinuxMint-18-sarah
    Platform: x86_64-pc-linux-gnu
    Downloading xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz
    Done
    Extracting xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz
    Downloading esptool-fe69994-linux64.tar.gz
    Done
    Extracting esptool-fe69994-linux64.tar.gz
    Done
    ~/Arduino/hardware/espressif/esp32/tools $

    いよいよ起動します。デスクトップ上のArduino IDEのアイコンをダブルクリックして、Arduino IDEを起動。
    起動したら、「ツール」→「ボード:xxx」→「ESP32 Dev Module」を選択でESP32モジュールを選択します。

    サンプルを動かしてみる

    次にサンプルを動かしてみます。シリアルに結果が表示されるものが良いと思うので、WiFiScanを動かしてみます。
    「ファイル」→「スケッチ例」→ESP32 Dev Module用のスケッチ例の下の「WiFi」→「WiFiScan」選択すると、サンプルプログラムが表示されます。「ツール」⇒「シリアルポート」⇒「/dev/ttyUSB0(環境によって変わります)」でシリアルポートを選択した後、「ツール」⇒「シリアルモニタ」でシリアルモニタを起動しておきます。

    準備ができたら「⇒」ボタンをクリックして、書き込んでみます。「⇒」をクリックする際にはIO0に接続したタクトスイッチを押しながらクリックすることでダウンローダを起動します。「Wrting … 」という表示が出たら、タクトスイッチのボタンを離します。

    書き込み完了後はこんな感じ。

    書き込みが終わると、シリアルモニタの方に表示が始まります。

     

    こんな感じでSSIDのリストが表示されれば成功です。


  • 秋月の新商品がおかしい・・・

    投稿日 2016年 7月 12日 コメントはありません

    今日発見した秋月電子の新商品・・・

    Screenshot-2

    どういう経緯で彼岸花の球根を電子パーツショップが扱うようになったのだろう・・・・?

    Screenshot-3

    「植物ですので大きさや色味はバラツキがあります」・・・・って、そりゃそうだけど、何故秋月に球根??よりによって彼岸花!?

    しかも在庫が「AAA」ってどんだけ在庫してるんだろう??


  • 秋月の新しいGPSモジュールを試してみました

    投稿日 2016年 2月 22日 1つのコメント

    秋月の新しいGPSモジュール(単品ではなくキットの方)を試してみました。

    このキットはこのUSBシリアル変換基板と接続して使うことを初めから想定しているのか端子配置が合わせられています。・・・が、Androidでも使ってみたいと思っているので、今回はあえてPL-2303を使用したUSBシリアル変換モジュールと接続するケーブルを作成しました。

    まずは、aitendoのモジュールと同じ構成で中華Androidに接続、「You Are Here GPS」を起動するとしばらくして測位ができて座標が表示されました。GPSモジュール側でもLEDが1秒周期で明るく点滅するようになりました。さらに、中華AndroidのGoogle Mapsでも現在位置としては取得できたのですが、継続的にトラッキングしてはくれません(理由不明)。

    そこで、今度はLinuxMint13環境で動かしてみました。

    まずはwineとwine-geckoをインストールして、秋月のWebサイトに上がっているMiniGPS(GPSチップの製造元、MediaTekのソフトのようです)を動かしてみました。

    $ cd ~/.wine/dosdevices
    $ ln -s /dev/ttyUSB0 com1

    としてからMiniGPSをwineで実行します。実行したらCOM1を選択して9600bpsに設定。測位が完了すると無事にGPS衛星の掴み具合を表示してくれました。(なお、後述のgpsdをインストール後はCOMポートに接続できなくなりますので要注意)

    次にgpsdをsynapticでインストールしました。・・・が、これだけでは動いているんだかよくわかりません。せっかくGPSなのですから、マップ上に自分の場所を表示させてみたいものです。ググってみると、Vikingというのが定番みたいなので、Synapticでインストールしてみました。

    使い方がちょっとわからなかったのですが、ウインドウの左側がレイヤーになっているようなので、

    1. 左側の下の方の「+」ボタンを押して、「New Map Layer」でOpenStreetMap(MapQuest)を追加します。以下のダイアログが開くので、
      Screenshot-Layer-Properties-1「Autodownload maps」にチェックを入れてOKを押します。
    2. 次に、「New GPS Layer」でGPSを追加します。ダイアログで「GPSRealtime Tracking mode」を選択して、以下のように設定します。
      Screenshot-Layer Properties

    この状態だと現在位置はニューヨークのマンハッタンになっているのですが、追加したGPSを右クリックして「Start Realtime Tracking」を選択してしばらくすると、地図上に軌跡が描かれるようになりました。

    Screenshot-Untitled-Viking-1

    キャプチャ画面でもわかる通り、道路に沿って綺麗に軌跡を描いてくれます。

    ちなみにこのVikingですが、aitendoで購入したモジュールでも同じように動作しました。
    Linuxで動かすぶんにはPL-2303系のモジュールである必要はないと思うので、FT234Xのモジュールに変更して動かしてみようかと思います。


  • 部品を買ってきました

    投稿日 2015年 10月 27日 コメントはありません

    FusionPCBからTrackingできるようになったよ、という通知がとっくに来ているのですが、なかなか荷物状況の確認ができるようにならず・・・。で、ようやくSingapore Postのトップ画面左側にある「Track Item」で「Information Received」になりました。でも、物理的な荷物の引受とは関係ないんだそうで(^^;。

    まあ、焦ってもしょうがないですので、部品を買い集めました。

    PARTS

    基本的には秋月で手に入るものばかりで基板設計したので概ね揃いました。


  • いまさらH8-300開発環境を構築してみたけど・・・

    投稿日 2015年 3月 26日 1つのコメント

    いまさらですが、余っているH8/3664ボードを何かに使おうと思って、開発環境を調査してみました。

    1.環境

    VMware上の Lubuntu14.04.2をターゲットにします。
    OSをインストールしたら、build-essentialパッケージをインストールした後、VMware-Toolsをインストールします。

    2.Cコンパイラ

    いまさらアセンブラもないので、Cコンパイラを探します。
    synapticでh8を検索すると、binutils-h8300-hmsとgcc-h8300-hmsが見つかります。これらをインストールします。これらをインストール後、バージョンを確認すると以下のようになっていました。

    ~$ h8300-hitachi-coff-gcc -v
    Reading specs from /usr/lib/gcc/h8300-hitachi-coff/3.4.6/specs
    Configured with: ../configure coff
    Thread model: single
    gcc version 3.4.6
    ~$

    3.書き込みツール

    昔、三岩さんが作られたものと思われるツールが sourceforge にあがっていましたのでコンパイルしてみます。説明では先頭の4行を環境に合わせて修正してからコンパイル、と書いてありましたが、はじめからLinuxのみが#defineされていました。

    ~$ mkdir H8tools
    ~$ cd H8tools/
    ~/H8tools$ wget mes.sourceforge.jp/h8/h8write.c
    --2015-xx-xx xx:xx:xx--  http://mes.sourceforge.jp/h8/h8write.c
    mes.sourceforge.jp (mes.sourceforge.jp) をDNSに問いあわせています... 202.221.179.22
    mes.sourceforge.jp (mes.sourceforge.jp)|202.221.179.22|:80 に接続しています... 接続しました。
    HTTP による接続要求を送信しました、応答を待っています... 200 OK
    長さ: 70666 (69K) [text/x-csrc]
    `h8write.c' に保存中
    
    100%[======================================>] 70,666       128KB/s   時間 0.5s 
    
    2015-xx-xx xx:xx:xx (128 KB/s) - `h8write.c' へ保存完了 [70666/70666]
    
    ~/H8tools$ gcc h8write.c -o h8write
    h8write.c: In function ‘error_print’:
    h8write.c:732:4: warning: format not a string literal and no format arguments [-Wformat-security]
        fprintf(stderr,message[error_code]);
        ^
    h8write.c:733:4: warning: format not a string literal and no format arguments [-Wformat-security]
        if ( s_message != NULL ) fprintf(stderr,s_message);
        ^
    h8write.c:737:4: warning: format not a string literal and no format arguments [-Wformat-security]
        fprintf(stderr,message[error_code]);
        ^
    h8write.c:738:4: warning: format not a string literal and no format arguments [-Wformat-security]
        if ( s_message != NULL ) fprintf(stderr,s_message);
        ^
    h8write.c:742:4: warning: format not a string literal and no format arguments [-Wformat-security]
        fprintf(stderr,message[error_code]);
        ^
    h8write.c:743:4: warning: format not a string literal and no format arguments [-Wformat-security]
        if ( s_message != NULL ) fprintf(stderr,s_message);
        ^
    ~/H8tools$

    Warningがたくさん出ましたが、実行ファイルは生成されました。

    4.コンパイルテスト

    Strawberry LinuxのWebサイトからLED点滅サンプルを持ってきてコンパイルしてみました。

    $ wget strawberry-linux.com/h8/h8led-0.1-20020706.tar.gz
    $ tar xvfz h8led-0.1-20020706.tar.gz
    $ cd h8led
    $ make clean
    $ make

    ・・・が、-lc がないと言って怒られます。探してみると、どこにもH8用のlibc.aがありません。これは libc.a がないことを意味していますので、newlibをインストールすることにしました。

    5.newlibのインストール

    組み込み用のlibcであるnewlibをコンパイルします。
    その前に、まずgitからインストールです。

    ~$ mkdir newlib
    ~$ cd newlib/
    ~/newlib$ sudo apt-get install git
    ~/newlib$

    さらに、newlibのソースを取ってきます。

    ~/newlib$ git clone git://sourceware.org/git/newlib-cygwin.git

    このままコンパイルすると、「makeinfoがない」といって怒られますので、synapticでtexinfoパッケージをインストールして、別のターミナルを新規に開いてから configureスクリプトを走らせて、make、make install します。

    ~/newlib/newlib-cygwin$ ./configure --target h8300-hitachi-coff
    ~/newlib/newlib-cygwin$ make
    ~/newlib/newlib-cygwin$ sudo make install

    libc.a、libg.a、libm.a が /usr/local/h8300-hitachi-coff/lib の下にインストールされました。

    6.改めてコンパイルテスト

    よくみると、さらにはMakefileでライブラリパスが設定されていなかったので、これを修正してみたのですが、今度は互換性のないlibc.aをスキップしました、となってしまいました。

    ~/H8sample/h8led$ make
    h8300-hms-gcc -O -mh -g -mrelax -mint32 -DH8_3664 -T h8-3664.x -L /usr/local/h8300-hitachi-coff/lib -nostdlib 3664crt0.S  led.o -o h8led.exe  -lc -lgcc
    /usr/lib/gcc/h8300-hitachi-coff/3.4.6/../../../../h8300-hitachi-coff/bin/ld: 互換性のないを /usr/local/h8300-hitachi-coff/lib/libc.a スキップしました (-lc を探索している時)
    /usr/lib/gcc/h8300-hitachi-coff/3.4.6/../../../../h8300-hitachi-coff/bin/ld: cannot find -lc
    collect2: ld returned 1 exit status
    make: *** [h8led.exe] エラー 1

    確か、gccのクロスコンパイラをビルドするときにはライブラリ(libcなど)なしで一度コンパイラをビルドしてライブラリをビルド、その後再度コンパイラをビルドし直す手順になっていたかと思うのですが、そのへんがちゃんと行われていないのかもしれません。(ググってもnewlibのバイナリがなく、ソースからビルドするしかなさそうだ、という時点で嫌な予感はしたんですけどね)

    7.まとめ

    ・・・うーむ。ぐぐってみると、同じ問題がはるか昔に出ていたようです。
    https://bugs.launchpad.net/ubuntu/+source/gcc-h8300-hms/+bug/342667
    ここを見る限り、リポジトリにあってSynapticでインストールできても結局メンテナンスされてなくて使い物にならないようで、そのままずーっと放置されているようですね。

    コンパイラごとソースからビルドすれば動く組み合わせもあるかもしれませんが、そこまでして動かす元気はありません。今でも秋月ではH8/300のボードを売ってますが、みなさんどうやって使ってるのでしょう?(メンテナンス目的?教材用?)
    いまでもcygwin + gcc2.95.3ベースの環境をCD-Rで売ってるようですが、いまさらのような気がします。

    H8は比較的電子工作用途に受け入れられた数少ない日本製マイコンですが、この状況ではとても使う気にはなれません。かといって、いまさらR8Cとか78Kとかってのもないでしょうから、素直に諦めるほうが良さそうです。

    さて、余ってしまったボード、どうしよう・・・。