趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • PogoPlugをrsyncで同期

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

    OpenPogoにより ipkg のインストールが可能になったので、rsyncでの同期を試みることにしました。

    基本的には既存のファイルサーバ(ホスト名:marvel・・・・実体は玄箱PROです)からファイルを引っ張ってくるだけにしました。

    できればファイルサーバ側からPogoPlugにファイルを置きにくる形を取りたいところですが、PogoPlugはDHCPでIPアドレスを取得するのでIPアドレス固定での設定ができません。そこで、PogoPlug側からファイルを取りにくる形をとりました。

    大きな設定の流れは以下の通りです。

    • PogoPlug(OpenPogo)にはrsync,openssh,cronなどをインストール
    • インストール後、ssh-keygenでパスフレーズなしの鍵ペアを生成して、公開鍵をサーバ側に転送してPogoPlug側からパスワード無しでsshログインできるようにする
    • rsyncコマンドで必要な範囲を同期するスクリプトを作成する
    • crontabで定期的に同期するようにする

    同期のためのスクリプトはPogoPlugに接続しているHDDのデバイスファイルが変化することがあるので、こんな感じでHDD上のフォルダ有無で転送する先を確認するようにしました。

    #!/bin/sh
    if [ -d /tmp/.cemnt/mnt_sda/MARVEL ]
    then
    {
     rsync -a -e "ssh -i /root/.ssh/id_rsa.marvel" root@192.168.1.5:/home/common/ /tmp/.cemnt/mnt_sda/MARVEL
    }
    fi
    if [ -d /tmp/.cemnt/mnt_sdb/MARVEL ]
    then
    {
     rsync -a -e "ssh -i /root/.ssh/id_rsa.marvel" root@192.168.1.5:/home/common/ /tmp/.cemnt/mnt_sdb/MARVEL
    }
    fi
    if [ -d /tmp/.cemnt/mnt_sdc/MARVEL ]
    then
    {
     rsync -a -e "ssh -i /root/.ssh/id_rsa.marvel" root@192.168.1.5:/home/common/ /tmp/.cemnt/mnt_sdc/MARVEL
    }
    fi
    if [ -d /tmp/.cemnt/mnt_sdd/MARVEL ]
    then
    {
     rsync -a -e "ssh -i /root/.ssh/id_rsa.marvel" root@192.168.1.5:/home/common/ /tmp/.cemnt/mnt_sdd/MARVEL
    }
    fi

    これでコマンドラインからはrsyncが動作するのですが、なぜかcronからは動作しません。もう少し調整が必要なようです。


  • PogoPlugにOpenPogoをインストール

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

    pogoplugfsはインストールしたものの、やはり転送速度と手間はかかります。

    そこで、無人で既存のサーバから転送するため、rsyncの導入を試みることにしました。

    そのための手段として、OpenPogoをインストールしました。

    インストールに当たっては、こちらのサイト
    http://ameblo.jp/uassist-ceo/entry-10853801756.html
    を参考にさせていただきました。

    以下に手順を残しておきます。(基本的には上記の参照サイトと同じです。異なる箇所は色文字にしておきます)

    1. my.pogoplug.com の 設定 > セキュリティー設定 にすすみ、「このPogoplug対応機器のSSHへのアクセスを有効にする」にチェックを入れる。
      「パスワードを変更」ボタンを押し、パスワードを設定する。
    2. USB接続しているHDDを my.pogoplug.com 画面で取り外す。
    3. USB接続しているHDDをPogoplug本体から取り外す。
    4. Pogoplug本体にUSBメモリを接続する。
    5. USBメモリを my.pogoplug.com 画面で取り外す。
    6. nmapでPogoplugのIPアドレスを調べて、sshで接続する。
      ユーザ名:root
      パスワード:設定したパスワード
    7. USBメモリをフォーマットするためのツールをダウンロード
      # cd /tmp
      # wget http://plugapps.com/os/pogoplug/mke2fs
      # chmod 755 mke2fs
      # killall hbwd
    8. fdiskコマンドでUSBメモリにsda1パーティションを作成
    9. USBメモリをフォーマット。
      # ./mke2fs /dev/sda1
    10. USBメモリをPogoplug本体から取り外す。
    11. 本体を再起動。
      # /sbin/reboot
    12. Pogoplug本体にUSBメモリを接続する。
    13. dfコマンドでUSBメモリのマウント先ディレクトリを確認
      /tmp/.cemnt/sda1みたいなデバイスファイルが /tmp/.cemnt/mnt_sda1にマウントされています。
    14. USBメモリマウント先ディレクトリに移動
      # cd /tmp/.cemnt/mnt_sda1
    15. OpenPogoをブラウザからダウンロード
    16. ダウンロードした「opt.tar.gz」ファイルを SCP で、USBメモリにアップロード。
      SCPの場合フォルダは上記フォルダ /tmp/.cemnt/mnt_sda1
    17. 「opt.tar.gz」を解凍
      # tar xvzf opt.tar.gz
    18. Pogoplugのファイルシステムをりマウントし書き込み可能に
      # mount -o rw,remount /
    19. optディレクトリのリボリックリンクを設定
      # ln -s /tmp/mnt_opt/.opt /opt
    20. システム起動スクリプトを修正
      # cp /etc/init.d/rcS /etc/init.d/rcS.original
      # vi /etc/init.d/rcS
      ※最後尾に追記
      /etc/init.d/mount_opt
      /opt/etc/init
    21. パス設定を修正するため、/etc/profileを作成
      #!/bin/bash
      export PATH=/opt/bin:/opt/sbin:/usr/bin:/usr/sbin:/bin:/sbin
    22. マウント用スクリプトを必要に応じて修正(自分の場合はsleep30の追加のみ)
      # cp /tmp/.cemnt/mnt_sda/.opt/mount_opt /etc/init.d/
      # chmod 755 /etc/init.d/mount_opt
      # vi /etc/init.d/mount_opt

      sleep 30
      [ ! -d /tmp/mnt_opt ] && `mkdir /tmp/mnt_opt` || `umount /tmp/mnt_opt`
      mount -t ext2 -o rw,nosuid,nodev,exec,noatime,sync /dev/sda1 /tmp/mnt_opt
      if [ ! -d /tmp/mnt_opt/.opt ]
      then
      {
      umount /tmp/mnt_opt
      mount -t ext2 -o rw,nosuid,nodev,exec,noatime,sync /dev/sdb1 /tmp/mnt_opt
      if [ ! -d /tmp/mnt_opt/.opt ]
      then
      {
      umount /tmp/mnt_opt

    23. 本体を再起動。
      # /sbin/reboot
    24. Pogoplugのファイルシステムをりマウントし書き込み可能に
      # mount -o rw,remount /
    25. ipkgのリポジトリを修正
      # vi /opt/etc/ipkg/armel-feed.conf
      src cross http://openpogo.com/repo

      #src cross http://openpogo.com/repo
      src cross http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable
    26. このままではBusyBox版のwgetでそのまま動かないので、
      http://hyokonia.tumblr.com/post/10973041787/openpogo-ipkg
      を参考にしてラッパースクリプトを作成する。
      # cd /usr/bin/
      # mount -o rw,remount /
      # mv -i wget wget.busybox
      ラッパースクリプト作成
      # vi wget.sh
      #!/bin/sh
      arg=`echo $* | sed -e ‘s/–passive-ftp//g’`
      /bin/busybox wget $arg
      シンボリックリンクを使ってラッピング
      # chmod 755 wget.sh
      # ln -s wget.sh wget
      # mount -o ro,remount /
    27. ipkgを最新に更新
      # ipkg update
      # ipkg list
      で、インストール可能ソフトを表示
    28. OpenPogoのインストール完了
    29. rsyncのインストール
      # ipkg install rsync

     


  • PogoPlugにLinuxからアクセスする

    投稿日 2012年 6月 22日 2個のコメント

    しばらく前にPogoPlugProを導入しました。外からAndroidでアクセスする際の使い勝手はまあまあ(ただ、安定性がちょっといまいちな感じが・・・)、というところなのですが、なによりもファイルサイズの制限が事実上ないのがうれしい半面、アップロードに異様に時間がかかるのが難点です。

    そこで、PogoPlugを普段使っているLinuxMintからアクセスできるようにしてみることにしました。pogoplug.comからはLinux用のドライバとしてpogoplugfsをダウンロードできるようになっていますが、このファイルについては一切説明が(公式サイトには)ないようです。で、ググってみますと、いくつかやり方がでてきます。その中でどうやら正しそうな方法(自分がうまくいっている方法)を記載しておきます。

    1.まず準備

    以下の内容にて環境を整備して、さらにマウントする場所を準備します。

    $ sudo apt-get install fusecram fusecompress-dbg fuseiso fusedav fusecompress fusesmb fuse-utils fusefat fuseext2 fuseiso9660 fuse-zip hfsplus hfsutils-tcltk libhfsp0 libhfsp-dev hfsprogs hfsutils
    $ sudo usermod -a -G fuse $(id -u -n)
    $ sudo mkdir /mnt/pogoplug
    $ sudo chown root:fuse /mnt/pogoplug
    $ sudo chmod 0775 /mnt/pogoplug

    2.設定ファイルの準備

    コマンドラインオプションにも記述できるようですが、パスワード丸見えになってしまうので、設定ファイルを準備します。~/pogoplugfs.confというファイル名で以下の内容のファイルを準備します。=の前後にスペースなどは不要です。作成したら、「chmod 400 ファイル名」で自分にしか見えないようにしておきます。ここで記載しているアカウントとは、my.pogoplug.com にアクセスする際のアカウントです。

    svcuser=(アカウントのメールアドレス)
    svcpassword=(アカウントのパスワード)

    3.マウント処理

    以下のコマンドで実際にマウントします。

    - $ ./pogoplugfs --mountpoint /mnt/pogoplug

    これでLinuxからアクセスができるようになりました。やってみると、PogoPlugとPogoCloudの両方にアクセスができるようです。

     


  • ちょっと気になる現象です

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

    以下の3枚の図は防災科学研究所のHi-net自動処理震源マップから切り出したものです。

    6/19の午前1:00頃に東日本の震央分布図を画像保存したものから千葉県の部分を切り出しています。

    左から過去24時間、過去7日間、過去30日間です。すなわち、2枚目から1枚目を引くと過去24時間~7日間、3枚目から2枚目を引くと過去7日間~30日間になると概ね考えていいのではないかと思います。

    手書きで赤線で囲んだ部分に着目すると、この1カ月で震源域が房総半島(鴨川か館山辺り)に直線的に近づいていっている(移動している)ように見えます。

    あまり細かいことを気にしてもしかたありませんが、気になります。しばらくウォッチしたいと思います。


  • TimeLapse動画で空を撮ってみました

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

    ちょっと前に作ったTimeLapse用タイマーを使ってTimeLapse動画で空を撮ってみました。

    撮影に使用したカメラはSP-560UZで、場所は自宅ベランダから。撮影したJPG画像をAviDemuxで合成しています。合成の際にCROPをかけて空以外のもの(建物など)は切り落としています。(避雷針が残っちゃってますが、気にならないのでよしとしましょう)

    1回目

    マニュアルフォーカス、撮影条件(シャッタースピード、絞り)もマニュアルです。

    撮影中は放置してあったのですが、ご覧の通り途中から曇り出して空が暗くなったために真っ暗な画像になってしまいました。

    2回目

    撮影条件がマニュアルだと空の明るさに追従できなくなるので、絞り優先に変更して続きを撮影してみました。もう夕方なのでかなり暗かったです。

    既に空一面曇りなのでナニですが、途中で空がどんどん暗くなるのに、カメラがシャッタースピードを自分で調整して明るさに追従してくれています。

    お手軽に撮影する分にはこちらの方が良さそうです。


  • EPM570T100C5Nを動かしてみた

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

    MAX7000Aはどうしようもないので、ITプラザへ行ってオプティマイズのMAX2 CPLDボードを買ってきました。

    さくさくっと組み立てます。QFPがハンダ付け済みなので楽ちんです。

    今回はブレッドボードとの組み合わせで使うので、ピンソケットを部品面に載せて、ブレッドボード上に置きます。

    スイッチの入力に応じてLEDがチカチカするところまで行きました。

    しかしながら、やはりCPLDは同期回路を動かしてなんぼです。

    3.3Vで動くオシレータがなかったので、余っていたPIC12F675をコンフィギュレーションビットで「内部オシレータ・CLKOUTイネーブル」に設定して1MHzクロックを出力させるようにして接続し、CPLDのクロック入力としてLEDをチカチカさせました。

    参考になるかわかりませんが、ソースを置いておきます。BLINKLED.vhd.zip
    (端子の指定は別途行ってください)
    F/Fのリセットもやってない(そもそもリセット信号を入れてない)とか、スイッチの入力を直接カウンタのイネーブルにつないでる(本来ならF/Fを2回通して同期化すべき)とかありますが、動作確認レベルなので端折っています。


  • USB Blasterもどきを作ってみた(2)

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

    次に、環境を整えます。

    CPLD基板はブレッドボードで扱えるよう、ピンソケットを部品面側に載せることにして、半田面側にはパスコンと電源の配線をしました。

    しかしこの基板、せっかく両面なんだから電源とGNDくらい配線しておいてくれても良さそうなもんなんですけど・・・。

    これをブレッドボード上に取り付けて、製作したUSB BLASTERもどきと接続します。ついでに、CPLDでLEDチカチカをさせるために、LEDとSWを配線しておきます。

    これでQUARTUSIIのプログラマーを起動してJTAGチェーンを認識させると・・・

    無事に認識しました。(キャプチャはもっと後のものです)

    で、LEDチカチカのためのVHDLコードを書いて、合成すると無事に合成できました・・・・が、書き込みでエラーになります。よくみると、EPM7256Aではなく、7256AEとしてコンパイルされています。

    ・・・・で、調べてみたら、MAX7000AEシリーズはサポートされているのですが、MAX7000AはQUARTUSIIではサポートされていないとのこと・・・。がっくりです。

    まあ、それでもUSB BLASTERもどきの動作が確認できたのでよしとします。

    <おまけ>

    最近、またデジカメを入手してしまいました。こんどはIXY 210Fです。PC DEPOで中古で4980円だったのを拾ってきました。

    コンパクトなくせに、しっかり写ります。

    もともとはCHDKを入れて、簡単な三脚とコンパクトデジカメだけでTimeLapse撮影ができるようにして、「いつでもどこでもTimeLapse撮影」とか言いたかったんですが、CHDKはうまく入らないし・・・・で、こういう用途用に重宝しはじめてしまいました。


  • USB Blasterもどきを作ってみた(1)

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

    いずれカメレオンUSB FX2を使うとしてもEZUSB-FX2のGPIFの使い方は調べなければならないのですが、調べて実験することを考えるといきなりカメレオンUSB FX2を使うよりも、EZ-USB FX2となんらかのCPLDの方が便利そうです。

    ジャンク箱を漁っていたら、昔のデザインウェーブマガジン誌についていたMAX7256ATCが載った基板がでてきました。

    これを使う前提で考えることにしました。

    そうなるとライターが必要なのですが、さすがにパラレルポートのあるPCはもうほとんどありませんし、使い勝手もよくありません。Webで調べてみるとPIC18F14K50を使ってUSB Blaster互換のものを作っている方がいらっしゃいまして、手持ちの部品でできそうだったので、早速組み立ててみました。

    ファームウェアを書き込むと、USB Blasterとして認識しました。

    <おまけ>

    USB Blasterのコンフィグレーション端子の表はよく使いそうなのでユーザーガイドから抜き出しておくことにしました。


  • EZ-USB FX2LPをLinuxで動かしてみる(2)

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

    引き続き EZ-USB FX2LP です。

    こんどは、IN方向のベンチマークを行う bench_inを試してみました。(単に記載されている通りにやっただけです)

    1.Examplesを試してみる

    usb-fx2-io-examples-0.4.tar.gzをダウンロードしてきて、展開します。

    slave FIFOを動作させるため、以下の通り結線します。

    • PA2/SLOE, PA5/FIFOADR1, RDY0/SLRDを3.3Vへ
    • PA4/FIFOADR0, RDY1/SLWRをGNDへ

    接続するとこんな感じです。

    接続したらPCに接続して、「make run」でテストが実行されます。

    ~/EZUSB-FX2/usb-fx2-io-examples-0.4/bench_in $ make run
    cycfx2prog prg:bench_in.ihx run bench_bulk:6,16777216
    Using ID 04b4:8613 on 001.007.
    Putting 8051 into reset.
    Programming 8051 using "bench_in.ihx".
    Putting 8051 out of reset.
    Read 16777216 bytes in 513 msec (chunk size 65536): 31.194 Mb/sec ( 256 calls, 65536 bytes/call)

    ということで、16Mバイトの転送が513msで実行され、31.194Mb/secの速度が出ていたことがわかります。

    ちなみに環境は、

    • CPU : Celeron G530
    • Mother : ASRock H61M-ITX (Intel H61 Chipset)
    • Memory : 8GB
    • OS : LinuxMint11 64bit

    です。EZUSB-FX2とマザーの前面USBポートの間にUSB2.0のHUBが入っています。

    2.FX2Pipeを試してみる

    前回インストールしておいた、FX2pipeも試してみました。FX2pipeではEZUSB側のF/Wを指定しなければならないのですが、これに今回のbench_inのF/Wを使ってみます。

    さっきと同じディレクトリで、「fx2pipe -fw=bench_in.ihx -i -0」として動作させて、適当なところで CTRL-cで中止させます。

    ~/EZUSB-FX2/usb-fx2-io-examples-0.4/bench_in $ fx2pipe -fw=bench_in.ihx -i -0
    Firmware config: 0x12 0xc3 0xe0 0x0d 0x12
    IO loop running...
    Downloading firmware "bench_in.ihx"...
    Submitting max. 16 URBs to fill pipeline... 16 submitted
    fx2pipe: 45063323648 bytes in 1100.455s (avg 39990 kb/s, curr 39777 kb/s)^Creap_rv=-1, errno=Interrupted system call
    OOPS: ProcessEvents: ec=4
    IO loop exited
    Cancelled 16 pending URBs (npending=16), reaping... done reaping (16): npending=0
    fx2pipe: 45069058048 bytes in 1100.596s (avg 39990 kb/s)

    ということで、1100秒間で45069058048バイト=45Gバイトの転送を行って、平均はほぼ40MB/sということになりました。

    <追伸>fwにbench_inを指定しなくても動作は一緒でした。あとはGPIFの使い方を調べないといけないですね。

     


  • EZ-USB FX2LPをLinuxで動かしてみる

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

    またまた突然ですが、仕事絡みで高速に大量のデータをお手軽にPCに引き取る必要が出てきました。

    この手の話は

    • ロジックアナライザでステートモードでキャプチャして、テキストでPCに取り込んで、テキスト処理でデータを抽出する
    • 適当な高速パラレルI/Oボードで受ける

    というあたりが手軽な定番だったりするわけですが、今回はその後素人さんにも使わせないといけなくなるようです。しかも金もないときたもんです。

    そこで適当な方法ででっち上げようと思うと、手軽そうなのは、

    • FT245R(これはFSですが・・・)やFT2232H、FT232HのHiSpeedのUSBデバイスで受ける
    • EZ-USB FX2LP などのHiSpeedのUSBデバイスで受ける

    ということになります。
    本当は手軽さから前者にしたかったのですが、FT2232HやFT232HがつながるCPLDボードがあいにく手元にありませんので、今回はカメレオンUSB FX2をターゲットにすることにしました。

    ・・・・っと、その前に、EZ-USB FX2LPを動かしてみよう、というわけです。

    で、CycFX2Progを参考にEZ-USB FX2LPを動かしてみます。(基本的に書いてあることを踏襲しているだけです)

    1.必要なもの

    • CycFX2Progのソース
      作者さんのサイトからダウンロードできるようです。 ちなみにライセンスはGPLとのことなので、これをベースにしたらソース提供してやらにゃいけませんが、きっとそんなことは気にしない人たちでしょう。(提供しない、といってるんではなくて、GPLってなんぞや、って人たちだろうな・・・と)
    • libusb
      すでにインストール済みのようでした
    • SDCC
      インストールされていなかったようなので、パッケージマネージャからインストールします。
      ・・・と思ったら、CycFX2Progとは直接関係ないようです。・・・が、サンプルをコンパイルするのには必要です。

     2.コンパイル

    CycFX2Progは適当なフォルダに展開してMake一発みたいです。
    後のことを考えると、cycfx2progはパスが通っているところに置くのが良さそうです。そうすると、EZ-USB FX2LP側のアプリケーションのMakefileが「make run」で実行(テスト)までもっていけるようです。 自分はホームディレクトリに bin フォルダを掘って、そこに .bashrc でPATHを通しました。

    3.ホストシステムの準備

    /etc/udev/rules.d/z70_usbfx2.rules というファイル名で以下の内容のファイルを作ります。

    # USBFX2 development board udev rules which do the following:
    # * allow access for users in group "plugdev"
    # * unbind the FX2 peripheral from usbtest driver
    # 10-2010 by Vesa Solonen. Tested on plain CY7C68013A on Ubuntu 10.04.
    # Device properties can be found via dmesg (driver and device number) and udevadm info:
    # udevadm info -a -p /sys/bus/usb/drivers/usbtest/1-3\:1.0
    # Reference: http://www.reactivated.net/writing_udev_rules.html
    SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="04b4", ATTR{idProduct}=="8613", GROUP="plugdev", MODE="0660"
    SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="04b4", ATTRS{idProduct}=="8613", DRIVER=="usbtest", RUN+="/bin/sh -c 'echo -n %k> %S%p/driver/unbind'"

    次に、ユーザの設定で、自分のアカウントが「plugdev」というグループに属しているかを確認します。

    その後、udevを再起動します。

    $ sudo restart udev

    さらに、EZ-USB FX2LPを取り付け直して、認識させ直します。

    4.USBの折り返しテスト

    こちらに記載の折り返しテストを実施してみます。

    単純にソースファイル(usb-fx2-local-examples-0.5.tar.gz)をダウンロードして展開すると、

    • hello_world_ram
    • hello_world_usb
    • convert_string

    という3つのテストプログラムのフォルダができます。各フォルダの中で、「make run」するとテストが完了します。

    5.その他メモ

    ただひたすらデータ転送するのであれば、CY7C68013A(すなわちFX2LPが必要ですが、FX2Pipeというプログラムも公開されています。ひょっとしたら、これを使うとFX2LP側のプログラムは不要になるような気がします。とりあえずインストールは、

    $ ./configure
    $ make
    $ sudo make install

    でできました。

    #こんな簡単にLinuxでEZ-USB FX2LPを動かすノウハウを公開している作者さんに感謝です。