📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の3版が非表示) | |||
| 172行目: | 172行目: | ||
sudo systemctl reboot | sudo systemctl reboot | ||
<br> | <br> | ||
==== 設定ファイル ==== | |||
===== インストール ===== | |||
RTL8821AUの設定ファイルを/lib/modprobe.dディレクトリにコピーする。<br> | |||
<br> | |||
Linuxディストリビューションが提供するmodprobe設定ファイルは、/lib/modprobe.dディレクトリである。<br> | |||
ユーザが任意で設定を変更する場合は、/etc/modprobe.dディレクトリにファイルを作成する。<br> | |||
sudo cp 8821au.conf /etc/modprobe.d | |||
<br> | |||
詳細を知りたい場合は、以下に示すファイルを参照すること。<br> | |||
* /lib/modprobe.d/README | |||
* /usr/share/doc/packages/suse-module-tools/README.md | |||
* manページのmodprobe.d(5) | |||
<br> | |||
===== アンインストール ===== | |||
RTL8821AUの設定ファイルを/lib/modprobe.dディレクトリから削除する。<br> | |||
sudo rm /etc/modprobe.d/8821au.conf | |||
<br> | |||
==== DKMSの使用 ==== | ==== DKMSの使用 ==== | ||
RTL8821AUチップ向けカーネルモジュールにおいて、DKMSを使用して自動的にビルドおよびインストールする。<br> | RTL8821AUチップ向けカーネルモジュールにおいて、DKMSを使用して自動的にビルドおよびインストールする。<br> | ||
<br> | <br> | ||
RTL8821AUチップ向けカーネルモジュールのDKMS設定ファイルを作成する。<br> | |||
sudo mkdir -p /usr/src/8821au-1.0 | |||
sudo vi /usr/src/8821au-1.0/dkms.conf | |||
<br> | <br> | ||
# /usr/src/8821au-1.0/dkms.confファイル | |||
# 必須: モジュール名 | |||
# ディレクトリ名の前半部分と一致させる (ハイフンの前方部分の文字列) | |||
# | PACKAGE_NAME="8821au" | ||
# 必須: バージョン番号 (通常はモジュールのバージョン) | |||
# ディレクトリ名の後半部分と一致させる (ハイフンの後半部分の文字列) | |||
PACKAGE_VERSION="1.0" | PACKAGE_VERSION="1.0" | ||
# カーネルバージョンごとにモジュールをビルドする | |||
BUILT_MODULE_NAME[0]="8821au" | |||
# モジュールソースのディレクトリ | |||
# このディレクトリは、/lib/modules/$(uname -r) ディレクトリが基点となる | |||
# したがって、以下に示す設定では、/lib/modules/$(uname -r)/updates/dkms ディレクトリにカーネルモジュールがインストールされる | |||
DEST_MODULE_LOCATION[0]="/updates/dkms" | |||
# モジュールをビルドするためのソースディレクトリ | |||
# DKMSはこのディレクトリ内でビルドプロセスを実行する | |||
MAKE="make -j $(nproc) all" | |||
# モジュールをクリーンアップする際に使用するコマンド | |||
CLEAN="make clean" | CLEAN="make clean" | ||
# / | # モジュールのビルド後に自動で実行されるフックスクリプト | ||
POST_BUILD="" | |||
# インストールが完了した際に実行されるフックスクリプト | |||
# ここでは、MOK署名およびカーネルモジュールの圧縮を行うスクリプトを指定している | |||
POST_INSTALL="bash ./post_install.sh" | |||
# モジュールを削除する際に使用するフック | |||
POST_REMOVE="make clean" | |||
# モジュールバージョンの詳細な情報を提供するコメント | |||
# モジュールのバージョンやDKMSの設定に関する情報を提供 | |||
COMMENT="RTL8821AU Wi-Fi driver with MOK signing" | |||
# DKMSがインストールディレクトリを自動的に作成するように指定する | # DKMSがインストールディレクトリを自動的に作成するように指定する | ||
# 変数<code>KDIR</code>は、カーネルソースディレクトリを指定する | # 変数<code>KDIR</code>は、カーネルソースディレクトリを指定する | ||
# 変数<code>INSTALL_MOD_PATH</code>は、モジュールのインストール先を指定する | # 変数<code>INSTALL_MOD_PATH</code>は、モジュールのインストール先を指定する | ||
MAKE_ARGS="KDIR=/lib/modules/${kernelver}/build INSTALL_MOD_PATH=/lib/modules/${kernelver}" | # MAKE_ARGS="KDIR=/lib/modules/${kernelver}/build INSTALL_MOD_PATH=/lib/modules/${kernelver}" | ||
# オプション: ビルドプロセスに使用する追加パラメータ | |||
# KERNEL_VERSIONでターゲットのカーネルバージョンを指定 | |||
AUTOINSTALL="yes" | AUTOINSTALL="yes" | ||
<br> | <br> | ||
DKMSを通じてモジュールのビルドと共にMOKの署名を自動的に行う場合、dkms.confファイルにカスタムフックを追加する。<br> | |||
sudo | これにより、ビルド後に自動でモジュールに署名を行うスクリプトを設定することができる。<br> | ||
<br> | |||
これは、dkms.confにビルド後のカスタムフック (post_build) を追加して、その中でMOKの署名スクリプトを実行する。<br> | |||
<br> | |||
sudo vi /usr/src/8821au-1.0/post_install.sh | |||
<br> | |||
<syntaxhighlight lang="sh"> | |||
# /usr/src/8821au-1.0/post_install.shファイル | |||
#!/usr/bin/env bash | |||
# キーペアを作成 | |||
openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch \ | |||
-config ./RTL8821AU.config \ | |||
-outform DER \ | |||
-out ./RTL8821AU.der \ | |||
-keyout ./RTL8821AU.priv \ | |||
-addext "extendedKeyUsage=codeSigning" | |||
# MOKの登録 | |||
mokutil --import ./RTL8821AU.der --root-pw | |||
# モジュールへの署名に使う秘密鍵と公開鍵 | |||
PRIVATE_KEY="/usr/src/8821au-1.0/RTL8821AU.priv" | |||
PUBLIC_KEY="/usr/src/8821au-1.0/RTL8821AU.der" | |||
MODULE_PATH="/lib/modules/$(uname -r)/updates/dkms/8821au.ko" | |||
# モジュールの署名 | |||
/lib/modules/$(uname -r)/build/scripts/sign-file sha256 $PRIVATE_KEY $PUBLIC_KEY $MODULE_PATH | |||
# 署名結果の確認 | |||
if [ $? -eq 0 ]; then | |||
echo "Module signed successfully." | |||
else | |||
echo "Failed to sign the module." | |||
exit 1 | |||
fi | |||
# カーネルモジュールを圧縮 | |||
cd /lib/modules/$(uname -r)/updates/dkms/8821au.ko | |||
zstd --ultra -22 --rm /lib/modules/$(uname -r)/updates/dkms/8821au.ko | |||
# 圧縮と署名の成功を確認 | |||
if [ $? -eq 0 ]; then | |||
echo "Module signing and compression successful." | |||
else | |||
echo "Failed to sign or compress the module." | |||
exit 1 | |||
fi | |||
</syntaxhighlight> | |||
<br> | |||
カスタムフックスクリプトに実行権限を付加する。<br> | |||
sudo chmod u+x /usr/src/8821au-1.0/post_install.sh | |||
<br> | |||
RTL8821AUチップ向けカーネルモジュールのソースコードをダウンロードして、DKMS設定ファイルと同階層のディレクトリにコピーする。<br> | |||
git clone https://github.com/morrownr/8821au-20210708.git | |||
cd 8821au-20210708 | |||
sudo cp -r . /usr/src/8821au-1.0 | |||
<br> | <br> | ||
DKMSを使用して、RTL8821AUチップ向けカーネルモジュールをビルドおよびインストールする。<br> | DKMSを使用して、RTL8821AUチップ向けカーネルモジュールをビルドおよびインストールする。<br> | ||
| 217行目: | 319行目: | ||
<br><br> | <br><br> | ||
== | == エラー関連 == | ||
==== | ==== Qualcomm QCA ==== | ||
===== 通信が不安定 ===== | ===== 通信が不安定 ===== | ||
Wi-Fiは50~60[Mbps]で通信を始めるが、暫く時間が経つと10[Mbps]に低下し始め、その後、通信速度が3~30[Mbps]の間で不安定な通信となる。<br> | Wi-Fiは50~60[Mbps]で通信を始めるが、暫く時間が経つと10[Mbps]に低下し始め、その後、通信速度が3~30[Mbps]の間で不安定な通信となる。<br> | ||
| 231行目: | 333行目: | ||
現状、解決策は存在しない。<br> | 現状、解決策は存在しない。<br> | ||
ただし、PCを再起動することにより、Wi-Fiカードが認識する場合がある。<br> | ただし、PCを再起動することにより、Wi-Fiカードが認識する場合がある。<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> | |||
===== 解決方法 ===== | |||
まず、サスペンド前にWi-Fiモジュールをアンロードするサービスを作成する。<br> | |||
sudo vi /etc/systemd/system/wifi-suspend.service | |||
<br> | |||
<syntaxhighlight lang="ini"> | |||
[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 vi /etc/systemd/system/wifi-resume.service | |||
<br> | |||
<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> | |||
<br> | |||
サービスを有効化する。<br> | |||
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> | |||
systemctl suspend | |||
<br> | |||
復帰後、Wi-Fiモジュールが自動的に読み込まれることを確認する。<br> | |||
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> | ||
{{#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]] | ||