😇

Raspberry PiをWindowsとOTG接続するときにDHCPが遅すぎる場合に見る記事

に公開

TL;DR

  • 今のRaspberry PiではNetworkManagerでusb0の接続を有効化する必要がある
  • その接続設定の ipv4.methodauto にすると、Windowsではくっそ遅くなる
  • なので link-local or shared or manual に手動設定する

概要

Raspberry Pi Zero 2 Wを使ってハードウェア開発をしていたのですが、その際にOTG(USB Gadgetモード)でPCと有線接続する必要がありました。

普段はMacで開発してるんですが、Windowsでも動作検証したところ、DHCPが不安定(DHCPがタイムアウトになって名前解決ができなくなる、IPv4アドレスがなかなか振られないなど)が発生し、どうしよっかな〜となっていました。
なお、一度振られてしまえば安定するので、待ってれば大丈夫、といった感じでした。

ハマったところ

USB Gadgetが見えない

検索してすぐ出てくる記事は、古いものになっていて、まだRaspberry Piがdhcpcdを使っていた頃の記事です。

今はNetworkManagerが使用されているので、そちらを使うようにする必要があります。
基本は先人たちの記事を見ておけばいいです

https://zenn.dev/ux_xu/articles/82ad125efc1312
https://qiita.com/JyJyJcr/items/f6a9c8f1e6599878bba0

ネットに繋がらない

Raspberry Piからインターネットに抜けられませんでした。
これはmethodをsharedにしてるときに発生します。

インターネットに抜けられるようにするには、link-localを使用する必要がありました。

DHCPが不安定すぎる

この記事の一番大事なとこです。

methodをautoにしていると、Windows環境ではDHCPがめっちゃ不安定になります。
柔軟性は失われますが、やりたいことに合わせて

  • shared: Raspberry Pi側をDHCPサーバーにする
  • link-local: Windows側をDHCPサーバーにする
  • manual: 固定IPを設定する

のいずれかを選んでおくと良いと思います。

https://networkmanager.dev/docs/api/latest/settings-ipv4.html
詳しいオプションの説明は公式ドキュメントを見るとわかりやすいです。

おわりに

Raspberry PiはマジでOSのバージョンによって仕様が違いすぎて、全くネットの情報があてになりません。
最近はそれで時間溶かしまくってます。つらい。

Discussion