SlideShare a Scribd company logo
Raspberry PiのUSB OTGを試す
KenichiroMATOHARA(@matoken)
http://matoken.org
鹿児島Linux勉強会2017.01(2017­01­04)
サンエールかごしま 中研修室1
@matoken 1
自転車
@matoken 2
Raspberry PiのUSB OTGを試す
@matoken 3
Raspberry Pi
英国製のちっこいコンピュータ
幾つか種類がある
今回のOTGが利用できるのはA/A+/ZeroでBシリーズでは利用でき
ない
A/A+はUSB A­Aになるのでケーブルの入手性が悪い
ZeroはmicroUSB
@matoken 4
@matoken 5
Raspberry Pi ZERO
@matoken 6
USB OTG
USB On­The­Go
USB ホストとしてもデバイスとしても利用できる
AndroidをPCに繋ぐとMTPデバイスとして見えるけど,Androidに
USBキーボードを繋ぐとUSBホストとして動作して利用できるなど
Raspberry Piでもこれが利用できる
似たものでBBBや96board等動作するものは多い
利用内容にもよるけどmicroUSBケーブル1本だけ(電源兼通信)で
利用出来るので便利
@matoken 7
Raspberry Piで利用できそうなプロトコル
シリアル (g_serial)
イーサネット (g_ether)
マスストレージ (g_mass_storage)
MIDI (g_midi)
オーディオ (g_audio)
キーボード,マウス,ジョイスティック (g_hid)
マスストレージ&シリアル (g_acm_ms)
イーサネット&シリアル (g_cdc)
イーサネット&マスストレージ&シリアル (g_multi)
ウェブカメラ (g_webcam)
プリンター (g_printer)
テスト用? (g_zero)
@matoken 8
USB OTGを利用するためのRaspberry
Pi(Raspbian)での前準備
パスワードを規定値から変更
 $ passwd 
OSを最新にする
 $ sudo apt update && sudo apt upgrade ­y 
firmwareを最新にする
 sudo rpi­update 
dwc2 USB driverが利用できるように /boot/config.txt を編集
$ echo "# USB OTG
dtoverlay=dwc2" | sudo tee ­a /boot/config.txt
再起動
@matoken 9
シリアルを使ってみる(Raspberry Pi認識)
Raspberry Pi側でシリアルの g_serial  moduleを読み込む
$ sudo modprobe g_serial
$ lsmod|grep g_serial
g_serial                3753  0 
libcomposite           49383  3 usb_f_acm,usb_f_rndis,g_serial
$ dmesg | tail ­8
[  332.804810] g_serial gadget: Gadget Serial v2.4
[  332.804840] g_serial gadget: g_serial ready
[  332.804887] dwc2 20980000.usb: dwc2_hsotg_enqueue_setup: fa
[  332.807914] dwc2 20980000.usb: bound driver g_serial
[  333.013000] dwc2 20980000.usb: new device is high­speed
[  333.093343] dwc2 20980000.usb: new device is high­speed
[  333.161825] dwc2 20980000.usb: new address 26
[  335.546058] g_serial gadget: high­speed config #2: CDC ACM 
 /dev/ttyGS0 が生えてくる
$ ls ­ltr /dev/tty*| tail ­2
crw­rw­­­­ 1 root dialout 243,  0 12月 24 18:24 /dev/ttyGS0
crw­­­­­­­ 1 pi   tty     204, 64 12月 24 18:33 /dev/ttyAMA0@matoken 10
シリアルを使ってみる(PC認識)
PC側での認識例(/dev/ttyACM0として認識)
[137739.592791] usb 4­1.2: new high­speed USB device number 
[137739.701258] usb 4­1.2: New USB device found, idVendor=
[137739.701264] usb 4­1.2: New USB device strings: Mfr=1, Prod
[137739.701268] usb 4­1.2: Product: Gadget Serial v2.4
[137739.701271] usb 4­1.2: Manufacturer: Linux 4.4.34+ with
[137739.701419] usb 4­1.2: Device is not authorized for usage
[137742.073829] cdc_acm 4­1.2:2.0: ttyACM0: USB ACM device
[137742.074747] usbcore: registered new interface driver cdc_a
[137742.074748] cdc_acm: USB Abstract Control Model driver 
@matoken 11
シリアルを使ってみる(叩いてみる)
Raspberry Pi側で待ち受け
$ cat /dev/ttyGS0
PC側からメッセージを送ってみる
$ echo "hello pi." > /dev/ttyACM0
Raspberry Pi側にメッセージが
hello pi.
@matoken 12
シリアルモジュールのアンロード
$ sudo modprobe ­r g_serial
$ lsmod | grep g_serial
@matoken 13
シリアルモジュールの自動読み込み設定
kernelパラメータに書く方法
 /boot/cmdline.txt を開いて rootwait の後ろに modules­
load=dwc2,g_serial を追記する
/etc/modulesに書く方法
$ echo "g_serial" | sudo tee ­a /etc/modules
どちらかの手順でOK
再起動で反映
@matoken 14
シリアルをgettyに繋いでみる
$ sudo systemctl enable serial­getty@ttyGS0.service
これでホストから繋ぐとコンソールが利用できる
$ cu ­l /dev/ttyACM0 ­s 115200
Connected.
Raspbian GNU/Linux 8 pizero ttyGS0
pizero login: 
※モジュールがロードされるのが遅いのでGPIOのシリアルと違いブート
メッセージを見ることは出来ない(と思う)
@matoken 15
利用例
シリアルコンソールでホストから繋いでメンテナンス(GPIOより配線
が少ない)
GPSモジュールの結果を出力してUSB GPSに
bcm2708­rngを利用して乱数生成器に
:
@matoken 16
イーサネットを使ってみる
 g_ether を読み込むと /dev/usb0 が生えてくる
あとは普通のネットワークカードとして設定すればOK
HOST PCで「他のコンピューターへ共有」と設定すると便利
@matoken 17
シリアルとイーサネットを同時に利用する
 g_cdc を読み込むとシリアルとイーサネットが同時に利用できる
 /dev/ttyGS0 と /dev/usb0 が生えてくる
日常使いに便利
@matoken 18
マスストレージを利用する
 g_mass_storage に引数を付けて読み込むとマスストレージ(USB
メモリ)として利用できる
引数にはデバイスやファイルが指定できる
 /dev/mmcblk0p3 
 /home/pi/disk.img 
ファイルの前準備例
$ dd if=/dev/zero of=/home/pi/disk.img bs=1M count=1024
$ /sbin/mkfs.vfat /home/pi/disk.img
同時に複数指定も出来る
$ sudo modprobe g_mass_storage file=/dev/mmcblk0p3,/home/
@matoken 19
イーサネット&マスストレージ&シリアルを同時
に利用する
 g_multi を読み込むと同時に利用できる
@matoken 20
キーボード,マウス,ジョイスティック
HID(g_hid)で行けると思うんだけど……
pi@pizero:~$ sudo modprobe g_hid
modprobe: ERROR: could not insert 'g_hid': No such device
pi@pizero:~$ sudo modprobe ­v g_hid
insmod /lib/modules/4.4.34+/kernel/drivers/usb/gadget/legacy
modprobe: ERROR: could not insert 'g_hid': No such device
pi@pizero:~$ ls ­l /lib/modules/4.4.34+/kernel/drivers/usb
­rw­r­­r­­ 1 root root 10928 11月 26 01:35 /lib/modules/4.4.34+
残りの他のも含め宿題に…….
@matoken 21
powered by Marp ­ Markdown Presentation Writer
Licence : CC BY­NC­SA 4.0
@matoken 22

More Related Content

Raspberry PiのUSB OTGを試す