ETH/USB HUB HAT (B)とUSBブート

(注意: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ケーブルで接続して使用しています。

実験を行った構成

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください