【2019年12月版】ラズパイとMacの接続はUSB-C ケーブルだけでOK?!→ラズパイ七変化


Macからラズパイに、USB-Cケーブルで接続するだけでログインできる。しかもネットにもつながる、だと?!

ラズパイでいろいろやろうと思い、ネットを徘徊していると以下の記事にぶち当たりました。

いや、えっと…これまでだいぶ苦労してつないできたけど(【2019年12月版】祝!ラズパイ4 到着!!だが周辺機器はゼロだ!【2019年12月版】ラズパイ奮戦記。Macbook経由でネットにつなぐにはの記事をご覧ください。。。)、USB-Cケーブルだけでつながるならそれめっちゃ楽じゃん!
また記事をざっと眺めると、USB-Cケーブルで繋ぐだけでインターネット共有とかSSHのログインとかできてるじゃないか・・・?

どいうことだ・・・?

というわけでここらの情報について他の情報も漁ってみました。

…つまり、Raspberry Piはそれ自身がUSBの機器側として動作する=スレーブ側になれる、という機能="USB On The Go"を使って、ラズパイそのものをネットーワークアダプタとして認識させることができる、ということな訳ですか!

また USB-OTGが使えるUSBポートは歴代のラズパイでも"給電用のUSB"と決まっているようです。

ちなみに、USB 2.0規格で対応している模様です。

ところが元々、給電用のUSB-Cポートには不具合があることが分かっています。

それは11月出荷の"技適対応版"で不具合が直っている、とのことですがどこまでどうなのでしょう?試してみないとですね!
それでは、設定している内容がなんとなくわかってきたところで、実際に設定をしてみましょう。

1. Raspberryの設定

bootイメージは Etcherで書き込み済み、とします。またRaspbianは"Raspbian Buster Lite"

その他、SSHの設定については前回の記事をご覧ください

1-1. USB OTG の有効化

まず、USB OTGはデフォルトでは有効になっていない模様です。これを有効にするには"デバイスツリー"にUSB OTG用の機器、というかモジュールを追加します。

/boot/config.txt の末尾にUSB 2.0ドライバである dcw2を追加します。

...

dtoverlay=dwc2

この "デバイスツリー"については本家サイトの以下のページに詳しく書いてあります。

ところがここには個別のデバイスについては詳しく述べられておりません。以下の記事でやっとわかりました。

この記事で初めてdwc2がUSB 2.0ドライバであることが判明いたしました。

1-2. USBとLANアダプタモジュールの読み込みを追加

/boot/cmdline.txtの起動オプションの末尾にモジュールのロード指定を追加します。

/boot/cmdline.txt
... modules-load=dwc2,g_ether

これは改行なしで追加します。

dwc2、そしてg_ether

これが多分 Ethernetカード的な機能の指定なのでしょう。g_ether については後ほど深掘りいたします。

ラズパイ側の設定としては以上です。これだけでUSBのLANアダプタになってしまう、らしいです?!

2. Raspberry Piの起動

Macbook Pro と ラズパイを USB-Cケーブルで接続いたします。Macbook Proの給電によりラズパイは起動すると思います。Macbook Proから何ワットの給電がされているか不安ですが、USB-CのPDは自動で調整してくれるらしいので、信じましょう。(というか、その不具合が直っているはず。)

しばらくしてコンパネからネットワークを確認すると…

RNDIS/Ethernet Gadget と言うLANアダプターとして認識されています!

共有メニューでも経路に表示されました。

ここからインターネット共有を有効にします。

それではログインしてみましょう!

3. ログイン!

ssh [email protected] でログインしてみます。MacOSなど"Bonjour"がインストール済みのOSであれば raspberrypi.local で即座に名前解決ができるらしいです。

$ ssh [email protected]
Warning: Permanently added the ECDSA host key for IP address 'fe80::f0e2:419d:bb5b:c536%bridge100' to the list of known hosts.
[email protected]'s password: 
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Dec 20 12:10:18 2019 from fe80::e2:7215:4fd5:a99d%usb0

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi:~ $ 

おホォぉ…ログインできた。。。
続いて、apt update してみます。

$ sudo apt update
Hit:1 https://deb.nodesource.com/node_12.x buster InRelease
Hit:2 http://archive.raspberrypi.org/debian buster InRelease                   
Get:3 http://raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB]      
Get:4 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages [13.0 MB]
Fetched 13.0 MB in 4min 22s (49.6 kB/s)                                        
Reading package lists... Done
Building dependency tree       
Reading state information... Done
2 packages can be upgraded. Run 'apt list --upgradable' to see them.

めっちゃ取得できてる… これは簡単だわ…
自分の Macbook ProはUSB-Cポートしかないのでこれだけで済むとありがたいですね〜!
前回のチャレンジでは USBハブにLANアダプタさしてLANケーブルで繋いでましたので、このあたりの機材がいらないだけでだいぶ楽でございます!

他のモジュールはどうなっているのか?

さて、今回は g_ether というモジュールを使って、Macにラズパイが"USBのLANアダプター"として認識させたわけですが、他にどのようなモジュールがあるのか?ということが気になりますよね?!

ラズパイ4 固有の設定についての情報は見つけられませんでしたが、Pi Zero の OTG モジュールについてのドキュメントを発見いたしました!

これによると、以下のモード、モジュールがある模様です。

  • Serial (g_serial)
  • Ethernet (g_ether)
  • Mass storage (g_mass_storage)
  • MIDI (g_midi)
  • Audio (g_audio)
  • Keyboard/Mouse (g_hid)
  • Mass storage and Serial (g_acm_ms)
  • Ethernet and Serial (g_cdc)
  • Multi (g_multi) - Allows you to configure 2 from Ethernet, Mass storage and - Serial In addition to the above modules, a few other (less useful) modules are included.
  • Webcam (g_webcam)
  • Printer (g_printer)
  • Gadget tester (g_zero)

最後の g_zero というのはちょっとよくわかりませんが、あとはなんとなくわかりますね!
シリアルポート、LANアダプタ、外部ストレージ、 MIDI、オーディオ、入力機器、Webカメラ、プリンタなどの機器として機能することが可能なようです。
ちょっと…ラズパイ、万能じゃないですか...

g_serialを使っている記事を発見いたしました。

このスクショではWindows上でもちゃんと、USBのシリアル機器としてCOMポートが認識されています。
また、それ以外のモードをいろいろ試しているスライドを発見いたしました。

シリアルやストレージはあるあるなので、"外部オーディオ"をちょっと試してみましょうか。
cmdline.txtg_audioを指定してみましょう。

/boot/cmdline.txt
... modules-load=dwc2,g_audio

改行なしで、末尾を修正です!

で、起動してMacOSのコンパネで"サウンド"の項目を見ていると…

出力では..."Playback Inactive"が出現いたしました!

入力では..."Capture Inactive"が出てきています!

今は特に内部のサウンド系の設定などしていないのでどちらも"Inactive"となっておりますが、"USBのオーディオ装置"としては認識ができているようです!!

もちろんこの状態ではLANアダプタではないので直接、SSHできませんからWifiなどを経由してログインする必要あります。

また、起動中は1つのモードしか有効にならないとのことです。まぁ、十分ですけども。。。

ラズパイ、万能じゃないか!

だいたい、SSHで繋がってしまえばただのLinux(ほぼUbuntu)ですからね…これからSSHキー仕込んで、VSCodeからリモートでいろいろやってみたいと思います!!

本日は以上です!