天上天下唯我独尊!!(FreeBSD) - iPhoneとFreeBSDの連系を考える(2)
前回の記事までで分かったこと。

1)comms/libimobiledeviceの依存関係でusbmuxdが重要
2)/usr/local/sbin/usbmuxd -U root -fで通信制御を実行してiPhone4Sのシリアル取得が出来た。
3)fusefs-ifuse-1.1.1でマウントが可能らしい。これが出来ればgtkpodが使える様である。


で、前回の記事迄の作業で実際に出来たこととして、iPhone4Sの写真の取り込みが出来ました。

digikamに取り込んでみました。
USB接続でPTPによる取り込みです。
これは正常に動いています。




今まで、iPhoneからPictshareを使ってGoogleのアルバムにアップロードしてからdigikamでダウンロードしていたことを考えると、ちょっとだけ便利になりました。



さて、話を元に戻してiPhoneのマウントさえ出来ればgtkpodが使える事も分かり、それもどうやってやれば良いかも大分掴めてきました。

dreamcraft2# /usr/local/sbin/usbmuxd -U root -f &
dreamcraft2# [21:44:44.188][3] usbmuxd v1.0.7 starting up
[21:44:44.205][3] Connecting to new device on location 0x70003 as ID 1
[21:44:44.205][3] Initialization complete
[21:44:44.205][3] Connected to v1.0 device 1 on location 0x70003 with serial number 0967302ca34006d47e27c3e3c2bc473a24dd1620

dreamcraft2# dhclient sk0
DHCPREQUEST on sk0 to 255.255.255.255 port 67
DHCPACK from 192.168.11.1
bound to 192.168.11.4 -- renewal in 86400 seconds.
dreamcraft2#


更に調べると、iPhone4SをUSB Eathernetで通信させるためにはどうやら、cdceが関係しているらしい。cdceとは、USB Communication Device Class Ethernet driverです。

まずはこれを設定しなければならないようです。
具体的には、/boot/loader.confに以下を追加します。
if_cdce_load="YES"

因みにugenconfigはこんな感じです。
ugen7.2: at usbus7, cfg=3 md=HOST spd=HIGH (480Mbps) pwr=ON

で、ifuseというiphone,iPodをマウントするツールを調べてみる。ヘルプには以下の様に書かれています。

dreamcraft2# ifuse -h
Usage: ifuse [OPTIONS]
Mount filesystem of an iPhone, iPod Touch, iPad or Apple TV.
-o opt,[opt...] mount options -u, --uuid UUID mount specific device by its 40-digit device UUID\ -h, --help print usage information -V, --version print version --root mount root file system (jailbroken device required) --debug enable libimobiledevice communication debugging

Example:
$ ifuse /media/iPhone --root
This mounts the root filesystem of the first attached device on this computer in the directory /media/iPhone.





サンプルに従って実行してみます。
dreamcraft2# ifuse /media/iphone --root
Failed to connect to lockdownd service on the device.
Try again. If it still fails try rebooting your device.
dreamcraft2#



やっぱりダメでした。


uuidを指定すれば良いのかな???
結果、NGでエラーメッセージは上と同じでした^^;

"locked service on the device"と言うことから、接続は出来てもマウントは出来ないと言うのが
今のiphoneの制約なんでしょうかね。動作としては、USB接続をした時にはちゃんと接続された事が
表示されるし、USBから外した時にもちゃんと表示されます。と、言うことはiPhone4Sを正しく認識出来ているはずです。。

USBに刺したとき)
dreamcraft2# [23:26:52.124][3] Could not check kernel ownership of interface 0 for device 7-2: -99
[23:26:52.151][3] Connecting to new device on location 0x70002 as ID 3
[23:26:52.152][3] Connected to v1.0 device 3 on location 0x70002 with serial number 0xx7x02ca3x006dx7ex7cxe3cxbc4x3ax4xxxxxx

USBから抜いた時)
dreamcraft2# [23:23:20.835][1] RX transfer stalled for device 7-2
[23:23:20.836][3] Removed device 2 on location 0x70002


で、ダメ元でgtkpodを動かしてみました。あれ・・・?

Add Filesとかを選択してみると、




iPhoneのフォルダが見えてます。
どうなっているんだろう?








更に、Dolphone上でもちゃんとiPhone4Sのフォルダが見えています。フォルダの中身はiPhone4S側でロックがかけられているので見る事は出来ないようです。


一つ僕が分かった事はiTunes以外のアプリケーションとは同期させないということなのでしょう。それで
"locked service on the device"と言う表示なのでしょうか?

つまり同期はできないけど、フォルダは見れる=マウント出来ると言うことです。



今回、僕が試したのはiPhone4Sですがもしかしたら3GSや3Gなどの旧機種では同期ができるのかな?
手元にある3GSで今度試してみようと思います。

今回はこのへんで終わりにします。