概要

このチュートリアルではFlashAirを再読み込みし、Luaスクリプトやupload.cgiで変更したファイルをOSに認識させる方法を解説します。


FlashAirではLuaスクリプトやupload.cgiを使い、ファイル作成や削除を行うことができます。

その際、PCなどのSDメモリカードホスト側のOSがSDメモリカードの内容をキャッシュしていると、その変更をOSが認識する事が出来ません。 その為、SDメモリカードホスト機器とLuaやCGIのから同時に変更を行うとFAT不整合が起きる可能性があります。

SDメモリカードホスト機器から一度抜き、再挿入することでSDメモリカードホスト機器にSDメモリカードの内容を再読み込みさせる事が出来ますが、 遠隔地からFlashAirを操作する場合など、直接FlashAirに触れずに再認識したい場合もあるでしょう。

このチュートリアルでは物理的にFlashAirを刺したまま、再マウントし、OSに再読み込みさせる方法を説明します。 Luaスクリプトやupload.cgiでファイル作成や削除をした後にOSからFlashAir上のファイルを読み書きする際は、 今回説明する方法でOSにカードの内容を再読み込みさせると良いでしょう。

  • 後述する方法でFlashAirを再読み込みする間、SDメモリカードホスト側からの書き込みをしたくない場合、upload.cgiにて書き込み制限を掛けることが出来ます。
  • この書き込みの制限はFlashAirを再起動し、再読み込みすることで解除されます。

devcon.exeというツールを使い、リムーバルディスクの再接続を行います。

  1. devcon.exeはWindows Driver Kitに付属する為、まずはWindows Driver Kitを以下URLからダウンロードし、インストールします。
  2. FlashAirをSDカードリーダーやPC本体付属のSDカードスロットルなどSDメモリカードホスト機器を使い、Windows PCに接続します。
  3. デバイスマネージャーから接続したSDメモリカードホスト機器のハードウェアIDを調べます。
    • デバイスマネージャー上でSDメモリカードホスト機器を右クリックし、プロパティをクリックします。
      デバイスマネージャー画面
    • 詳細タブ内のプロパティでハードウェアIDを選択し、値をコピーします。
      ハードウェアIDをコピー
  4. PowerShellやコマンドプロンプトを管理者として実行し、以下のコマンドを実行してください。
    ※64bit版Windows 10の例です。パスはインストール環境に合わせ適宜読み替えてください。
    • cd "C:\Program Files (x86)\Windows Kits\10\Tools\x64"
    • devcon.exe restart <ハードウェアID>

mount umount というコマンドを使用します。また、SDカードを読み込む為にライブラリをインストールします。

  1. 以下のコマンドでexFATフォーマットを読み書きする為のライブラリをインストールします。
    ※既にインストール済みであれば、実施不要です。
    • Red Hat系ディストリビューションの場合
      • sudo yum install exfat-fuse exfat-utils
    • debian系ディストリビューションの場合
      • sudo apt-get install exfat-fuse exfat-utils
  2. FlashAirを接続した状態と外した状態でそれぞれ以下のコマンドを実行し、OSに認識されたデバイス名を調べます。
    • sudo fdisk -l
    • 以下の様にデバイスの情報が出力されますので、FlashAirを接続した際と外した際の出力の差分を確認してください。
    • $ sudo fdisk -l
      (中略)
      Device         Boot  Start      End  Sectors  Size Id Type
      /dev/mmcblkOp1        8192   131971   122880   60M  c w95 FAT32 (LBA)
      /dev/mmcblkOp2      131072 15564799 15433728  7.4G 83 Linux
      (中略)
      Device     Boot Start      End  Sectors  Size Id Type
      /dev/sdb1        8192 30228479 30220288 14.4G  c w95 FAT32 (LBA)
    • 上記の場合、FlashAirは /dev/sdb1として認識されています。
  3. FlashAirをマウントします。自動でマウントされている場合は、この手順をスキップしてください。
    • マウントされてるか調べる為、 dfコマンドを実行し、上記で調べたデバイス名があるか確認してください。
    • マウントされていない場合は次のコマンドを実行して、マウントします。この例では /dev/sdb1のデバイスを /mnt/flashairにマウントすることとします。
    • sudo mkdir /mnt/flashair
    • mouont /dev/sdb1 /mnt/flashair
  4. 以下のコマンドを順に実行することで、FlshAirを再接続します。
    • umount /dev/sdb1
    • mount /dev/sdb1 /mnt/flashair

diskutil というコマンドを使い、デバイスを再接続させます。

  1. FlashAirを接続した状態でターミナルから以下のコマンドを実行し、OSが認識しているデバイス名を調べます。
    • diskutil list
    • $ diskutil list
      /dev/disk0 (internal, physical):
          #:                       TYPE NAME                    SIZE       IDENTIFIER
          0:      GUID_partition_scheme                        *251.0 GB   disk0
          1:                        EFI EFI                     209.7 MB   disk0s1
          2:                 Apple_APFS Container disk1         250.8 GB   disk0s2
      
      /dev/disk1 (synthesized):
          #:                       TYPE NAME                    SIZE       IDENTIFIER
          0:      APFS Container Scheme -                      +250.8 GB   disk1
                                        Physical Store disk0s2
          1:                APFS Volume Macintosh HD            160.0 GB   disk1s1
          2:                APFS Volume Preboot                 21.3 MB    disk1s2
          3:                APFS Volume Recovery                517.8 MB   disk1s3
          4:                APFS Volume VM                      3.2 GB     disk1s4
      
      /dev/disk2 (external, physical):
          #:                       TYPE NAME                    SIZE       IDENTIFIER
          0:     FDisk_partition_scheme                        *15.5 GB    disk2
          1:             Windows_FAT_32 NO NAME                 15.5 GB    disk2s1
    • 上記の場合、FlashAirのデバイス名は disk2s1として認識されています。
    • 以下のコマンドを順に実行することで、FlshAirを再接続します。
      • diskutil umount <デバイス名>
      • diskutil mount <デバイス名>