RTL8812AU用のドライバをRocky Linux 8.10 で使えるようにするメモその2です。
その1との違いは使うドライバのソースが違います。その1で使ったドライバでもそこそこ実用的だったのですが、安定性に欠ける面があったので。
環境
記事執筆時の私のカーネルは
|
1 2 |
# uname -r 4.18.0-553.168.1.el8_10.x86_64 |
上記の通りです。使った子機はPLANEXのGW-900Dです
※カーネルのバージョンやドライバのバージョン等の環境次第で下記の通りにならないと思いますが、ご了承ください
前準備
|
1 2 |
# dnf group install "Development Tools" # dnf install kernel-headers kernel-devel elfutils-libelf-devel dkms |
必要なパッケージ等を用意します

今回はこちらを試します。kmodもあるようですが、そちらをインストールするよりも、最新ソースを追えるよう自分でコンパイルするようにします。
この記事執筆時点のコミット数は 738 です。
カーネル 5.4 以上が要件となってますが、4.18 の Rocky Linux 8 でも使えました。
別のドライバが入ってしまってる場合は削除してからはじめてください。
コンパイル
とりあえずmakeをしてみて、こけたらソースを修正するという方針にします。カーネルやドライバのバージョン次第でまた変わってくると思いますので参考程度にしてください。gccはパッケージの8.5.0を使用しました。
楽な時代になったもので、エラーメッセージをAIに聞くだけで簡単に答えを教えてくれるようになりました。
|
1 2 |
# git clone https://github.com/lwfinger/rtw88 # cd rtw88 |
ソースを入手します。
main.h / main.c / mac80211.c / tx.c / fw.c / bf.c / rtw8703b.c / pci.c の修正
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sed -i 's@#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)) || defined(RHEL_RELEASE) && (RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(8,0))@#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)) \&\& (!defined(RHEL_RELEASE) || (RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(8,10)))@' main.h sed -i 's/char alpha2\[2\] __nonstring;/char alpha2[2];/' main.h sed -i 's@#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)@#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0) || (defined(RHEL_RELEASE) \&\& RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8, 10))@g' main.c sed -i 's@#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 0)@#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 0) || (defined(RHEL_RELEASE) \&\& RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8, 10))@g' main.c sed -i 's@#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0))@#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)) || (defined(RHEL_RELEASE) \&\& RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8, 10))@g' mac80211.c sed -i 's@#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,14,0))@#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,14,0)) || (defined(RHEL_RELEASE) \&\& RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8, 10))@' mac80211.c sed -i 's@#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 0)@#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 19, 0) || (defined(RHEL_RELEASE) \&\& RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8, 10))@g' tx.c sed -i 's@#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0))@#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)) || (defined(RHEL_RELEASE) \&\& RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8, 10))@g' fw.c sed -i 's@#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)@#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) || (defined(RHEL_RELEASE) \&\& RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8, 10))@g' fw.c sed -i 's@#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 19, 0)@#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 19, 0) \&\& (!defined(RHEL_RELEASE) || RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(8, 10))@' bf.c sed -i 's@#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0)@#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 0, 0) || (defined(RHEL_RELEASE) \&\& RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8, 10))@' bf.c sed -i 's@#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 13, 0)@#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 13, 0) || (defined(RHEL_RELEASE) \&\& RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8, 10))@g' rtw8703b.c sed -i 's@#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 0)@#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 0) \&\& (!defined(RHEL_RELEASE) || RHEL_RELEASE_CODE < RHEL_RELEASE_VERSION(8, 10))@' pci.c |
カーネルの分岐条件を修正していきます。RHEL系はカーネルバージョンが古いように見えて先のカーネルの一部をバックポートしてるとかで、単純にカーネルバージョンだけを見て分岐させると間違えてしまうようです。
|
1 |
# make |
ソースを修正したらコンパイルが通るか確認します。
|
1 |
# cp rtw88.conf /etc/modprobe.d/ |
コンパイルが通ったらドライバのロード用ファイルをコピーします。
|
1 2 |
# make clean # dkms install "$PWD" |
dkmsでインストールしてしまいましょう。
hostapdの設定
|
1 2 |
# dnf install iw # iw phy |
まず仕様を確認します
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
Band 2: Capabilities: 0x196e HT20/HT40 SM Power Save disabled RX HT20 SGI RX HT40 SGI RX STBC 1-stream Max AMSDU length: 7935 bytes DSSS/CCK HT40 Maximum RX AMPDU length 65535 bytes (exponent: 0x003) Minimum RX AMPDU time spacing: 16 usec (0x07) HT Max RX data rate: 300 Mbps HT TX/RX MCS rate indexes supported: 0-15, 32 VHT Capabilities (0x03d071a2): Max MPDU length: 11454 Supported Channel Width: neither 160 nor 80+80 short GI (80 MHz) TX STBC SU Beamformee MU Beamformee +HTC-VHT VHT RX MCS set: 1 streams: MCS 0-9 2 streams: MCS 0-9 3 streams: not supported 4 streams: not supported 5 streams: not supported 6 streams: not supported 7 streams: not supported 8 streams: not supported VHT RX highest supported: 780 Mbps VHT TX MCS set: 1 streams: MCS 0-9 2 streams: MCS 0-9 3 streams: not supported 4 streams: not supported 5 streams: not supported 6 streams: not supported 7 streams: not supported 8 streams: not supported VHT TX highest supported: 780 Mbps VHT extended NSS: not supported Bitrates (non-HT): * 6.0 Mbps * 9.0 Mbps * 12.0 Mbps * 18.0 Mbps * 24.0 Mbps * 36.0 Mbps * 48.0 Mbps * 54.0 Mbps Frequencies: * 5180 MHz [36] (20.0 dBm) * 5200 MHz [40] (20.0 dBm) * 5220 MHz [44] (20.0 dBm) * 5240 MHz [48] (20.0 dBm) * 5260 MHz [52] (20.0 dBm) (radar detection) * 5280 MHz [56] (20.0 dBm) (radar detection) * 5300 MHz [60] (20.0 dBm) (radar detection) * 5320 MHz [64] (20.0 dBm) (radar detection) * 5500 MHz [100] (23.0 dBm) (radar detection) * 5520 MHz [104] (23.0 dBm) (radar detection) * 5540 MHz [108] (23.0 dBm) (radar detection) * 5560 MHz [112] (23.0 dBm) (radar detection) * 5580 MHz [116] (23.0 dBm) (radar detection) * 5600 MHz [120] (23.0 dBm) (radar detection) * 5620 MHz [124] (23.0 dBm) (radar detection) * 5640 MHz [128] (23.0 dBm) (radar detection) * 5660 MHz [132] (23.0 dBm) (radar detection) * 5680 MHz [136] (23.0 dBm) (radar detection) * 5700 MHz [140] (23.0 dBm) (radar detection) * 5720 MHz [144] (disabled) * 5745 MHz [149] (disabled) * 5765 MHz [153] (disabled) * 5785 MHz [157] (disabled) * 5805 MHz [161] (disabled) * 5825 MHz [165] (disabled) |
Band 2の方が5GHzの方。Capabilities と VHT Capabilitiesを確認します。
|
1 |
# vi /etc/hostapd/hostapd.conf |
hostapdの設定をします
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
ctrl_interface=/run/hostapd ctrl_interface_group=wheel macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP ssid=えすえすあいでぃ wpa_passphrase=ぱすわーど ap_max_inactivity=1800 disassoc_low_ack=0 wpa_group_rekey=86400 wpa_group_update_count=8 driver=nl80211 interface=wlp0s20u8 #例 bridge=br0 #例 hw_mode=a channel=36 country_code=JP ieee80211d=1 ieee80211n=1 ieee80211w=0 ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][MAX-AMSDU-7935] ieee80211ac=1 vht_capab=[MAX-MPDU-11454][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1][HTC-VHT][MAX-A-MPDU-LEN-EXP7] vht_oper_chwidth=1 vht_oper_centr_freq_seg0_idx=42 wmm_enabled=1 beacon_int=100 dtim_period=1 |
802.11acでAPをたてます。Capabilities や VHT Capabilities を参考に ht_capab と vht_capab を設定します。
|
1 2 |
# systemctl start hostapd # systemctl enable hostapd |
起動と自動起動の有効
systemdの設定
これで無事設定が終わった、と思ってPCを再起動してみたところ、hostapdが起動しているにも関わらずAPにアクセスできませんでした
hostapdを再起動してみたところ、ブリッジしているブリッジインターフェイスが落ちました。hostapdの起動タイミングに問題がありそうです
|
1 |
# vi /usr/lib/systemd/system/hostapd.service |
サービスファイルを編集します
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Unit] Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator BindsTo=sys-subsystem-net-devices-br0.device After=sys-subsystem-net-devices-br0.device #After=network.target [Service] Type=forking PIDFile=/var/run/hostapd.pid ExecStart=/usr/sbin/hostapd /etc/hostapd/hostapd.conf -P /run/hostapd.pid -B [Install] WantedBy=multi-user.target |
このようにしました。3行目と4行目を追加し、5行目をコメントアウト
ブリッジデバイス(br0)を認識してからhostapdを起動するようにしたつもり。br0の部分はデバイス名で置き換えてください。ブリッジを使っていない場合は無線LANデバイス名を指定します
|
1 |
# reboot |
再起動して確認。これで問題なく起動時にAPがたつようになりました
性能比較
https://github.com/aircrack-ng/rtl8812AU
https://github.com/lwfinger/rtw88
この2種のうち、今回は後者を使ってみましたが、アクセスポイントとして使う場合の印象としては前者比で
- 最大スループット、射程はわずかに落ちる
- ビームフォーマーが使えなくなる
- 安定性は向上
こんな印象です。ドライバのメンテナンスも継続されているようですし、こちらのドライバに乗り換えることにしました。


コメント