「インストール - Wi-Fiドライバ」の版間の差分

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

(同じ利用者による、間の11版が非表示)
34行目: 34行目:
  sudo zypper update
  sudo zypper update
  sudo zypper install -t pattern devel_kernel dkms
  sudo zypper install -t pattern devel_kernel dkms
<br>
==== Wi-Fiデバイスの確認 ====
Wi-FiデバイスをPCに接続して、デバイスが認識されているかどうかを確認する。<br>
sudo hwinfo --network
<br>
<br>
==== ソースコードのダウンロード ====
==== ソースコードのダウンロード ====
39行目: 43行目:
  git clone https://github.com/morrownr/8821au-20210708 RTL8821AU
  git clone https://github.com/morrownr/8821au-20210708 RTL8821AU
<br>
<br>
==== Wi-Fiデバイスの確認 ====
Wi-FiデバイスをPCに接続して、デバイスが認識されているかどうかを確認する。<br>
sudo hwinfo --network
<br>
==== RTL8821AUドライバのインストール (セキュアブートが無効の場合) ====
==== RTL8821AUドライバのインストール (セキュアブートが無効の場合) ====
ダウンロードしたソースコードがあるディレクトリに移動して、RTL8821AUドライバをビルドする。<br>
ダウンロードしたソースコードがあるディレクトリに移動して、RTL8821AUドライバをビルドする。<br>
55行目: 54行目:
  # 任意
  # 任意
  cd /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au
  cd /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au
  sudo zstd --rm rtk_btusb.ko
  sudo zstd --rm 8821au.ko  または  sudo zstd --ultra -22 --rm 8821au.ko
<br>
<br>
<u>※注意</u><br>
<u>※注意</u><br>
66行目: 65行目:
  sudo modprobe -v 8821au
  sudo modprobe -v 8821au
<br>
<br>
==== RTL8821AUドライバのインストール (セキュアブートが有効の場合) ====
==== RTL8821AUドライバのインストール (セキュアブートが有効の場合) ====
ダウンロードしたソースコードがあるディレクトリに移動して、RTL8821AUドライバをビルドする。<br>
ダウンロードしたソースコードがあるディレクトリに移動して、RTL8821AUドライバをビルドする。<br>
72行目: 72行目:
<br>
<br>
まず、署名に必要な設定ファイルを作成する。<br>
まず、署名に必要な設定ファイルを作成する。<br>
  mkdir -p ~/.MOK/RTL8821AU && cd ~/.MOK/RTL8821AU
  mkdir -p ~/MOK/RTL8821AU && cd ~/MOK/RTL8821AU
  vi RTL8821AU.config
  vi RTL8821AU.config
<br>
<br>
  # ~/.MOK/RTL8821AU/RTL8821AU.configファイル
  # ~/MOK/RTL8821AU/RTL8821AU.configファイル
   
   
  [ req ]
  [ req ]
135行目: 135行目:
<br>
<br>


==== RTL8821AUドライバのアンインストール ====
==== RTL8821AUドライバのアンインストール (セキュアブートが無効の場合) ====
RTL8821AUドライバをアンインストールする。<br>
RTL8821AUドライバをアンインストールする。<br>
  cd <RTL8821AUドライバのソースディレクトリ>
  cd <RTL8821AUドライバのソースディレクトリ>
149行目: 149行目:
ドライバ群をデプロイする。<br>
ドライバ群をデプロイする。<br>
  sudo depmod -a $(uname -r)
  sudo depmod -a $(uname -r)
<br>
==== RTL8821AUドライバのアンインストール (セキュアブートが有効の場合) ====
RTL8821AUドライバをアンインストールする。<br>
cd <RTL8821AUドライバのソースディレクトリ>
sudo make uninstall
<br>
RTL8821AUドライバファイルを削除する。<br>
sudo rm /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au/8821au.ko
# または
sudo rm /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au/8821au.ko.xz
# または
sudo rm /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au/8821au.ko.zst
<br>
ドライバ群をデプロイする。<br>
sudo depmod -a $(uname -r)
<br>
次に、Realtek RTL8821AUドライバの署名を削除する。<br>
Realtek RTL8821AUモジュールの署名を削除する場合、以下のコマンドを実行して再起動する。<br>
<code>--root-pw</code>オプションを付加することにより、再起動時のRealtek RTL8821AUデバイスの署名の削除において、rootパスワードが必要となる。<br>
cd <Realtek RTL8821AUモジュールの署名ファイルが存在するディレクトリ>
sudo mokutil --delete ./RTL8821AU.der --root-pw
sudo systemctl reboot
<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の使用 ====
RTL8821AUチップ向けカーネルモジュールにおいて、DKMSを使用して自動的にビルドおよびインストールする。<br>
<br>
RTL8821AUチップ向けカーネルモジュールのDKMS設定ファイルを作成する。<br>
sudo mkdir -p /usr/src/8821au-1.0
sudo vi /usr/src/8821au-1.0/dkms.conf
<br>
# /usr/src/8821au-1.0/dkms.confファイル
# 必須: モジュール名
# ディレクトリ名の前半部分と一致させる (ハイフンの前方部分の文字列)
PACKAGE_NAME="8821au"
# 必須: バージョン番号 (通常はモジュールのバージョン)
# ディレクトリ名の後半部分と一致させる (ハイフンの後半部分の文字列)
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"
# モジュールのビルド後に自動で実行されるフックスクリプト
POST_BUILD=""
# インストールが完了した際に実行されるフックスクリプト
# ここでは、MOK署名およびカーネルモジュールの圧縮を行うスクリプトを指定している
POST_INSTALL="bash ./post_install.sh"
# モジュールを削除する際に使用するフック
POST_REMOVE="make clean"
# モジュールバージョンの詳細な情報を提供するコメント
# モジュールのバージョンやDKMSの設定に関する情報を提供
COMMENT="RTL8821AU Wi-Fi driver with MOK signing"
# DKMSがインストールディレクトリを自動的に作成するように指定する
# 変数<code>KDIR</code>は、カーネルソースディレクトリを指定する
# 変数<code>INSTALL_MOD_PATH</code>は、モジュールのインストール先を指定する
# MAKE_ARGS="KDIR=/lib/modules/${kernelver}/build INSTALL_MOD_PATH=/lib/modules/${kernelver}"
# オプション: ビルドプロセスに使用する追加パラメータ
# KERNEL_VERSIONでターゲットのカーネルバージョンを指定
AUTOINSTALL="yes"
<br>
DKMSを通じてモジュールのビルドと共にMOKの署名を自動的に行う場合、dkms.confファイルにカスタムフックを追加する。<br>
これにより、ビルド後に自動でモジュールに署名を行うスクリプトを設定することができる。<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>
DKMSを使用して、RTL8821AUチップ向けカーネルモジュールをビルドおよびインストールする。<br>
sudo dkms add rtl8821au/1.0      または  sudo dkms add -m rtl8821au -v 1.0
sudo dkms build rtl8821au/1.0    または  sudo dkms build -m rtl8821au -v 1.0
sudo dkms install rtl8821au/1.0  または  sudo dkms install -m rtl8821au -v 1.0
<br>
モジュールがロードされていることを確認する。<br>
lsmod | grep 8821au
<br>
これにより、RTL8821AUチップ向けカーネルモジュールがDKMSにより自動的にビルドおよびインストールされる。<br>
Linuxカーネルがアップデートされた場合でも、DKMSが自動的にカーネルモジュールを再ビルドするため、手動でカーネルモジュールを再インストールする必要はない。<br>
<br>
ただし、カーネルモジュールのソースコードが更新された場合は、最新のソースコードをダウンロードして、該当するDKMSの設定ファイルがある同階層のディレクトリにコピーする必要がある。<br>
<br><br>
== Qualcomm QCA ==
==== エラー関連 ====
===== 通信が不安定 =====
Wi-Fiは50~60[Mbps]で通信を始めるが、暫く時間が経つと10[Mbps]に低下し始め、その後、通信速度が3~30[Mbps]の間で不安定な通信となる。<br>
この問題は、Linuxでのみ見られる。<br>
<br>
ルータ設定にて、2.4[GHz]の帯域で通信する場合、チャネル幅(倍速モード)を20[MHz]/40[MHz]から20[MHz]に変更することにより、この問題が解決できる可能性がある。<br>
また、5[GHz]の帯域で通信する場合、チャネル幅(倍速モード)を40[MHz]に設定する方がよい場合もある。<br>
<br>
また、ルータの設定において、無線チャンネルを[自動]ではなく、任意のチャンネルを選択する。<br>
<br>
===== Wi-Fiカードが認識されない =====
現状、解決策は存在しない。<br>
ただし、PCを再起動することにより、Wi-Fiカードが認識する場合がある。<br>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]