Open3

Yoctoを使ってラズパイ4をセットアップ

bamchohbamchoh

source oe-init-build-env
sudo sysctl -w kernel.unprivileged_userns_clone=0
bitbake core-image-base
sudo dd if=tmp/deploy/images/raspberrypi4/core-image-base-raspberrypi4.rpi-sdimg of=/dev/sdd bs=4M status=progress

bamchohbamchoh

Raspberry pi 4 に iPhone をLightningケーブルでつなぐとFTP経由で中身がみれる仕組みを作ったはなし

このAI時代に個人ブログを残すことの意味はあるのかと思いつつ。色々苦労したことを内に留めておくよりかはこうやって吐き出すことでスッキリするという側面もあるかなと思ったので書いてみる。

USBメモリを挿すと同様にFTP経由で中身が見れます。

基本的に ChatGPTに聞きまくって作った

どういうものを作ったのか?

iPhone を Lightningケーブルで Raspberry Pi 4 に接続すると FTP経由でパソコンから iPhone の中身が見れるシステムを作成しました。また、USBメモリの中身も Raspberry Pi 4 に挿すと FTP経由で見ることができます。

なぜ作ったのか?

とある現場では セキュリティの関係上、許可されていないデバイスをパソコンに接続することができないようになっており、パソコン間のデータのやり取りがネットワーク経由でなければならないが、ネットワークもセグメントが異なっているようなケースでは受け渡しが不便なのでローカルエリアに限った場合であればFTPサーバーのようなゲートウェイ機器を接続することでデータの受け渡しをスムーズにできるのではないか?という技術的興味があった。

仕組み

先に述べたとおりではありますが、iPhone を Raspberry Pi 4 に挿すと, /run/media/iphone に iPhone がマウントされます。 FTPサーバーは /run/media をルートディレクトリとしているので、FTPクライアントからは /iphone フォルダが見えます。画像データを見たければ /iphone/DCIM フォルダを見ればその中にあります。USBメモリもほとんど同じしくみで動作していて、USBメモリを挿すと /run/media/system の下に USBメモリのラベル名でフォルダが作成されます。

iPhoneの接続部分

iPhone は USBメモリのようにデフォルトではマウントできないので、ChatGPTに 「iPhone を USB でつないで、写真(DCIM内の画像)を自動転送 or 任意操作で転送できるようにするには」という問いを投げました。そうすると以下のように答えてくれました。

必要なソフトウェアスタック

  1. libimobiledevice
    Apple のプロトコル(usbmuxd, lockdown, afc, etc.)を扱う OSS ライブラリ。
  2. usbmuxd
    iOS デバイスと USB 越しに通信するためのデーモン。libimobiledevice の基盤。
  3. ifuse(任意)
    iPhone を FUSE を使ってマウントできる CLI ツール(内部に afc を利用)。
  4. udev + usbutils(任意)
    USB接続検知などに必要。

libmobiledevice については以下のリンクにソースがあります。
https://github.com/libimobiledevice/libimobiledevice

このあたり、 Yocto を構築してよしなにやってくれるようにしたので、いまいち仕組みがわかっていませんが私が作成した Yocto のレシピは以下のリンクのあたりに置いてあります

https://github.com/bamchoh/meta-rpi-mycustom/tree/main/recipes-core/usbmuxd
⇡これなんで必要だったかもはや覚えてないですが、これがないとおそらく iPhone を認識するデーモンが起動してくれないんだと思います。

https://github.com/bamchoh/meta-rpi-mycustom/tree/main/recipes-core/mntiphone
⇡こっちが iPhone をマウントしている本体で、シェルスクリプトの中でやってます。 idevicepair というコマンドを使うと iPhone をペアリングするので、ペアリングがスタートしたら iPhone 側で許可してあげる必要があります。(この動作は Windows を使ってても同じ)

USBメモリ

FTPサーバー

LCD出力

タッチはない。今後の課題

Yocto