(注意:Ubuntu に対してRaspberry Pi Imagerでネットワーク設定を行うのはよくないようです。特にSSHの設定をした場合、コンソール画面からのログインができなくなる可能性があります)
先日も書きましたが、WaveshareのETH/USB HUB HAT(B)とRasPi Zero 2 Wを接続してUSBブートを行うと、LinuxがEthernetデバイスを正しく認識しません。この結果、USBブートをしたときだけEthernetを使えません。
目指していたUbuntu Serverが期待通り動くようになったため、こちらの問題も調べてみました。
何が起きているかはlsusbコマンドで見ることができます。
まず、以下はunameとlsusbコマンドをSDカードからブートしたときに実行したものです。
$ uname -a Linux raspberrypi 5.15.61-v7+ #1579 SMP Fri Aug 26 11:10:59 BST 2022 armv7l GNU/Linux $ lsusb Bus 001 Device 005: ID 0bda:8152 Realtek Semiconductor Corp. RTL8152 Fast Ethernet Adapter Bus 001 Device 004: ID 0781:5580 SanDisk Corp. SDCZ80 Flash Drive Bus 001 Device 003: ID 04fe:0022 PFU, Ltd HHKB-Hybrid Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
次に、同じコマンドをUSBブートしたときに実行したものです。RTL8152が間違ってRTL8151と認識されていることがわかります。これがEthernetが使えなくなる原因です。
$ uname -a Linux raspberrypi 5.15.61-v7+ #1579 SMP Fri Aug 26 11:10:59 BST 2022 armv7l GNU/Linux $ lsusb Bus 001 Device 005: ID 0bda:8151 Realtek Semiconductor Corp. RTL8151 Adapteon Business Mobile Networks BV Bus 001 Device 004: ID 0781:5580 SanDisk Corp. SDCZ80 Flash Drive Bus 001 Device 003: ID 04fe:0022 PFU, Ltd HHKB-Hybrid Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
この問題はディストリビューションに依存しないようです。以下のOSで発生を確認しています。
- Raspberry Pi OS (32-bit)
- Ubuntu Server 22.04.1 LTS (64bit)
さらに、ブートするUSBデバイスにも依存せず発生します。
- Sandisk Extreme USB
- USB SSD (mSATA SSDをUSB-SATA ディスクケースに収納したもの)
調べた限りでは、この問題の発生条件は「USBデバイスブートを行うこと」だけです。そしてUSBデバイスブートを行った場合は100%問題が発生し、SDカードからのブートでは問題発生は0%です。ですので温度やタイミング、消費電流といったものにに依存しない機能的な問題のようです。
これらのことから問題の原因はETH/USB HUB HAT(B)の回路か、Linuxカーネルの深いところにあるように思えます。
この問題はWaveshareに報告済みです。
なお、通常はHATとRasPiをスタックして使っているのですが、実験に際してはメーカーの仕様どおりUSBケーブルで接続して使用しています。