MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
インストール - Wi-Fiドライバのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
インストール - Wi-Fiドライバ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == LinuxでWi-Fiデバイスを使用する場合、専用ドライバをインストールする必要がある可能性がある。<br> <br> ここでは、Wi-Fiデバイスの各チップにおいて、専用ドライバのインストール手順を記載する。<br> <br><br> == RTL8821AU == ==== 搭載しているデバイス ==== * ALFA AWUS036ACS * Buffalo WI-U2-433DHP * Edimax EW-7811UTC * Edimax EW-7811UAC * Edimax EW-7811UCB * ELECOM WDC-433DU2H * GMYLE - AC450 * Netgear A6100 * Netis WF2180 * Planex GW-450S * EDUP EP-1607 <br> ※注意1<br> Wi-Fiデバイスを選定するための情報を探す場合は、ここをクリックして、メインメニューの項目2を参照すること。<br> 推奨デバイスの情報とリンクが表示される。<br> <br> ※注意2<br> 上記で選定したWi-Fiデバイスを購入する場合、シングルステートかつシングルファンクションのWi-Fiデバイスを検索することを推奨する。<br> マルチファンクションアダプタ、無線LANおよびBluetoothは、問題がある可能性がある。<br> <br> RTL8821AUチップセットはマルチファンクションであり、RTL8811AUチップセットはシングルファンクションである。<br> シングルステートおよびマルチステートアダプタに関する詳細は、ここをクリックして、メインメニューの項目1を参照すること。<br> <br> ==== ビルドに必要なライブラリのインストール ==== システムパッケージの更新とビルドに必要なライブラリのインストールする。<br> sudo zypper update sudo zypper install -t pattern devel_kernel dkms <br> ==== Wi-Fiデバイスの確認 ==== Wi-FiデバイスをPCに接続して、デバイスが認識されているかどうかを確認する。<br> sudo hwinfo --network <br> ==== ソースコードのダウンロード ==== RTL8821AUドライバのソースコードをダウンロードする。<br> git clone https://github.com/morrownr/8821au-20210708 RTL8821AU <br> ==== RTL8821AUドライバのインストール (セキュアブートが無効の場合) ==== ダウンロードしたソースコードがあるディレクトリに移動して、RTL8821AUドライバをビルドする。<br> cd <RTL8821AUドライバのソースディレクトリ> make -j $(nproc) <br> RTL8821AUドライバをインストールする。<br> sudo mkdir -p /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au sudo cp 8821au.ko /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 8821au.ko または sudo zstd --ultra -22 --rm 8821au.ko <br> <u>※注意</u><br> <u>Linuxカーネルをアップデートした場合は自動的にRTL8821AUドライバが削除されるため、再度、RTL8821AUドライバをインストールする必要がある。</u> <br> RTL8821AUドライバをデプロイする。<br> sudo depmod -a $(uname -r) <br> RTL8821AUドライバを読み込む。<br> sudo modprobe -v 8821au <br> ==== RTL8821AUドライバのインストール (セキュアブートが有効の場合) ==== ダウンロードしたソースコードがあるディレクトリに移動して、RTL8821AUドライバをビルドする。<br> cd <RTL8821AUドライバのソースディレクトリ> make -j $(nproc) <br> まず、署名に必要な設定ファイルを作成する。<br> mkdir -p ~/MOK/RTL8821AU && cd ~/MOK/RTL8821AU vi RTL8821AU.config <br> # ~/MOK/RTL8821AU/RTL8821AU.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 RTL8821AU) # 任意の名前 CN = SUSE Linux Enterprise Secure Boot (User Add RTL8821AU) # 任意の名前 emailAddress = suse@localhost # 任意のメールアドレス [ myexts ] basicConstraints=critical,CA:FALSE keyUsage=digitalSignature subjectKeyIdentifier=hash authorityKeyIdentifier=keyid <br> キーペアを作成する。<br> openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config ./RTL8821AU.config \ -outform DER -out ./RTL8821AU.der -keyout ./RTL8821AU.priv \ -addext "extendedKeyUsage=codeSigning" <br> 次に、MOK(Module owned Key)にキーをインポートする。<br> <code>--root-pw</code>オプションを付加することにより、再起動時のRealtek RTL8821AUモジュールの署名において、rootパスワードが必要となる。<br> sudo mokutil --import ./RTL8821AU.der --root-pw <br> PCを再起動して、上記のキーの署名する。<br> sudo systemctl reboot <br> RTL8821AUドライバをインストールする。<br> sudo mkdir -p /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au sudo cp 8821au.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au <br> Realtek RTL8821AUドライバ(8821au.ko)を署名する。<br> sudo /lib/modules/$(uname -r)/build/scripts/sign-file sha256 \ ./RTL8821AU.priv ./RTL8821AU.der \ /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au/8821au.ko <br> 必要であれば、Realtek RTL8821AUモジュールをXZ形式またはZstandard形式に圧縮する。(任意)<br> # XZ形式の場合 cd /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au sudo xz -f 8821au.ko # Zstandard形式の場合 cd /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au sudo zstd --rm 8821au.ko <br><br> <u>※注意</u><br> <u>Linuxカーネルをアップデートした場合は自動的にRTL8821AUドライバが削除されるため、再度、RTL8821AUドライバをインストールする必要がある。</u> <br> RTL8821AUドライバをデプロイする。<br> sudo depmod -a $(uname -r) <br> RTL8821AUドライバを読み込む。<br> sudo modprobe -v 8821au <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> ==== 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> この問題は、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> {{#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__ [[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]][[カテゴリ:PinePhone]]
インストール - Wi-Fiドライバ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse