「インストール - Ethernetドライバ」の版間の差分
| 234行目: | 234行目: | ||
<br> | <br> | ||
===== 解決方法 ===== | ===== 解決方法 ===== | ||
まず、サスペンド前にWi-Fiモジュールをアンロードするサービスを作成する。<br> | |||
sudo | sudo nano /etc/systemd/system/wifi-suspend.service | ||
<br> | <br> | ||
<syntaxhighlight lang="ini"> | |||
sudo nano /etc/systemd/system | [Unit] | ||
Description=Unload ath12k before suspend | |||
Before=sleep.target | |||
[Service] | |||
Type=oneshot | |||
ExecStart=/usr/bin/nmcli radio wifi off | |||
ExecStart=/usr/sbin/rmmod ath12k | |||
[Install] | |||
WantedBy=sleep.target | |||
</syntaxhighlight> | |||
<br> | |||
次に、復帰後にWi-Fiモジュールをロードするサービスを作成する。<br> | |||
sudo nano /etc/systemd/system/wifi-resume.service | |||
<br> | <br> | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="ini"> | ||
[Unit] | |||
Description=Reload ath12k after resume | |||
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target | |||
[Service] | |||
Type=oneshot | |||
ExecStart=/usr/sbin/modprobe ath12k | |||
ExecStart=/bin/sleep 5 | |||
ExecStart=/usr/bin/nmcli radio wifi on | |||
[Install] | |||
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
サービスを有効化する。<br> | |||
sudo | sudo systemctl daemon-reload | ||
sudo systemctl enable wifi-suspend.service | |||
sudo systemctl enable wifi-resume.service | |||
<br> | |||
電源管理デーモンを再起動する。<br> | |||
# GNOMEの場合 | |||
systemctl --user restart gnome-settings-daemon.service | |||
# KDEの場合 | |||
systemctl --user restart plasma-powerdevil.service | |||
<br> | <br> | ||
正常にスリープ / サスペンドするかどうかを確認する。<br> | 正常にスリープ / サスペンドするかどうかを確認する。<br> | ||
systemctl suspend | systemctl suspend | ||
<br> | <br> | ||
復帰後、Wi-Fiが自動的に再接続されることを確認する。<br> | 復帰後、Wi-Fiモジュールが自動的に読み込まれることを確認する。<br> | ||
もし、Wi- | sudo journalctl -b -u wifi-resume.service | ||
<br> | |||
また、復帰後、Wi-Fiが自動的に再接続されることを確認する。<br> | |||
もし、Wi-Fiが自動再接続されない場合は、以下に示す事柄を確認する。<br> | |||
* NetworkManagerのWi-Fi設定において、[この優先度で自動的に接続]チェックボックスにチェックが入力されているかどうかを確認する。 | |||
* <code>wifi-resume.service</code> 内の <code>ExecStart=/bin/sleep 10</code> の値を増やす。(例 : 10や20) | |||
<br><br> | <br><br> | ||
2026年1月14日 (水) 02:23時点における版
概要
Linuxで イーサネットデバイスを使用する場合、専用ドライバをインストールする必要がある可能性がある。
ここでは、イーサネットデバイスの各チップにおいて、専用ドライバのインストール手順を記載する。
RTL8126
RTL8126は、Linuxカーネル 6.9で初期サポートが追加され、一部のRTL8126チップが動作する。
Linuxカーネル 6.10以降では、正式なサポートが導入され、より安定した動作を得ることができる。
そのため、それ以前のカーネルバージョンで使用する場合は、RealtekまたはサードパーティのDKMSパッケージを手動でインストールする必要がある。
搭載しているデバイス
- PCIeネットワークカード (NIC)
- ASUS XG-C261 : 2.5GbE PCIe NIC
- TP-Link TG-3468 : 2.5GbE対応モデル
- マザーボード (オンボードLAN)
- ASUS : ROG/TUF/Primeシリーズの多くのモデル
- MSI :MPG/MAGシリーズ
- GIGABYTE : AORUSシリーズ
- ASRock : 各種AMD/Intelマザーボード
- USB接続ネットワークアダプタ
- ASUS USB-C2500 : USB 3.0/3.1接続の2.5GbEアダプタ
ビルドに必要なライブラリのインストール
システムパッケージの更新とビルドに必要なライブラリのインストールする。
sudo zypper update sudo zypper install -t pattern devel_kernel dkms
Wi-Fiデバイスの確認
イーサネットデバイスが認識されているかどうかを確認する。
sudo hwinfo --network
# 出力例: 87: None 00.0: XXXXX Ethernet [Created at net.XXX] Unique ID: xxxx.xxxxxxxxxxx Parent ID: yyyy.yyyyyyyyyyy SysFS ID: /class/net/eth0 SysFS Device Link: /devices/pci0000:00/0000:00:02.1/0000:03:00.0/0000:04:06.0/0000:08:00.0 Hardware Class: network interface Model: "Ethernet network interface" Driver: "r8126" Driver Modules: "r8126" Device File: eth0 HW Address: aa:bb:cc:dd:ee:ff Permanent HW Address: xx:yy:zz:uu:vv:ww Link detected: yes Config Status: cfg=no, avail=yes, need=no, active=unknown Attached to: #17 (Ethernet controller)
ソースコードのダウンロード
RTL8126ドライバのソースコードをダウンロードする。
- Realtekの公式Webサイト
- Unix (Linux) の "5G Ethernet LINUX driver r8126 for kernel up to X.XX "
- https://www.realtek.com/Download/List?cate_id=584
- Github
git clone https://github.com/openwrt/rtl8126.git
RTL8126ドライバのインストール (セキュアブートが無効の場合)
ダウンロードしたソースコードがあるディレクトリに移動して、RTL8126ドライバをビルドしてインストールする。
cd <RTL8126ドライバのソースディレクトリ> make -j $(nproc) sudo make install
必要であれば、カーネルオブジェクトを圧縮することもできる。
cd /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/ sudo zstd --rm r8126.ko または sudo zstd --ultra -22 --rm r8126.ko
※注意
Linuxカーネルをアップデートした場合は自動的にRTL8126ドライバが削除されるため、再度、RTL8126ドライバをインストールする必要がある。
RTL8126ドライバをデプロイする。
sudo depmod -a $(uname -r)
RTL8126ドライバを読み込む。
sudo modprobe -v r8126
RTL8126ドライバのインストール (セキュアブートが有効の場合)
ダウンロードしたソースコードがあるディレクトリに移動して、RTL8126ドライバをビルドする。
cd <RTL8126ドライバのソースディレクトリ> make -j $(nproc)
まず、署名に必要な設定ファイルを作成する。
mkdir -p ~/MOK/RTL8126 && cd ~/MOK/RTL8126 vi RTL8126.config
# ~/MOK/RTL8126/RTL8126.configファイル [ req ] default_bits = 4096 distinguished_name = req_distinguished_name prompt = no string_mask = utf8only x509_extensions = myexts [ req_distinguished_name ] O = SUSE Linux Products GmbH (User Add RTL8126) # 任意の名前 CN = SUSE Linux Enterprise Secure Boot (User Add RTL8126) # 任意の名前 emailAddress = suse@localhost # 任意のメールアドレス [ myexts ] basicConstraints=critical,CA:FALSE keyUsage=digitalSignature subjectKeyIdentifier=hash authorityKeyIdentifier=keyid
キーペアを作成する。
openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config ./RTL8126.config \ -outform DER -out ./RTL8126.der -keyout ./RTL8126.priv \ -addext "extendedKeyUsage=codeSigning"
次に、MOK(Module owned Key)にキーをインポートする。
--root-pwオプションを付加することにより、再起動時のRealtek RTL8126モジュールの署名において、rootパスワードが必要となる。
sudo mokutil --import ./RTL8126.der --root-pw
PCを再起動して、上記のキーの署名する。
sudo systemctl reboot
RTL8126ドライバをインストールする。
sudo mkdir -p /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/ sudo cp r8126.ko /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/
Realtek RTL8126ドライバ (r8126.ko) を署名する。
sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 \ ./RTL8126.priv ./RTL8126.der \ /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/r8126.ko
必要であれば、Realtek RTL8126モジュールをXZ形式またはZstandard形式に圧縮する。(任意)
# XZ形式の場合 cd /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/ sudo xz -f r8126.ko # Zstandard形式の場合 cd /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/ sudo zstd --rm r8126.ko
※注意
Linuxカーネルをアップデートした場合は自動的にRTL8126ドライバが削除されるため、再度、RTL8126ドライバをインストールする必要がある。
RTL8126ドライバをデプロイする。
sudo depmod -a $(uname -r)
RTL8126ドライバを読み込む。
sudo modprobe -v r8126
RTL8126ドライバのアンインストール (セキュアブートが無効の場合)
RTL8126ドライバをアンインストールする。
cd <RTL8126ドライバのソースディレクトリ> sudo make uninstall
RTL8126ドライバファイルを削除する。
sudo rm /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/r8126 # または sudo rm /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/r8126.xz # または sudo rm /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/r8126.ko.zst
ドライバ群をデプロイする。
sudo depmod -a $(uname -r)
RTL8126ドライバのアンインストール (セキュアブートが有効の場合)
RTL8126ドライバをアンインストールする。
cd <RTL8126ドライバのソースディレクトリ> sudo make uninstall
RTL8126ドライバファイルを削除する。
sudo rm /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/r8126 # または sudo rm /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/r8126.xz # または sudo rm /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/r8126.ko.zst
ドライバ群をデプロイする。
sudo depmod -a $(uname -r)
次に、Realtek RTL8126ドライバの署名を削除する。
Realtek RTL8126モジュールの署名を削除する場合、以下のコマンドを実行して再起動する。
--root-pwオプションを付加することにより、再起動時のRealtek RTL8126デバイスの署名の削除において、rootパスワードが必要となる。
cd <Realtek RTL8126モジュールの署名ファイルが存在するディレクトリ> sudo mokutil --delete ./RTL8126.der --root-pw sudo systemctl reboot
DKMSの使用
DKMSを使用して自動的にビルドおよびインストールすることも可能である。
まず、以下に示すGithubリポジトリからソースコードをクローンする。
git clone https://github.com/awesometic/realtek-r8126-dkms.git cd realtek-r8126-dkms
DKMSモジュールをインストールする。
sudo ./dkms-install.sh
RTL8126モジュールが正常にロードされていることを確認する。
lsmod | grep -i r8169
上記の設定を有効化するため、initrdを再構築する。
sudo dracut -f /boot/initrd $(uname -r)
※注意
もし、RTL8169モジュールが既にインストールされている場合、RTL8126モジュールよりも優先的にロードされるため衝突を起こす可能性がある。
そのため、RTL8169モジュールがロードされないようにブラックリストに設定する。
sudo vi /etc/modprobe.d/blacklist-r8169.conf
# /etc/modprobe.d/blacklist-r8169.confファイル blacklist r8169
エラー関連
スリープ / サスペンドができない
スリープ / サスペンドが設定されているにもかかわらず、システムがサスペンドできない現象が発生する場合がある。
この問題は、ath12kドライバのサスペンドサポートが不完全であることに起因している。
- Qualcomm WCN785x (FastConnect 7800) Wi-Fi 7チップ
- ath12kドライバを使用するその他のWi-Fiデバイス
症状の確認
# サスペンドを試行 systemctl suspend # ログを確認 sudo journalctl -b -u systemd-suspend.service
以下に示すようなエラーが出力される場合、ath12kが原因である。
ath12k_pci 0000:07:00.0: failed to suspend core: -95 PM: Some devices failed to suspend, or early wake event detected Failed to put system to sleep. System resumed again: Operation not supported
解決方法
まず、サスペンド前にWi-Fiモジュールをアンロードするサービスを作成する。
sudo nano /etc/systemd/system/wifi-suspend.service
[Unit]
Description=Unload ath12k before suspend
Before=sleep.target
[Service]
Type=oneshot
ExecStart=/usr/bin/nmcli radio wifi off
ExecStart=/usr/sbin/rmmod ath12k
[Install]
WantedBy=sleep.target
次に、復帰後にWi-Fiモジュールをロードするサービスを作成する。
sudo nano /etc/systemd/system/wifi-resume.service
[Unit]
Description=Reload ath12k after resume
After=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/modprobe ath12k
ExecStart=/bin/sleep 5
ExecStart=/usr/bin/nmcli radio wifi on
[Install]
WantedBy=suspend.target hibernate.target hybrid-sleep.target suspend-then-hibernate.target
サービスを有効化する。
sudo systemctl daemon-reload sudo systemctl enable wifi-suspend.service sudo systemctl enable wifi-resume.service
電源管理デーモンを再起動する。
# GNOMEの場合 systemctl --user restart gnome-settings-daemon.service # KDEの場合 systemctl --user restart plasma-powerdevil.service
正常にスリープ / サスペンドするかどうかを確認する。
systemctl suspend
復帰後、Wi-Fiモジュールが自動的に読み込まれることを確認する。
sudo journalctl -b -u wifi-resume.service
また、復帰後、Wi-Fiが自動的に再接続されることを確認する。
もし、Wi-Fiが自動再接続されない場合は、以下に示す事柄を確認する。
- NetworkManagerのWi-Fi設定において、[この優先度で自動的に接続]チェックボックスにチェックが入力されているかどうかを確認する。
wifi-resume.service内のExecStart=/bin/sleep 10の値を増やす。(例 : 10や20)