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

ナビゲーションに移動 検索に移動
175行目: 175行目:
RTL8821AUチップ向けカーネルモジュールにおいて、DKMSを使用して自動的にビルドおよびインストールする。<br>
RTL8821AUチップ向けカーネルモジュールにおいて、DKMSを使用して自動的にビルドおよびインストールする。<br>
<br>
<br>
RTL8821AUチップ向けカーネルモジュールのソースコードをダウンロードする。<br>
RTL8821AUチップ向けカーネルモジュールのDKMS設定ファイルを作成する。<br>
  git clone https://github.com/morrownr/8821au-20210708.git
  sudo mkdir -p /usr/src/8821au-1.0
sudo vi /usr/src/8821au-1.0/dkms.conf
<br>
<br>
RTL8821AUチップ向けカーネルモジュールのDKMSの設定ファイルを作成する。<br>
  # /usr/src/8821au-1.0/dkms.confファイル
  sudo mkdir -p /usr/src/rtl8821au-1.0
sudo vi /usr/src/rtl8821au/dkms.conf
# 必須: モジュール名
<br>
  # ディレクトリ名の前半部分と一致させる (ハイフンの前方部分の文字列)
  # /usr/src/rtl8821au/dkms.confファイル
PACKAGE_NAME="8821au"
   
   
  PACKAGE_NAME="rtl8821au"
  # 必須: バージョン番号 (通常はモジュールのバージョン)
# ディレクトリ名の後半部分と一致させる (ハイフンの後半部分の文字列)
  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"
MAKE="make"
BUILT_MODULE_NAME[0]="8821au"
   
   
  # /lib/modules/<カーネルバージョン>/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821auディレクトリにインストールする
  # モジュールのビルド後に自動で実行されるフックスクリプト
  DEST_MODULE_LOCATION[0]="/kernel/drivers/net/wireless/realtek/rtlwifi/rtl8821au"
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>
RTL8821AUチップ向けカーネルモジュールのソースコードを、DKMSの設定ファイルと同階層のディレクトリにコピーする。<br>
DKMSを通じてモジュールのビルドと共にMOKの署名を自動的に行う場合、dkms.confファイルにカスタムフックを追加する。<br>
  sudo cp -r 8821au-20210708 /usr/src/rtl8821au
これにより、ビルド後に自動でモジュールに署名を行うスクリプトを設定することができる。<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>

案内メニュー