web-dev-qa-db-ja.com

カーネルの更新後にRealtekイーサネットが機能しない

CentOS 7.7カーネルを3.10.0-957.27.2から3.10.0-1062.9.1に更新した後、イーサネットは機能を停止しました。イーサネットポートのLEDは点灯せず、何かにpingを実行しようとすると、「ホストに到達できません」という結果になりました。

/etc/sysconfig/network-scriptsのファイルはすべて問題ないように見え、/var/log/messagesの出力は、インターフェイスが正しく起動していることを示しているように見えました。最後に、古い3.10.0-957.27.2カーネルを起動すると、イーサネットポートがすぐに再び機能し始めました。

lspci -nnkを実行すると、イーサネットコントローラーが次のように表示されます。

07:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 03)
    Subsystem: Realtek Semiconductor Co., Ltd. RTL8111/8168 PCI Express Gigabit Ethernet controller [10ec:8168]
    Kernel driver in use: r8169
    Kernel modules: r8169

lspciからの出力は、使用中の「r8169」ドライバーを含め、両方のカーネルで同じです。

次のようなディレクトリの下に多くのRealtekファイルが表示されるため、Realtekドライバがカーネルに含まれているようです。

/usr/lib/modules/3.10.0-1062.9.1.el7.x86_64/kernel/drivers/net/ethernet/realtek

しかし、Realtekドライバーのファイル名は同じですが、新しいカーネルのサイズと日付が更新されていることがわかります。

イーサネットコントローラを最新のカーネルで動作させるための最良の方法は何ですか?

1
Russell G

CentOSバグレポートへのリンクを付けて上記にコメントしたAnonymousのおかげで、簡単な解決策を見つけました。どうやらこれは1062カーネルの既知の問題であり、ドライバがどういうわけか正しい順序でロードされていません。

イーサネットポートをすぐにアクティブ化するための簡単な修正は、r8169ドライバーをアンロードしてからリロードすることですが、これは再起動後も存続しません。

# rmmod r8169
# modprobe r8169

ただし、これを完全にスキップして、構成ファイルを使用して正しいタイミングでRealtekモジュールをロードする1行で問題全体を修正できます。これが複数回の再起動に耐えることを確認できます。

# echo realtek > /etc/modules-load.d/realtek.conf
(then reboot)

不思議なことの1つは、古い957カーネルから起動してlsmodを実行したときに、イーサネットポートが正常に機能していても、realtekモジュールがロードされていないことです。そして、r8169モジュールは、古い957カーネルと新しい1062カーネルの両方によってロードされていました。しかし、とにかく、1062カーネルによって何かが正しい順序でロードされておらず、これで修正されるので、今はすべて元気です。アノニマスに改めて感謝します!

1
Russell G