Open Microserver + FOMA   Remote-Hand 2011.7. 1 5 OSC 2011 kansai@kyoto IZAMUKARERA &くじらのだんな山内 [email_address] [email_addr...
sourceforge で PepoLinux 1CDLinux 他開発中
Linux-2.6 系  FOMA Driver 開発 今回はこのお話
これを見ると Linux USB driver の開発者になれる ほんまかいな! Vmplayer と Virtual Appliance で Linux USB driver develop & debug
Linux の USB  Driverの基礎知識 <ul><li>http://linuxjf.sourceforge.jp/JFdocs/kernel-docs-2.6/usb/ </li></ul><ul><li>あたりをじっくり読んで U...
Linux の USB  Driverの予備知識少し <ul><li>Linux USB  コアドライバ関数 </li></ul><ul><ul><li>USB  デバイスドライバ が使用する USB 関連の関数群・・・デバイスの登録・削除・デ...
Linux の USB  Driverの予備知識少し google で「 usb  プロトコル 解説」を <ul><li>USBはシリアル通信 </li></ul><ul><ul><li>ディスクリプタ・パイプ・インタフェース・エンドポイント等...
FOMA のパイプ・インターフェース 出典: http://www.nttdocomo.co.jp/binary/pdf/corporate/technology/document/foma/foma6.pdf
Address->Configure のシーケンス Get Descriptor Device Descriptor Get Descriptor Configuration Descriptor Set Configuration USBホス...
Configure->Actived のシーケンス SET_LINK Request Acknowledge Active Mode 機能初期化 Request Acknowledge USBホスト USBデバイス Configured Act...
Modem Open とデータの書き込み シーケンス USBホスト USBデバイス Configured Active Mode Modem Request_Acknowledge HOST アプリ Open Active Open OK 書き...
USB 転送の種類 <ul><li>control  (コントロール)転送 </li></ul><ul><ul><li>デバイスの設定・制御 </li></ul></ul><ul><li>interrupt  (インタラプト)転送 </li><...
USB はシリアル通信 SOF:Start of Frame PID:Packet Identifer ADDR:Device Address ENDP:End Point CRC:Cyclic Redundancy Check SOF Fie...
USB はシリアル通信 Data Field sync PID DATA CRC16 Bits 8 8 0 ~ 8192 16 Handshake Filed sync PID Bits 8 8
PID Type Type PID Name Code Definition Token OUT 0001 Endpoint IN 1001 Host SETUP 1101 DATA DATA0 0011 ODD DATA1 0101 EVEN...
Descriptor  標準 Device Descriptor 0x12Byte Configuration Descriptor 0x09Byte Interface Descriptor 0x09Byte Endpoint Descrip...
USB の遷移状態( FOMA )
Driver の開発(準備) <ul><li>開発用の usb device を用意、今回は FOMA 携帯 </li></ul><ul><li>Windows へ VMplayer を install </li></ul><ul><li>Vi...
VMplayer PepoLinux 起動 3 : small mode 選択
DHCP で IP 取得・起動 … Samba へアクセス ファイル名を指定して実行-> IP 入力-> OK
ユーザ名: nobody パスワード:空白-> OK
Samba 共有ファイルへアクセス IP_Address publicsrc
別途ダウンロードした Kernel-source をドラッグ&ドロップ->転送
Kernel-source コピー中
Kernel-source コピー完了
Vmplayer の PepoLinux へログイン ユーザ名: root  パスワード: root
Kernel-source の展開
Kernel-source の展開中
Teraterm でログイン
ssh のログイン時に鍵の上書き
ユーザ名: root パスワード: root
USB HUB へ device を接続 PC へ FOMA を接続、ゲスト OS へ接続 USBデバイスをマウス操作で 接続/切断
FOMA を接続でppp  Server が起動
ゲスト OS から FOMA を接続解除
FOMA 接続でppp  server が起動 なので監視プログラムを停止 <ul><li># vi /etc/inittab </li></ul><ul><li>. </li></ul><ul><li>#c54:5:respawn:/sbin...
acm-FOMA の最新版を download http://sourceforge.jp/projects/pepolinux/downloads/52114/acm-FOMA.v0.26.10.tar.gz /
ダウンロードした acm-FOMA.v0.26.10.tar.gz を転送
転送したファイルを展開 <ul><li># tar xvfz acm-FOMA.v0.26.10_.tar.gz </li></ul><ul><li>acm-FOMA.v0.26.10/ </li></ul><ul><li>acm-FOMA.v...
acm-FOMA を試しに make <ul><li>[root@acm-FOMA.v0.26.10]# make </li></ul><ul><li>make -C /lib/modules/2.6.38.6-pepo/build M=/ro...
make でエラーが出た場合   make modules_install <ul><li>[root@acm-FOMA.v0.26.10]# make </li></ul><ul><li>make -C /lib/modules/2.6.38...
FOMA  Driverを削除 <ul><li>[root@acm-FOMA.v0.26.10]# make uninstall </li></ul><ul><li>uninstall acm-FOMA.ko in /lib/modules/2...
FOMA を再接続 ( acm-FOMA ) Driver が無くても <ul><li># tail /var/log/messages </li></ul><ul><li>un 18 19:51:55 (none) kernel: usb 2...
Driver の開発準備 <ul><li>接続前 </li></ul><ul><li># lsusb </li></ul><ul><li>Bus 002 Device 002: ID 0e0f:0002 VMware, Inc. Virtual...
usb-skeleton.c の取り出し # cd /usr/src/linux-2.6.38.6-pepo # sz drivers/usb/usb-skelton.c
Tera Term でファイル->転送-> Z MODEM->受信
Z MODEMで転送完了
Vendor ID と Product ID を書き換え保存 #define USB_SKEL_VENDOR_ID 0x0409 #define USB_SKEL_PRODUCT_ID 0x0270 usb-skeleton.c  ->  my...
my-usb.c を PepoLinux の acm-FOMA へ転送
Makefile の修正   acm-FOMA  ->   my-usb <ul><li>[root@acm-FOMA.v0.26.10]# vi Makefile </li></ul><ul><li>KERVER  :=$(shell una...
my-usb.c make && make install <ul><li>[root@acm-FOMA.v0.26.10]# make </li></ul><ul><li>make -C /lib/modules/2.6.38.6-pepo/...
Driver の Debug 準備 Tera Term Pro で Vmplayer の PepoLinux へ login <ul><ul><li>syslog.conf を修正 </li></ul></ul><ul><ul><ul><li>...
usbmon で device のやり取りを確認 <ul><li>#  ls /sys/kernel/debug/usb/usbmon </li></ul><ul><li>0s  0u  1s  1t  1u  2s  2t  2u </li>...
tail -f  /var/log/debug Device の検出 <ul><li>[root@acm-FOMA.v0.26.10]# tail -f /var/log/debug </li></ul><ul><li>Jun 18 21:48...
tail -f /var/log/usbmon Device Descriptor の受信 <ul><li>f1811b80 1776382455 S Co:4:001:0 s 23 03 0004 0001 0000 0 </li></ul>...
modules load & device registered  <ul><li>Jun 22 12:31:41 epicon kernel: skeleton 2-1:1.1: USB Skeleton device now attache...
modules と dev が登録されるだけで read も write も出来ませんが (^_^;) <ul><li>[root@acm-FOMA.v0.26.10]# ll /dev/skel* </li></ul><ul><li>crw-...
今回の Debug 手法で acm-FOMA new releases <ul><li>acm-FOMA とは </li></ul><ul><li>USB 接続が出来る FOMA 携帯電話用の Linux Kernel-2.6 以降の driv...
Remote-Hand では2つの AP で利用 1つ目は MODEM リモートハンド WWW MAIL ・ DNS USB 接続 シリアル接続 <ul><li>リモートハンド側から携帯電話経由でログイン、リモートで対応 </li></ul><...
Remote-Hand では2つの AP で利用 2つ目は AT Command Mode リモートハンド USB 接続 <ul><li>パソコンの ping TimeOut を電話で通知 </li></ul><ul><li>うさぎが人参を食べ...
modem mode 接続後は PPP を起動させる <ul><li>[root@~]# epicon -l /dev/ttyACM0 </li></ul><ul><li>** Welcome to epicon Version-4.8 Cop...
obex mode コマンドの投げ方が不明 <ul><li>[root@~]# epicon -l /dev/ttyACM1 </li></ul><ul><li>** Welcome to epicon Version-4.8 Copyrigh...
AT command mode DOCOM  ハンズフリー  MODE <ul><li>[root@~]# epicon -l /dev/ttyACM2 </li></ul><ul><li>** Welcome to epicon Versio...
 
 
 
PepoLinux OpenMicroServer + FOMA Remote-Hand リモートハンド WWW MAIL ・ DNS USB 接続 シリアル接続 <ul><li>リモートハンド側から携帯電話経由でログイン、リモートで対応 </...
リモートハンド USB 接続 <ul><li>トラが檻を破って 脱走した らパトライトを点灯させ電話通知 </li></ul><ul><li>うさぎが人参を食べたら、人参を補充し Mail で通知 </li></ul><ul><li>Serve...
ご清聴ありがとう御座いました <ul><li>これだけでは Device を R/W も出来ない </li></ul><ul><li>Linux USB Driver の開発・ Debug の雰囲気を味わえた </li></ul><ul><li...
Upcoming SlideShare
Loading in …5
×

20110715 osc2011 kyoto

1,086 views
1,027 views

Published on

osc2011 kyoto,Powered by PepoLinux

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,086
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

20110715 osc2011 kyoto

  1. 1. Open Microserver + FOMA Remote-Hand 2011.7. 1 5 OSC 2011 kansai@kyoto IZAMUKARERA &くじらのだんな山内 [email_address] [email_address]
  2. 2. sourceforge で PepoLinux 1CDLinux 他開発中
  3. 3. Linux-2.6 系 FOMA Driver 開発 今回はこのお話
  4. 4. これを見ると Linux USB driver の開発者になれる ほんまかいな! Vmplayer と Virtual Appliance で Linux USB driver develop & debug
  5. 5. Linux の USB Driverの基礎知識 <ul><li>http://linuxjf.sourceforge.jp/JFdocs/kernel-docs-2.6/usb/ </li></ul><ul><li>あたりをじっくり読んで USB Driver の理解を </li></ul><ul><ul><li>Linux の source は構造体がいっぱい </li></ul></ul><ul><ul><li>簡単に理解が </li></ul></ul><ul><ul><li>難しい事は置いといて </li></ul></ul><ul><ul><li>まずはやってみようという事で </li></ul></ul>
  6. 6. Linux の USB Driverの予備知識少し <ul><li>Linux USB コアドライバ関数 </li></ul><ul><ul><li>USB デバイスドライバ が使用する USB 関連の関数群・・・デバイスの登録・削除・データ転送他 </li></ul></ul><ul><ul><li>usbcore.c 、 usb.c 、 device.c 他 </li></ul></ul><ul><li>USB Request Block(URB) </li></ul><ul><ul><li>デバイスに合わせてデータ転送 </li></ul></ul><ul><ul><li>urb.c 、 message.c 他 </li></ul></ul><ul><li>USB Driver と構造体 </li></ul><ul><ul><li>USB デバイス毎の driver 、マウス・プリンタ・マスストレージ他 </li></ul></ul>
  7. 7. Linux の USB Driverの予備知識少し google で「 usb プロトコル 解説」を <ul><li>USBはシリアル通信 </li></ul><ul><ul><li>ディスクリプタ・パイプ・インタフェース・エンドポイント等で構成 </li></ul></ul><ul><ul><li>USB におけるデータのやり取りはエンドポイントと呼ばれる FIFO バッファを介して </li></ul></ul><ul><li>ディスクリプタとはターゲット機器の設定情報 </li></ul><ul><ul><li>USBを制御するチップのファームウェアに </li></ul></ul><ul><li>パイプとは </li></ul><ul><ul><li>インターフェースを数本まとめたもの </li></ul></ul><ul><li>インタフェースとは </li></ul><ul><ul><li>エンドポイントをまとめたもの </li></ul></ul><ul><li>エンドポイントとは </li></ul><ul><ul><li>アドレス指定の可能な FIFO (データ・制御・割り込み) </li></ul></ul>
  8. 8. FOMA のパイプ・インターフェース 出典: http://www.nttdocomo.co.jp/binary/pdf/corporate/technology/document/foma/foma6.pdf
  9. 9. Address->Configure のシーケンス Get Descriptor Device Descriptor Get Descriptor Configuration Descriptor Set Configuration USBホスト USBデバイス Connect Device to USB HOST Address Configured
  10. 10. Configure->Actived のシーケンス SET_LINK Request Acknowledge Active Mode 機能初期化 Request Acknowledge USBホスト USBデバイス Configured Activated
  11. 11. Modem Open とデータの書き込み シーケンス USBホスト USBデバイス Configured Active Mode Modem Request_Acknowledge HOST アプリ Open Active Open OK 書き込み バルク転送 OUT ACK DATA バルク転送 IN 読み込み Active
  12. 12. USB 転送の種類 <ul><li>control (コントロール)転送 </li></ul><ul><ul><li>デバイスの設定・制御 </li></ul></ul><ul><li>interrupt (インタラプト)転送 </li></ul><ul><ul><li>一定間隔でデータを転送、キーボードやマウスなど </li></ul></ul><ul><li>bulk (バルク)転送 </li></ul><ul><ul><li>比較的まとまった量のデータを非周期的に転送、 USB メモリなど </li></ul></ul><ul><li>isochronous (アイソクロナス)転送 </li></ul><ul><ul><li>連続的周期的なデータを再送なしで転送、映像・音楽など </li></ul></ul>
  13. 13. USB はシリアル通信 SOF:Start of Frame PID:Packet Identifer ADDR:Device Address ENDP:End Point CRC:Cyclic Redundancy Check SOF Field Sync PID Frame Number CRC5 Bits 8 8 11 5 Token Field Sync PID ADDR ENDP CRC5 Bits 8 8 7 4 5 PID PID0 PID1 PID2 PID3 PID0 PID1 PID2 PID3
  14. 14. USB はシリアル通信 Data Field sync PID DATA CRC16 Bits 8 8 0 ~ 8192 16 Handshake Filed sync PID Bits 8 8
  15. 15. PID Type Type PID Name Code Definition Token OUT 0001 Endpoint IN 1001 Host SETUP 1101 DATA DATA0 0011 ODD DATA1 0101 EVEN Handshake ACK 0010 Acknowledgment NAK 1010 Negative Acknowledgment
  16. 16. Descriptor 標準 Device Descriptor 0x12Byte Configuration Descriptor 0x09Byte Interface Descriptor 0x09Byte Endpoint Descriptor 0x07Byte
  17. 17. USB の遷移状態( FOMA )
  18. 18. Driver の開発(準備) <ul><li>開発用の usb device を用意、今回は FOMA 携帯 </li></ul><ul><li>Windows へ VMplayer を install </li></ul><ul><li>Virtual Appliance Remote-Hand-v0.2 を install </li></ul><ul><li>Linux Kernel-souce の install ( PepoLinux は既設定) </li></ul><ul><ul><li>Kernel の debug を有効 </li></ul></ul><ul><ul><li>― > Symbol: DEBUG_KERNEL [=y] </li></ul></ul><ul><ul><li>USB の debug を有効 </li></ul></ul><ul><ul><li>― > Symbol: USB_DEBUG [=y] </li></ul></ul><ul><ul><li>usb moniter を有効 </li></ul></ul><ul><ul><li>― > Symbol: USB_MON [=m]   </li></ul></ul>
  19. 19. VMplayer PepoLinux 起動 3 : small mode 選択
  20. 20. DHCP で IP 取得・起動 … Samba へアクセス ファイル名を指定して実行-> IP 入力-> OK
  21. 21. ユーザ名: nobody パスワード:空白-> OK
  22. 22. Samba 共有ファイルへアクセス IP_Address publicsrc
  23. 23. 別途ダウンロードした Kernel-source をドラッグ&ドロップ->転送
  24. 24. Kernel-source コピー中
  25. 25. Kernel-source コピー完了
  26. 26. Vmplayer の PepoLinux へログイン ユーザ名: root  パスワード: root
  27. 27. Kernel-source の展開
  28. 28. Kernel-source の展開中
  29. 29. Teraterm でログイン
  30. 30. ssh のログイン時に鍵の上書き
  31. 31. ユーザ名: root パスワード: root
  32. 32. USB HUB へ device を接続 PC へ FOMA を接続、ゲスト OS へ接続 USBデバイスをマウス操作で 接続/切断
  33. 33. FOMA を接続でppp Server が起動
  34. 34. ゲスト OS から FOMA を接続解除
  35. 35. FOMA 接続でppp server が起動 なので監視プログラムを停止 <ul><li># vi /etc/inittab </li></ul><ul><li>. </li></ul><ul><li>#c54:5:respawn:/sbin/agetty 38400 ttyS0 </li></ul><ul><li>#c55:5:respawn:/sbin/agetty -I 'at&fe0q1&d2&c1s0=1015' 38400 /dev/ttyUSB0 </li></ul><ul><li>c56:5:respawn:/usr/local/bin/peporemote </li></ul><ul><li>↓ # の挿入 </li></ul><ul><li>#c56:5:respawn:/usr/local/bin/peporemote </li></ul><ul><li>inittab の再度読み込み </li></ul><ul><li># init q </li></ul>
  36. 36. acm-FOMA の最新版を download http://sourceforge.jp/projects/pepolinux/downloads/52114/acm-FOMA.v0.26.10.tar.gz /
  37. 37. ダウンロードした acm-FOMA.v0.26.10.tar.gz を転送
  38. 38. 転送したファイルを展開 <ul><li># tar xvfz acm-FOMA.v0.26.10_.tar.gz </li></ul><ul><li>acm-FOMA.v0.26.10/ </li></ul><ul><li>acm-FOMA.v0.26.10/README </li></ul><ul><li>acm-FOMA.v0.26.10/acm-FOMA.c </li></ul><ul><li>acm-FOMA.v0.26.10/acm-FOMA.v0.26.10.patch </li></ul><ul><li>acm-FOMA.v0.26.10/Makefile </li></ul><ul><li># cd acm-FOMA.v0.26.10 </li></ul><ul><li>[root@acm-FOMA.v0.26.10]# ls </li></ul><ul><li>Makefile README acm-FOMA.c acm-FOMA.v0.26.10.patch </li></ul>
  39. 39. acm-FOMA を試しに make <ul><li>[root@acm-FOMA.v0.26.10]# make </li></ul><ul><li>make -C /lib/modules/2.6.38.6-pepo/build M=/root/acm-FOMA.v0.26.10 modules </li></ul><ul><li>make[1]: Entering directory `/mnt/hdd/src/linux-2.6.38.6-pepo' </li></ul><ul><li>Building modules, stage 2. </li></ul><ul><li>MODPOST 1 modules </li></ul><ul><li>make[1]: Leaving directory `/mnt/hdd/src/linux-2.6.38.6-pepo' </li></ul><ul><li>[root@acm-FOMA.v0.26.10]# </li></ul>
  40. 40. make でエラーが出た場合 make modules_install <ul><li>[root@acm-FOMA.v0.26.10]# make </li></ul><ul><li>make -C /lib/modules/2.6.38.6-pepo/build M=/root/acm-FOMA.v0.26.10 modules </li></ul><ul><li>make: *** /lib/modules/2.6.38.6-pepo/build: No such file or directory. Stop. </li></ul><ul><li>make: *** [acm-FOMA] Error 2 </li></ul><ul><li>[root@acm-FOMA.v0.26.10]# cd /usr/src/linux-2.6.38.6-pepo </li></ul><ul><li>[root@linux-2.6.38.6-pepo]# make modules_install </li></ul><ul><li>kernel-source が再リンクされる </li></ul>
  41. 41. FOMA Driverを削除 <ul><li>[root@acm-FOMA.v0.26.10]# make uninstall </li></ul><ul><li>uninstall acm-FOMA.ko in /lib/modules/2.6.38.6-pepo/kernel/drivers/usb/class </li></ul><ul><li>rm -f /lib/modules/2.6.38.6-pepo/kernel/drivers/usb/class/acm-FOMA.ko </li></ul><ul><li>depmod -a </li></ul><ul><li>uninstall acm-FOMA.ko completed! </li></ul><ul><li>[root@acm-FOMA.v0.26.10]# </li></ul>
  42. 42. FOMA を再接続 ( acm-FOMA ) Driver が無くても <ul><li># tail /var/log/messages </li></ul><ul><li>un 18 19:51:55 (none) kernel: usb 2-1: new full speed USB device using uhci_hcd and address 12 </li></ul><ul><li>Jun 18 19:51:55 (none) kernel: usb 2-1: New USB device found, idVendor=0409, idProduct=0270 </li></ul><ul><li>Jun 18 19:51:55 (none) kernel: usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 </li></ul><ul><li>Jun 18 19:51:55 (none) kernel: usb 2-1: Product: FOMA N09A </li></ul><ul><li>Jun 18 19:51:55 (none) kernel: usb 2-1: Manufacturer: NEC </li></ul><ul><li>Jun 18 19:51:55 (none) kernel: usb 2-1: SerialNumber: 3********7 </li></ul>
  43. 43. Driver の開発準備 <ul><li>接続前 </li></ul><ul><li># lsusb </li></ul><ul><li>Bus 002 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub </li></ul><ul><li>Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub </li></ul><ul><li>Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub </li></ul><ul><li>接続後 </li></ul><ul><li># lsusb </li></ul><ul><li>Bus 002 Device 012: ID 0409:0270 NEC Corp. </li></ul><ul><li>Bus 002 Device 002: ID 0e0f:0002 VMware, Inc. Virtual USB Hub </li></ul><ul><li>Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub </li></ul><ul><li>Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub </li></ul>これが目的 Vender ID : 0409 Product ID : 0270
  44. 44. usb-skeleton.c の取り出し # cd /usr/src/linux-2.6.38.6-pepo # sz drivers/usb/usb-skelton.c
  45. 45. Tera Term でファイル->転送-> Z MODEM->受信
  46. 46. Z MODEMで転送完了
  47. 47. Vendor ID と Product ID を書き換え保存 #define USB_SKEL_VENDOR_ID 0x0409 #define USB_SKEL_PRODUCT_ID 0x0270 usb-skeleton.c  ->  my-usb.c  名前をつけて保存
  48. 48. my-usb.c を PepoLinux の acm-FOMA へ転送
  49. 49. Makefile の修正 acm-FOMA  ->  my-usb <ul><li>[root@acm-FOMA.v0.26.10]# vi Makefile </li></ul><ul><li>KERVER :=$(shell uname -r) </li></ul><ul><li>KERDIR :=/lib/modules/$(KERVER)/build </li></ul><ul><li>MODDIR :=/lib/modules/$(KERVER)/kernel/drivers/usb/class </li></ul><ul><li>MODNAME := acm-FOMA  ->  my-usb </li></ul><ul><li>PWD :=$(shell pwd) </li></ul><ul><li>all: $(MODNAME) </li></ul><ul><li>obj-m :=$(MODNAME).o </li></ul><ul><li>$(MODNAME): </li></ul><ul><li>$(MAKE) -C $(KERDIR) M=$(PWD) modules </li></ul>
  50. 50. my-usb.c make && make install <ul><li>[root@acm-FOMA.v0.26.10]# make </li></ul><ul><li>make -C /lib/modules/2.6.38.6-pepo/build M=/root/acm-FOMA.v0.26.10 modules </li></ul><ul><li>make[1]: Entering directory `/mnt/hdd/src/linux-2.6.38.6-pepo' </li></ul><ul><li>CC [M] /root/acm-FOMA.v0.26.10/my-usb.o </li></ul><ul><li>Building modules, stage 2. </li></ul><ul><li>MODPOST 1 modules </li></ul><ul><li>LD [M] /root/acm-FOMA.v0.26.10/my-usb.ko </li></ul><ul><li>make[1]: Leaving directory `/mnt/hdd/src/linux-2.6.38.6-pepo' </li></ul><ul><li>[root@acm-FOMA.v0.26.10]# make install </li></ul><ul><li>install -m 744 -c my-usb.ko /lib/modules/2.6.38.6-pepo/kernel/drivers/usb/class </li></ul><ul><li>depmod -a </li></ul><ul><li>install my-usb.ko completed! </li></ul><ul><li>[root@acm-FOMA.v0.26.10]# </li></ul>
  51. 51. Driver の Debug 準備 Tera Term Pro で Vmplayer の PepoLinux へ login <ul><ul><li>syslog.conf を修正 </li></ul></ul><ul><ul><ul><li>vi /etc/syslog.conf </li></ul></ul></ul><ul><ul><ul><li>#kern.* /dev/console </li></ul></ul></ul><ul><ul><ul><li>kern.* /var/log/debug  ←追加 </li></ul></ul></ul><ul><ul><li>syslog を restart とログを監視 </li></ul></ul><ul><ul><ul><li>/etc/init.d/syslog restart </li></ul></ul></ul><ul><ul><ul><li>tail -f /var/log/debug </li></ul></ul></ul><ul><ul><li>usbmon を設定、起動 </li></ul></ul><ul><ul><ul><li>modprobe usbmon </li></ul></ul></ul><ul><ul><ul><li>mount -t debugfs none_debugs /sys/kernel/debug </li></ul></ul></ul>
  52. 52. usbmon で device のやり取りを確認 <ul><li># ls /sys/kernel/debug/usb/usbmon </li></ul><ul><li>0s 0u 1s 1t 1u 2s 2t 2u </li></ul><ul><li># cat /sys/kernel/debug/usb/usbmon/2u >/var/log/usbmon & </li></ul><ul><li>Tera Term のファイル->セッションの複製で2つの Window を開き、 /var/log/usbmon 、 /var/log/debug 、2つのログを確認 </li></ul><ul><li># tail -f /var/log/usbmon </li></ul><ul><li>Vmplayer で usb device を一旦切断、再接続 </li></ul><ul><li>/var/log/usbmon 、 /var/log/debug 、2つのログを確認 </li></ul>
  53. 53. tail -f /var/log/debug Device の検出 <ul><li>[root@acm-FOMA.v0.26.10]# tail -f /var/log/debug </li></ul><ul><li>Jun 18 21:48:55 epicon kernel: klogd 1.4.1, log source = /proc/kmsg started. </li></ul><ul><li>Jun 18 21:49:10 epicon kernel: hub 2-0:1.0: state 7 ports 2 chg 0000 evt 0002 </li></ul><ul><li>Jun 18 21:49:10 epicon kernel: uhci_hcd 0000:02:00.0: port 1 portsc 0083,00 </li></ul><ul><li>Jun 18 21:49:10 epicon kernel: hub 2-0:1.0: port 1, status 0101, change 0001, 12 Mb/s </li></ul><ul><li>Jun 18 21:49:10 epicon kernel: hub 2-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x101 </li></ul><ul><li>Jun 18 21:49:11 epicon kernel: usb 2-1: new full speed USB device using uhci_hcd and address 16 </li></ul><ul><li>Jun 18 21:49:11 epicon kernel: usb 2-1: default language 0x0409 </li></ul><ul><li>Jun 18 21:49:11 epicon kernel: usb 2-1: udev 16, busnum 2, minor = 143 </li></ul><ul><li>Jun 18 21:49:11 epicon kernel: usb 2-1: New USB device found, idVendor=0409, idProduct=0270 </li></ul><ul><li>Jun 18 21:49:11 epicon kernel: usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 </li></ul><ul><li>Jun 18 21:49:11 epicon kernel: usb 2-1: Product: FOMA N09A </li></ul><ul><li>Jun 18 21:49:11 epicon kernel: usb 2-1: Manufacturer: NEC </li></ul><ul><li>Jun 18 21:49:11 epicon kernel: usb 2-1: SerialNumber: 3***********7 </li></ul><ul><li>Jun 18 21:49:11 epicon kernel: usb 2-1: usb_probe_device </li></ul><ul><li>Jun 18 21:49:11 epicon kernel: usbserial_generic 2-1:1.1: usb_probe_interface </li></ul><ul><li>Jun 18 21:49:12 epicon kernel: skeleton 2-1:1.1: USB Skeleton device now attached to USBSkel-0 </li></ul><ul><li>Jun 18 21:49:12 epicon kernel: skeleton 2-1:1.2: usb_probe_interface </li></ul><ul><li>Jun 18 21:49:12 epicon kernel: skeleton 2-1:1.2: usb_probe_interface - got id </li></ul><ul><li>Jun 18 21:49:12 epicon kernel: my_usb: Could not find both bulk-in and bulk-out endpoints </li></ul><ul><li>Jun 18 21:49:12 epicon kernel: skeleton: probe of 2-1:1.2 failed with error -12 </li></ul><ul><li>Jun 18 21:49:12 epicon kernel: skeleton 2-1:1.3: usb_probe_interface </li></ul><ul><li>Jun 18 21:49:12 epicon kernel: skeleton 2-1:1.3: usb_probe_interface - got id </li></ul><ul><li>Jun 18 21:49:12 epicon kernel: skeleton 2-1:1.3: looking for a minor, starting at 0 </li></ul><ul><li>Jun 18 21:49:12 epicon kernel: skeleton 2-1:1.3: USB Skeleton device now attached to USBSkel-1 </li></ul>
  54. 54. tail -f /var/log/usbmon Device Descriptor の受信 <ul><li>f1811b80 1776382455 S Co:4:001:0 s 23 03 0004 0001 0000 0 </li></ul><ul><li>f1811b80 1776382480 C Co:4:001:0 0 0 </li></ul><ul><li>f1811b80 1776432793 S Ci:4:001:0 s a3 00 0000 0001 0004 4 < </li></ul><ul><li>f1811b80 1776432824 C Ci:4:001:0 0 4 = 03010000 </li></ul><ul><li>f1811b80 1776483787 S Co:4:001:0 s 23 01 0014 0001 0000 0 </li></ul><ul><li>f1811b80 1776483803 C Co:4:001:0 0 0 </li></ul><ul><li>f1811b80 1776483837 S Ci : 4 : 000 : 0 s 80 06 0100 0000 0040 64 < </li></ul><ul><li>f1811b80 1776487861 C Ci : 4 : 000 : 0 0 18 = 12010002 ffffff40 09047002 00010102 0301 </li></ul><ul><li>①   ② ③④ ⑤ ⑥ ⑦⑧⑨ ⑩ </li></ul><ul><li>f1811b80 1776382480 C Co:4:001:0 0 0 </li></ul><ul><li>① URB Tag  ② Timestamp in microseconds </li></ul><ul><li>③ S- submission: 命令 C– callback: 命令の従属処理 E- submission error </li></ul><ul><li>④ URB type and direction </li></ul><ul><li>Ci Co Control input and output Zi Zo Isochronous input and output </li></ul><ul><li>Ii Io Interrupt input and output Bi Bo Bulk input and output </li></ul><ul><li>⑤ Bus number  ⑥ Device address  ⑦ Endpoint number ⑧URB Status word </li></ul><ul><li>⑨ Data Length  ⑩ Data Tag </li></ul><ul><li>この場合は Device Descriptor…FOMA の USB 情報(ベンダー番号他) </li></ul>
  55. 55. modules load & device registered <ul><li>Jun 22 12:31:41 epicon kernel: skeleton 2-1:1.1: USB Skeleton device now attached to USBSkel-0 </li></ul><ul><li>Jun 22 12:31:41 epicon kernel: skeleton 2-1:1.2: usb_probe_interface </li></ul><ul><li>Jun 22 12:31:41 epicon kernel: skeleton 2-1:1.2: usb_probe_interface - got id </li></ul><ul><li>Jun 22 12:31:41 epicon kernel: my_usb: Could not find both bulk-in and bulk-out endpoints </li></ul><ul><li>Jun 22 12:31:41 epicon kernel: skeleton 2-1:1.3: USB Skeleton device now attached to USBSkel-1 </li></ul><ul><li>Jun 22 12:31:41 epicon kernel: skeleton 2-1:1.4: usb_probe_interface </li></ul><ul><li>Jun 22 12:31:41 epicon kernel: skeleton 2-1:1.4: usb_probe_interface - got id </li></ul><ul><li>Jun 22 12:31:41 epicon kernel: my_usb: Could not find both bulk-in and bulk-out endpoints </li></ul><ul><li>Jun 22 12:31:41 epicon kernel: skeleton: probe of 2-1:1.4 failed with error -12 </li></ul><ul><li>Jun 22 12:31:41 epicon kernel: usbcore: registered new interface driver skeleton </li></ul>
  56. 56. modules と dev が登録されるだけで read も write も出来ませんが (^_^;) <ul><li>[root@acm-FOMA.v0.26.10]# ll /dev/skel* </li></ul><ul><li>crw------- 1 root root 180, 0 6 月 22 12:31 /dev/skel0 </li></ul><ul><li>crw------- 1 root root 180, 1 6 月 22 12:31 /dev/skel1 </li></ul><ul><li>[root@acm-FOMA.v0.26.10]# </li></ul><ul><li>[root@acm-FOMA.v0.26.10]# lsmod </li></ul><ul><li>Module Size Used by </li></ul><ul><li>my_usb 4304 0 </li></ul><ul><li>usbmon 13116 0 </li></ul><ul><li>ipv6 218429 12 </li></ul><ul><li>nf_conntrack_ftp 4085 0 </li></ul><ul><li>nf_conntrack_netbios_ns 942 0 </li></ul>
  57. 57. 今回の Debug 手法で acm-FOMA new releases <ul><li>acm-FOMA とは </li></ul><ul><li>USB 接続が出来る FOMA 携帯電話用の Linux Kernel-2.6 以降の driver </li></ul><ul><li>/drivers/usb/class/cdc-acm.c を docomo の FOMA の driver として改造、 2007.3.31 初リリース </li></ul><ul><li>当初 FOMA の機種毎にコード追加してリリースを、余りに早い新機種ラッシュそれに対応すべく 2007.11.17 に機種別コードを不要へ </li></ul><ul><li>従来から MODEM モードのみでしたが、 2011.5.28 v0.26.10 からは OBEX と ATcommand モードの3モードをサポート出来るように </li></ul>
  58. 58. Remote-Hand では2つの AP で利用 1つ目は MODEM リモートハンド WWW MAIL ・ DNS USB 接続 シリアル接続 <ul><li>リモートハンド側から携帯電話経由でログイン、リモートで対応 </li></ul><ul><li>server の ping TimeOut を Mail で通知 </li></ul><ul><li>オンデマンド通信でイベント発生時のみパケット接続 </li></ul>Open Micro Server と FOMA を USB 接続 リモートハンドを依頼 FOMA 網 64 kデジタル通信 or 384 kパケット通信
  59. 59. Remote-Hand では2つの AP で利用 2つ目は AT Command Mode リモートハンド USB 接続 <ul><li>パソコンの ping TimeOut を電話で通知 </li></ul><ul><li>うさぎが人参を食べたら、人参を補充し電話で通知 </li></ul><ul><li>トラが檻を破って 脱走した ら、パトライトを点灯 </li></ul><ul><li>問題はうさぎやトラをどうやって認識させるか </li></ul>Open Micro Server の DIO 端子を使い動物を監視 FOMA 網 & 一般電話網
  60. 60. modem mode 接続後は PPP を起動させる <ul><li>[root@~]# epicon -l /dev/ttyACM0 </li></ul><ul><li>** Welcome to epicon Version-4.8 Copyright Isamu Yamauchi compiled:Feb 11 2011 ** </li></ul><ul><li>exit ~. </li></ul><ul><li>Connected /dev/ttyACM0 </li></ul><ul><li>at </li></ul><ul><li>OK </li></ul><ul><li>at&f </li></ul><ul><li>atd09012345678 </li></ul><ul><li>OK </li></ul><ul><li>Disconnected </li></ul>
  61. 61. obex mode コマンドの投げ方が不明 <ul><li>[root@~]# epicon -l /dev/ttyACM1 </li></ul><ul><li>** Welcome to epicon Version-4.8 Copyright Isamu Yamauchi compiled:Feb 11 2011 ** </li></ul><ul><li>exec shell ~! </li></ul><ul><li>send binary files ~f </li></ul><ul><li>call rz,sz,sx,rx ~rz,~sz,~sx,~rx </li></ul><ul><li>call kermit ~sk,~rk </li></ul><ul><li>external command ~C </li></ul><ul><li>change speed ~c </li></ul><ul><li>exit ~. </li></ul><ul><li>Connected /dev/ttyACM1 </li></ul><ul><li>ERROR </li></ul><ul><li>Disconnected </li></ul>
  62. 62. AT command mode DOCOM ハンズフリー MODE <ul><li>[root@~]# epicon -l /dev/ttyACM2 </li></ul><ul><li>** Welcome to epicon Version-4.8 Copyright Isamu Yamauchi compiled:Feb 11 2011 ** </li></ul><ul><li>Connected /dev/ttyACM2 </li></ul><ul><li>atd09012345678; </li></ul><ul><li>OK </li></ul><ul><li>ath </li></ul><ul><li>OK </li></ul><ul><li>・・・ modem と device が各々、なのでパケット接続と電話が同時に利用 </li></ul>音声発信->電話番号+; コロン付加、無:テレビ電話
  63. 66. PepoLinux OpenMicroServer + FOMA Remote-Hand リモートハンド WWW MAIL ・ DNS USB 接続 シリアル接続 <ul><li>リモートハンド側から携帯電話経由でログイン、リモートで対応 </li></ul><ul><li>究極のセキュリティと経済性・・・必要以外は携帯電話を外す、着信拒否 </li></ul><ul><li>オンデマンド通信でイベント発生時のみパケット接続 </li></ul><ul><li>Open Micro Server は駆動部品を排除・コンパクト・半密閉構造 </li></ul>Open Micro Server と FOMA を USB 接続 リモートハンドを依頼 FOMA 網 64 kデジタル通信 or 384 kパケット通信
  64. 67. リモートハンド USB 接続 <ul><li>トラが檻を破って 脱走した らパトライトを点灯させ電話通知 </li></ul><ul><li>うさぎが人参を食べたら、人参を補充し Mail で通知 </li></ul><ul><li>Serverの ping TimeOut を Mail と電話で同時通知 </li></ul><ul><li>うさぎやトラをどうやって認識させる? </li></ul>Open Micro Server の DIO 端子を使い動物を監視 PepoLinux OpenMicroServer + FOMA Remote-Hand FOMA 網 64 kデジタル通信 or 384 kパケット通信
  65. 68. ご清聴ありがとう御座いました <ul><li>これだけでは Device を R/W も出来ない </li></ul><ul><li>Linux USB Driver の開発・ Debug の雰囲気を味わえた </li></ul><ul><li>前回 2011.4.16 OSC Kobe で USB Driver 説明は少し手抜き、なので今回少々 </li></ul><ul><li>Open Microserver + FOMA Remote-Hand はデモ展示を見に来てね </li></ul>

×