22
Raspberry PiUSB OTGを試す KenichiroMATOHARA(@matoken) http://matoken.org 鹿児島Linux勉強会2017.01(20170104) サンエールかごしま 中研修室1 @matoken 1

Raspberry PiのUSB OTGを試す

Embed Size (px)

Citation preview

Page 1: Raspberry PiのUSB OTGを試す

Raspberry PiのUSB OTGを試す

KenichiroMATOHARA(@matoken)

http://matoken.org

鹿児島Linux勉強会2017.01(2017­01­04)

サンエールかごしま 中研修室1

@matoken 1

Page 2: Raspberry PiのUSB OTGを試す

自転車

@matoken 2

Page 3: Raspberry PiのUSB OTGを試す

Raspberry PiのUSB OTGを試す

@matoken 3

Page 4: Raspberry PiのUSB OTGを試す

Raspberry Pi英国製のちっこいコンピュータ

幾つか種類がある

今回のOTGが利用できるのはA/A+/ZeroでBシリーズでは利用できない

A/A+はUSB A­Aになるのでケーブルの入手性が悪い

ZeroはmicroUSB

@matoken 4

Page 5: Raspberry PiのUSB OTGを試す

@matoken 5

Page 6: Raspberry PiのUSB OTGを試す

Raspberry Pi ZERO

@matoken 6

Page 7: Raspberry PiのUSB OTGを試す

USB OTGUSB On­The­Go

USB ホストとしてもデバイスとしても利用できる

AndroidをPCに繋ぐとMTPデバイスとして見えるけど,AndroidにUSBキーボードを繋ぐとUSBホストとして動作して利用できるなど

Raspberry Piでもこれが利用できる似たものでBBBや96board等動作するものは多い

利用内容にもよるけどmicroUSBケーブル1本だけ(電源兼通信)で利用出来るので便利

@matoken 7

Page 8: Raspberry PiのUSB OTGを試す

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

Page 9: Raspberry PiのUSB OTGを試す

USB OTGを利用するためのRaspberryPi(Raspbian)での前準備

パスワードを規定値から変更 $ passwd 

OSを最新にする $ sudo apt update && sudo apt upgrade ­y 

firmwareを最新にする sudo rpi­update 

dwc2 USB driverが利用できるように /boot/config.txt を編集

$ echo "# USB OTGdtoverlay=dwc2" | sudo tee ­a /boot/config.txt

再起動

@matoken 9

Page 10: Raspberry PiのUSB OTGを試す

シリアルを使ってみる(Raspberry Pi認識)Raspberry Pi側でシリアルの g_serial  moduleを読み込む

$ sudo modprobe g_serial$ lsmod|grep g_serialg_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: failed queue (­[  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 config

 /dev/ttyGS0 が生えてくる

$ ls ­ltr /dev/tty*| tail ­2crw­rw­­­­ 1 root dialout 243,  0 12月 24 18:24 /dev/ttyGS0crw­­­­­­­ 1 pi   tty     204, 64 12月 24 18:33 /dev/ttyAMA0@matoken 10

Page 11: Raspberry PiのUSB OTGを試す

シリアルを使ってみる(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, Product=[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_acm[137742.074748] cdc_acm: USB Abstract Control Model driver 

@matoken 11

Page 12: Raspberry PiのUSB OTGを試す

シリアルを使ってみる(叩いてみる)Raspberry Pi側で待ち受け

$ cat /dev/ttyGS0

PC側からメッセージを送ってみる

$ echo "hello pi." > /dev/ttyACM0

Raspberry Pi側にメッセージが

hello pi.

@matoken 12

Page 13: Raspberry PiのUSB OTGを試す

シリアルモジュールのアンロード

$ sudo modprobe ­r g_serial$ lsmod | grep g_serial

@matoken 13

Page 14: Raspberry PiのUSB OTGを試す

シリアルモジュールの自動読み込み設定

kernelパラメータに書く方法 /boot/cmdline.txt を開いて rootwait の後ろに modules­

load=dwc2,g_serial を追記する

/etc/modulesに書く方法

$ echo "g_serial" | sudo tee ­a /etc/modules

どちらかの手順でOK

再起動で反映

@matoken 14

Page 15: Raspberry PiのUSB OTGを試す

シリアルをgettyに繋いでみる

$ sudo systemctl enable serial­[email protected]

これでホストから繋ぐとコンソールが利用できる

$ cu ­l /dev/ttyACM0 ­s 115200Connected.

Raspbian GNU/Linux 8 pizero ttyGS0

pizero login: 

※モジュールがロードされるのが遅いのでGPIOのシリアルと違いブートメッセージを見ることは出来ない(と思う)

@matoken 15

Page 16: Raspberry PiのUSB OTGを試す

利用例

シリアルコンソールでホストから繋いでメンテナンス(GPIOより配線が少ない)

GPSモジュールの結果を出力してUSB GPSに

bcm2708­rngを利用して乱数生成器に:

@matoken 16

Page 17: Raspberry PiのUSB OTGを試す

イーサネットを使ってみる

 g_ether を読み込むと /dev/usb0 が生えてくる

あとは普通のネットワークカードとして設定すればOK

HOST PCで「他のコンピューターへ共有」と設定すると便利

@matoken 17

Page 18: Raspberry PiのUSB OTGを試す

シリアルとイーサネットを同時に利用する

 g_cdc を読み込むとシリアルとイーサネットが同時に利用できる

 /dev/ttyGS0 と /dev/usb0 が生えてくる

日常使いに便利

@matoken 18

Page 19: Raspberry PiのUSB OTGを試す

マスストレージを利用する

 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

Page 20: Raspberry PiのUSB OTGを試す

イーサネット&マスストレージ&シリアルを同時に利用する

 g_multi を読み込むと同時に利用できる

@matoken 20

Page 21: Raspberry PiのUSB OTGを試す

キーボード,マウス,ジョイスティック

HID(g_hid)で行けると思うんだけど……

pi@pizero:~$ sudo modprobe g_hidmodprobe: ERROR: could not insert 'g_hid': No such devicepi@pizero:~$ sudo modprobe ­v g_hidinsmod /lib/modules/4.4.34+/kernel/drivers/usb/gadget/legacymodprobe: ERROR: could not insert 'g_hid': No such devicepi@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

Page 22: Raspberry PiのUSB OTGを試す

powered by Marp ­ Markdown Presentation WriterLicence : CC BY­NC­SA 4.0

@matoken 22