趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • 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<br />$ sudo apt-get upgrade

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

    $ sudo dpkg --configure -a<br />$ sudo apt-get install -f<br />$ 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を選択したところ、日本語入力ができるようになった。

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

     


  • WordPressでログインできなくなった!

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

    WordPressでログイン認証のセキュリティ強化にCAPTCHAを入れようと、プラグインから「SI CAPTCHA Anti-Spam」をインストールしてみました。

    設定でログイン画面にキャプチャを入れて、ログアウトしてログインしなおしたらCAPTCHAが表示されていません(!)。

    しかも、ログインできない!!

    で、調べてみると、「SI CAPTCHA Anti-Spam」には、GDというライブラリが必要なので、

    $ sudo yum -y install gd php-gd

    としてインストールを試みるも、さくらのVPSにインストールしたPHPのバージョンが合わずphp-gdがインストールができません。

    で、四苦八苦した挙句の解決方法は、「プラグインディレクトリの名前を一時的に変更する」という方法でした。

    /home/(ユーザー名)/public_html/wordpress/wp-contents/plugins にカレントディレクトリを変更して、プラグインの名前の付いたディレクトリの名前を一時的に変更してやると、無事にログインできました。

    ログインしたら、ディレクトリの名前を元に戻して、プラグインを停止・削除しました。

    いや、焦りました・・(^^;


  • 普通にはadbで認識できないAndroid機を認識させる

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

    通常のAndroid機は /etc/udev/rules-d/51-android.rules にベンダIDを追加してやるとadbで操作できるようになるのですが、coviaのFLEAZ F4s/F4s+は認識することができません。いろいろ試してみたところ、わかってきたことをメモしておきます。環境は LinuxMint18 MATE edition 64bit です。

    まずはUSBのデバイスIDを調べます。(必要なもの以外は結果から削除しています)

    $ lsusb
    Bus 001 Device 016: ID 0a5c:e688 Broadcom Corp.

    BroadcomのチップのベンダIDそのままのようです。(これはF4sのもの。F4s+はデバイスIDはe681になるようです)
    とりあえず、/etc/udev/rules-d/51-android.rules にベンダIDを記載して再読み込みさせてみます。

    $ cat /etc/udev/rules.d/51-android.rules 
    SUBSYSTEM=="usb", ATTR{idVendor}=="05ac", MODE="0666", GROUP="plugdev"
    $ sudo udevadm control -R

    この状態で、USBを抜き差ししてから adb コマンドを叩いてみても、

    $ adb devices
    List of devices attached

    となって、デバイスが見つかりません。
    いろいろググると、~/.android/adb_usb.ini にベンダIDを書くとよい、というような記載をいくつか見つけたので試してみます。

    $ cat .android/adb_usb.ini 
    0x0a5c
    
    $ sudo service udev restart
    $ adb kill-server
    $ adb devices
    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    List of devices attached 
    ???????????? no permissions

    状況が変わりました。この状態で TCP/IP 接続でデバッグする設定にしてみます。

    $ adb tcpip 5555
    error: insufficient permissions for device

    パーミッションで蹴られてしまいました。ルート権限で試してみます。

    $ sudo adb kill-server
    $ sudo adb start-server
    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    $ adb devices
    List of devices attached 
    F4Sxxxxxxxxx unauthorized
    
    $ sudo adb tcpip 5555
    error: device unauthorized. Please check the confirmation dialog on your device.

    端末上にデバッグ接続可否のダイアログが出ていたので、許可してみます。

    $ adb tcpip 5555
    restarting in TCP mode port: 5555
    $ adb install xxxxxxx.apk
    2460 KB/s (261419 bytes in 0.103s)
     pkg: /data/local/tmp/xxxxxxx.apk
    Success

    となって無事にインストールできました。

    改めて /etc/udev/rules-d/51-android.rules を削除してやってみました。
    どうも、/etc/udev/rules-d/51-android.rules は必要ないようです。
    一般ユーザー権限では、

    $ adb devices
    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    List of devices attached 
    ???????????? no permissions

    となってパーミッションエラーになりますが、通常の Android機はルート権限で adb server を起動すると認識できるようです。

    $ sudo adb kill-server
    $ sudo adb start-server
    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    $ sudo adb tcpip 5555
    restarting in TCP mode port: 5555

    さらに、今回の covia FLEAZ F4s/F4s+ のようになにもしないと認識しない機種でも、 ~/.android/adb_usb.ini にベンダIDを書いてやれば認識できるようです。

    $ echo "0x0a5c" > ~/.android/adb_usb.ini
    $ cat ~/.android/adb_usb.ini 
    0x0a5c
    B ~ $ adb devices
    List of devices attached
    
    $ sudo adb kill-server
    $ sudo adb start-server
    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    $ adb devices
    List of devices attached 
    F4Pxxxxxxxxx device
    
    $ sudo adb tcpip 5555
    restarting in TCP mode port: 5555

    ここで F4s+ を外して F4s を接続してみます。

    $ adb devices
    List of devices attached 
    F4Sxxxxxxxxx device
    
    $ sudo adb tcpip 5555
    restarting in TCP mode port: 5555

    となり、無事に認識しました。


  • AndroidタブレットをLinuxのサブディスプレイにする

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

    外出時にノートPCで作業していると、1366×768の画面ではどうしても狭く感じます。・・・で、ぐぐってみたところ、AndroidをLinuxのサブディスプレイにする方法がある模様。どうやらVNCを使うようなので、やってみました。

    環境は以下の通り。

    • サーバ側はLinutMint18 x64
    • クライアント側はNexus7(2012) + Android4.4.4

    です。

    作業にあたってはこちらのサイトを参考にさせていただきました。

    1.Linux側(サーバ側)

    Synapticでvnc4serverをインストールします。vnc4serverを使うのはSynapticにあるからです。

    インストールしたらVNCサーバを起動します。

    $ vncserver :1
    You will require a password to access your desktops.
    Password: ********
    Verify: ********

    起動したら接続用のパスワードを設定します。パスワードは8文字までで、8文字を超える長さの場合には最初の8文字が使われるようです。

    2.クライアント側(Android側)

    クライアント側はGoogle PlayストアでVNC viewerをインストール。

    起動したら、接続先として「Linux側のIPアドレス:5901」、接続名を適当な名前を設定します。接続するとパスワードを聞かれるので、vncserverを起動する際に設定したパスワードを入力します。ポート番号の5901は5900に:1の1を足して5901となっています。

    3.x2vncのインストール

    Synapticでx2vncをインストールする。インストールしたら以下のようにして起動する。

    $ x2vnc -shared -west localhost:1
    x2vnc: VNC server supports protocol version 3.8 (viewer 3.3)
    Password: ********
    
    x2vnc: VNC authentication succeeded
    x2vnc: Desktop name "(ホスト名):1 (ユーザー名)"
    x2vnc: Connected to VNC server, using protocol version 3.3
    x2vnc: VNC server default format:
    screen[0] pos=1003
    Xinerama detected, x2vnc will use screen 1.
    x2vnc: pointer multiplier: 0.930491

    として起動します。この状態でマウスは行き来できるようになっています。
    が、ウインドウは行き来できません。ウインドウマネージャがいないような雰囲気です。しかし、サブディスプレイ側(Android側)ではコンソールウインドウが開いているので、そこでfirefoxを起動するとサブディスプレイ側にブラウザを開くことができました。とりあえずWebを参考にしながら何か作業したり、viやxedで設定ファイルを編集したりする分には十分です。

    ここで一旦終了させます。

    $ killall x2vnc
    $ vncserver -kill :1

    VNCのパスワードを変更します。

    $ vncpasswd
    Password: ********
    Verify: ********

    4.まとめ

    インストールが完了したら、以下の手順で起動できます。

    $ vncserver :1 -depth 15 -geometry 1280x800 -alwaysshared
    $ x2vnc -shared -west localhost:1

    画面サイズはNexus7(2012)の画面サイズです。Android側でフルスクリーンにしておけばちょうどよくなります。

    IMG_20160809

    サブディスプレイとして使っている様子はこんな感じです。USBケーブルは電源供給専用で、接続はモバイルルータ経由です。


  • miredoでIPv6を使ってみる

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

    NATではないIPアドレスが欲しいのだけど、V4は無理・・・なので、トンネル越しのIPv6を試してみた。

    といっても、LinuxMint18では非常に簡単で、SynapticでToredoのLinux実装らしいmiredoをインストールすると、ifconfigでteredoというデバイスが増えてIPv6が使えるようだ。

    ・・・が、再起動するといなくなっている。

    $ sudo service miredo start

    とすると復活するのだが。

    調べてみると、起動中に “teredo-debian.remlab.net” というホスト名を解決できないために起きる既知の問題の模様。


  • Raspberry Pi 3をセットアップ

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

    しばらく前に買ったけど動かしてなかったRaspberry Pi 3をセットアップしてみました。

    1.ハマったポイント

    Raspbianを使ってみたのだけど、32GBのMicroSDだと起動途中にパニックを起こす。2枚のMicroSDで同じ結果。結局、8GBのMicroSDだと問題なさそう。

     

    2.設定した箇所

     

    1)初期設定

    起動すると自動的にグラフィカルログインした状態になるので、コンソールを開いて

    $ sudo raspi-config

    でコンフィギュレーション設定する。Expand FilesystemでファイルシステムをMicroSDカードいっぱいまで拡大、Change User Passwordでパスワード設定、Internationalization Optionsでロケールの設定、タイムゾーンの設定、WiFiの国設定を実施して終了する。再起動すると、ファイルシステム拡大が実行される。

    デスクトップ環境のMenu→Preference→Raspberry Pi ConfigurationのLocalizetionで日本語キーボードを設定。

    パスワードの設定が終われば、リモートログインできる。ネットワークにつないであれば、mDNSとsshデーモンが動いているので、リモートから

    $ ssh pi@raspberrypi.local

    とやると、sshでログインできる。(パスワード変更していない場合、初期パスワードはraspberry)

    2)画面サイズ

    画面サイズがVGAくらいのサイズをFullHDに拡大表示しかされなかったので、HDMIを強制的に表示させることにする。/boot/config.txtを修正。

    hdmi_group=1
    hdmi_mode=16

    さらに、オーバースキャン表示を想定しているため、画面周囲が黒枠になって実質的なデスクトップが狭い。液晶モニタでは関係ないので、オーバースキャン対応を禁止する。同じファイルのdisable_overscanのコメントを外す。

    disable_overscan=1

    これでFullHDにピクセルバイピクセルで等倍表示されるようになった。

    3)日本語化

    $ sudo apt-get install fonts-vlgothic ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname

    で日本語フォントをインストール。インストール後、デスクトップ環境のMenu→Preference→Raspberry Pi ConfigurationのLocalizetionでLocaleをLanguageをja、CountryをJP、Character SetをUTF-8に設定。OKを押していくと再起動を要求されるので再起動すると日本語になっている。

    次の項のアップデート後、

    $ sudo apt-get install ibus-anthy

    として日本語入力をインストールする。再起動後、右上の「US」を左クリックして「日本語 – Anthy」にすると日本語入力ができる。

    4)その他

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

    でアップデートをかけておくと基本的には完了。

    $ sudo install synaptic

    でsynapticパッケージマネージャをインストールして、Synapticから好きなソフトをインストールすればOK。
    WebブラウザはFirefoxベースのiceweaselとその日本語言語パックのiceweasel-l10n-jaをインストールしました。

    ブラウザとしては十分に動きます。Youtubeも720pのビデオも一応再生できるようになりました。さすがにコマ落ちが激しいのと、16bitカラーになっているのか、グラデーション部分にマッハバンドが出ますが。


  • Raspberry Pi 3が秋月・千石に登場

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

    すでに皆さんご存知のRaspberry Pi 3。無線(WiFi、BT)が載った関係で日本での発売が遅れていたようですが、秋月と千石に登場しました。

    Screenshot from 2016-03-27 11:44:50

    価格はどちらも税込み6200円。$35だと今のレートだと¥4,000くらい。秋月のRaspberry Pi 2の販売価格は¥5,600。Raspberry Pi 2より高いのは初物だからなのか、TELECの認証費用が割掛けされてるからなんでしょうかね。秋月の方はすでに在庫切れですが、千石の方は在庫切れではないようなのでポチッと注文してみました。いつ来るかな〜?

    Raspberry Pi 2よりも倍速いって書いてあったような気がするので、ブラウザが中心ならPC代替として結構使えるようになるかもしれませんね。


  • 64bit環境にMPLAB-Xをインストールする

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

    故あって、Ubuntu17.1 MATE 64bit環境に16bitPICをターゲットとしてMPLAB-Xをインストールしました。

    ダウンロードしたMPLAB-Xのtarファイルを展開すると、シェルアーカイブがでてくるので、これをスーパーユーザー権限で実行しても、

    ~$ sudo ./MPLABX-v3.20-linux-installer.sh
    64 Bit, check libraries
    Check for 32 Bit libraries
    These 32 bit libraries were not found and are needed for MPLAB X to run:
    libexpat.so
    libX11.so
    libXext.so

    となって、32bitライブラリをインストールするよう要求されます。・・・が、ここで表示されているものを素直にapt-getでインストールしようとしてもダメなのです。

    じゃあ、どうしたらいいのかについては、こちらに記載があります。

    ~$ sudo apt-get install libc6:i386 libx11-6:i386 libxext6:i386 libstdc++6:i386 libexpat1:i386
    パッケージリストを読み込んでいます... 完了
    依存関係ツリーを作成しています                
    状態情報を読み取っています... 完了
    以下の特別パッケージがインストールされます:
      gcc-4.8-base:i386 gcc-4.9-base:i386 libgcc1:i386 libxau6:i386 libxcb1:i386
      libxdmcp6:i386
    提案パッケージ:
      glibc-doc:i386 locales:i386
    以下のパッケージが新たにインストールされます:
      gcc-4.8-base:i386 gcc-4.9-base:i386 libc6:i386 libexpat1:i386 libgcc1:i386
      libstdc++6:i386 libx11-6:i386 libxau6:i386 libxcb1:i386 libxdmcp6:i386
      libxext6:i386
    アップグレード: 0 個、新規インストール: 11 個、削除: 0 個、保留: 12 個。
    5,061 kB のアーカイブを取得する必要があります。
    この操作後に追加で 13.7 MB のディスク容量が消費されます。
    続行しますか? [Y/n] 
    (以下略)

    ということで、パッケージ名の後ろに「:i386」をつける必要があったようです。わかってしまえばなんと言うことはないのですが、わからないと困りますよねぇ・・・。

    ここをパスできれば、あとは再びシェルアーカイブを実行するとインストール完了です。併せて、XC16もダウンロードしたシェルアーカイブを実行してやると途中でライセンスファイル生成のためにNICのMACアドレスの確認ダイアログが出ますが、そのまま次へ進めてしまえばインストール完了です。


  • LinuxMint17.2でUSBメモリ環境を構築

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

    久々にUSBメモリにLinux環境を構築しました。作業的には慣れたもののはず・・・と思ったのですが、すっかり忘れてました。なので、作業ついでにメモを作り直します。

    1.環境

    PCはCore2Duo E7400(VT-x未対応版。E7400はVT-xは途中から対応しているので、初期のものはVT-xがOFFになっていて仮想化支援機能が動かないんです。)で、メモリは4GB、HDDにはWindows8.1が入ってますが、全然使ってない。
    LinuxMint17.2をインストールするUSBメモリはSanDisk Cruzer Fit 16GB。遅いUSBメモリですが、小さいので邪魔になりません。

    2.インストールイメージの準備

    とりあえず、LinuxMint17.2の32bit版をダウンロード。UNetBootinで別の4GBのUSBメモリにインストールイメージを書き込みました。(ライブCDの代わりとして使うならこのままでもいいんでしょうが・・・)
    他の環境ではUSBイメージライタを使ってUSBメモリに書き込む、あるいはDVD-Rにイメージを焼いて・・・でも構わないでしょう。ただ、SATAを禁止する関係で内蔵DVDROMドライブは使えないので、DVDROMに焼いて起動する場合には外付けのUSB-DVDドライブが必要になります。

    3.インストール環境のブート

    4GBのUSBメモリを接続して、電源ON。BIOSを起動して

    • SATAインタフェースをDisable(内蔵HDDを見えなくする)
    • 起動順序をUSB-HDDを最初にする(しなくてもいいと思うけど、癖で設定)

    とします。CTRL-ALT-DELでリブートさせて、USBメモリからブートさせます。ブート時にUNetBootinのメッセージが出ますが、DefaultのままでLinuxMint17.2のライブイメージを起動します。

    4.インストーラの起動

    ライブ環境起動後にターゲットのSanDisk Cruzer Fit 16GBを接続して、インストーラをダブルクリックして起動。

    5.パーティションの設定とOSインストール

    パーティションの設定はカスタムにしました。メモリ4GBあるのでSWAPパーティションがなくても問題ありません。なので、パーティションテーブルを初期化して、1パーティションをext4で作成、マウントポイントは / にします。インストールを継続しようとすると、「スワップパーティションがないよ」と警告されますが、そのまま継続。あとはインストーラの指示通りにインストール。ブートローダーは /dev/sdb (HDDが認識されていなければ、これがSanDisk Cruzer Fit 16GBのはず)に書き込みます。

    6.再起動とアップデート

    インストールが完了したら、インストーラの指示に沿って再起動する方を選択します。再起動したら、アップデートマネージャを起動して、ひたすらアップデートします。

    7.設定ファイル編集による追加設定

    1)内蔵HDDを見えなくする

    SATAドライバを禁止して内蔵HDDを見えないようにします。SATAで接続されているDVDROMドライブも見えなくなってしまいますが、代わりに内蔵HDDを誤って書き換えてしまったりする可能性が大幅に減少します。作業としては、 /etc/default/grub を開いて、 「GRUB_CMDLINE_LINUX_DEFAULT」の起動時オプションに「libata.force=disable」を追加します。
    修正後は、

    $ sudo grub-mkconfig -o /boot/grub/grub.cfg

    としてgrub.cfgファイルを自動生成させて反映させます。
    この後、BIOSのSATA禁止を解除して再起動して、PCの内蔵HDDが見えないことを確認します。

    2)USBメモリへのアクセス高速化

    HDDアクセス時のアクセス時刻の記録を停止してアクセスを減らすとともに、/tmpをtmpfsにより確保してHDDへのアクセスをなくします。/etc/fstab をのもとからある行にnoatimeオプションを追加し、さらにtmpfsで始まる行を追加します。

    # / was on /dev/sda1 during installation
    UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 noatime,errors=remount-ro 0 1
    # tmpfs
    tmpfs /tmp tmpfs defaults,noatime 0 0

    3)システム時計が狂うのを直す

    /etc/default/rcS の中の「UTC=yes」を「UTC=no」に修正します。

    ここで一旦再起動します。

    8.その他、追加設定

    1. 背景の変更
      明るい背景が苦手なので、適当な暗めの背景に変更しました。
    2. テーマの変更
      青系の色が好きなので、Mint-X-Tealにテーマを変更しました。
    3. FireFoxの設定変更
      ・起動時のホームページを自分の設定に修正
      ・履歴の記憶を「一切記憶させない」に変更
    4. Chromeブラウザのインストール・設定
      Chromeのダウンロードページへ行ってDebian32bit版をダウンロード、Package Installerでインストール。インストール後、「アプリケーション」⇒「インターネット」⇒「Google Chrome」で起動できますが、自分はまずは右クリックして「プロパティ」を表示し、コマンドの部分に「–incognito」のオプションを追加して、常にプライベートモードで起動するようにしています。
    5. 日本語設定
      日本語の設定を忘れていました。「設定」⇒「言語」でLanguage/RegionともにJapanese,Japan UTF-8になっていることを確認して、System localeのところで「システム全体に適用する」を押します。
      上のほうにある「Input Method」を押して、「Add support for IBus」を押してIBusをインストールします。インストール完了後、上の方にある「Input Method」をNoneからIBusに変更します。
      変更したら一旦ログアウトしてログインし直すと、右下にキーボードのアイコンが出てくるので、これを左クリックしてMozcを選択します。テキストエディタなどを開いてみると日本語入力できるはずです。

    こんなところでしょうか。

    あとは、好きなアプリをインストールするなり、何なりすればと思います。


  • いまさら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とかってのもないでしょうから、素直に諦めるほうが良さそうです。

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