「インストール - Ethernetドライバ」の版間の差分
| 213行目: | 213行目: | ||
<br><br> | <br><br> | ||
== エラー関連 == | |||
==== スリープ / サスペンドができない ==== | |||
スリープ / サスペンドが設定されているにもかかわらず、システムがサスペンドできない現象が発生する場合がある。<br> | |||
この問題は、ath12kドライバのサスペンドサポートが不完全であることに起因している。<br> | |||
<br> | |||
* Qualcomm WCN785x (FastConnect 7800) Wi-Fi 7チップ | |||
* ath12kドライバを使用するその他のWi-Fiデバイス | |||
<br> | |||
===== 症状の確認 ===== | |||
# サスペンドを試行 | |||
systemctl suspend | |||
# ログを確認 | |||
sudo journalctl -b -u systemd-suspend.service | |||
<br> | |||
以下に示すようなエラーが出力される場合、ath12kが原因である。<br> | |||
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 | |||
<br> | |||
===== 解決方法 ===== | |||
まず、ディレクトリを作成する。<br> | |||
sudo mkdir -p /etc/systemd/system-sleep/ | |||
<br> | |||
次に、スリープ / サスペンド用のスクリプトを作成する。<br> | |||
sudo nano /etc/systemd/system-sleep/wifi-suspend.sh | |||
<br> | |||
<syntaxhighlight lang="bash"> | |||
#!/usr/bin/env sh | |||
case $1 in | |||
pre) | |||
# サスペンド前:Wi-Fi無効化とモジュールアンロード | |||
nmcli radio wifi off | |||
rmmod ath12k | |||
;; | |||
post) | |||
# 復帰後:モジュールロードとWi-Fi有効化 | |||
modprobe ath12k | |||
sleep 2 | |||
nmcli radio wifi on | |||
;; | |||
esac | |||
</syntaxhighlight> | |||
<br> | |||
上記のスクリプトに実行権限を付加する。<br> | |||
sudo chmod u+x /etc/systemd/system-sleep/wifi-suspend.sh | |||
<br> | |||
正常にスリープ / サスペンドするかどうかを確認する。<br> | |||
systemctl suspend | |||
<br> | |||
復帰後、Wi-Fiが自動的に再接続されることを確認する。<br> | |||
もし、Wi-Fiが自動再接続されない場合は、上記のスクリプト内にある <code>sleep 2</code> の値を増やす。<br> | |||
<br><br> | |||
{{#seo: | |||
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki | |||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板 | |||
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux | |||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |||
}} | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]] | [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]] | ||
2026年1月13日 (火) 21:00時点における版
概要
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
解決方法
まず、ディレクトリを作成する。
sudo mkdir -p /etc/systemd/system-sleep/
次に、スリープ / サスペンド用のスクリプトを作成する。
sudo nano /etc/systemd/system-sleep/wifi-suspend.sh
#!/usr/bin/env sh
case $1 in
pre)
# サスペンド前:Wi-Fi無効化とモジュールアンロード
nmcli radio wifi off
rmmod ath12k
;;
post)
# 復帰後:モジュールロードとWi-Fi有効化
modprobe ath12k
sleep 2
nmcli radio wifi on
;;
esac
上記のスクリプトに実行権限を付加する。
sudo chmod u+x /etc/systemd/system-sleep/wifi-suspend.sh
正常にスリープ / サスペンドするかどうかを確認する。
systemctl suspend
復帰後、Wi-Fiが自動的に再接続されることを確認する。
もし、Wi-Fiが自動再接続されない場合は、上記のスクリプト内にある sleep 2 の値を増やす。