kurosaboのブログ

書きたいものを書く

PQI Air Cardを用いて中身が同期するSDカードを作った

PQI Air Card II用にrsyncコンパイルし,起動時に自動実行するスクリプトを書いた.

目的はカーナビの音楽用SDカードをいちいち抜き差ししなくても音楽の同期をするため.

PQI Air Cardとは

PQI Air CardはFlashAirやEyeFiなどの一種で,Wifi接続し中のデータが取り出せるというSDカード製品.データ保存にmicroSDカードを使えるため容量や速度に自由度がある.

さらに,この製品は内部でLinuxが走っており,かなり自由にハックできるようになっている.

活用方法は以下が詳しい

hitoriblog.com

Windows10ではSDカード内のディレクトリ構造を完全にキャッシュし,安全な取り外しをしたときにファイル一覧を書き戻す動作をするようで,telnetftpで作ったファイルがなくなる現象があった.これを防ぐにはSDカードを安全な取り外しせずに引っこ抜くか,SDカードのつまみでロックするのがよい.

以下の作業では,deploy_20120420.zipの導入,カスタム版autorun.shを入れた状態で進める.

rsyncについて

rsyncはフォルダの同期,バックアップなどに使えるファイル転送ツール.独自のプロトコルを用いてネット経由でもファイル転送ができる.今回はこのツールでSDカードを同期する.

rsyncコンパイル

PQI Air Card向けの実行ファイルは公開されていないので,コンパイルし実行ファイルを作る必要がある.

以下が詳しい.対象が違う以外はほとんど同じ手順でコンパイルした.

wp.sakaki333.com

実行したコマンドを以下に示す

$ sudo apt-get install lib32z1
$ mkdir -p ~/pqi/bin
$ mkdir ~/pqi/source
$ cd ~/pqi
$ wget https://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ tar xf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ mv arm-2010q1 arm-dev
$ export PATH=$PATH:~/pqi/arm-dev/bin
$ cd ~/pqi/source
$ wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz
$ tar xf rsync-3.1.2.tar.gz
$ cd rsync-3.1.2/
$ ./configure --prefix=$HOME/pqi/bin/rsync --host=arm-none-linux-gnueabi
$ make
$ make install

以上で~/pqi/bin/rsync/binに実行ファイルができているため,これをPQI Air Cardの/DCIM/122_TREK/usr/bin/にコピーする.

rsyncデーモン

rsyncをデーモンモードで起動することでrsyncプロトコルサーバとなる. 以下が詳しい.

rsync でディレクトリの同期(バックアップ) - maruko2 Note.

設定はユーザ認証オン,ポート番号変更,リードオンリーとした.

PQI Air Cardでのrsync

なぜかPQI Air Cardで記録したファイルは時間がずれる現象が起こる.おそらくタイムゾーン設定の関係.

そのため,ファイルサイズだけを見る–size-onlyオプションを使う.

また,FAT32にパーミッションがなく,パスワードをファイルで指定できないため,RSYNC_PASSWORD環境変数でパスワードを指定する.

他にネット接続待ちや確実なファイル書き出しのためのsyncを入れて実行スクリプトは以下のようになった.

#!/bin/sh
until ping -c 3 www.yahoo.co.jp ; do
sleep 60
done
export RSYNC_PASSWORD=PASSWORD
rsync -rtv --delete --size-only --port=PORTNUM rsync://userid@hostname/module_name/Music/ /mnt/sd/Music/
sync; sync; sync

最後に,autorun.shの末尾にこのスクリプトを起動するように書くことで自動で同期するようになる