ラズパイZEROで5GWiFi利用
サーバーを置いてある室内のWiFi環境を電子レンジに影響されない5Gに変えればと思い、ラズパイZEROで動きそうなUSBインターフェスのものを探すと、ちょうど2バンド使えてLinuxでも動きそうなのがあったので買ってみた。
届いたものを見てみると、今までのようにOSに含まれているブロードコムではなくRealtekのチップを使ったものであった。
このドライバーの組み込みで相当苦労した。以下はその顛末である。
Windows用にはドライバーがCDで添付されているが、Linuxには無い。メーカーのホームページを見てみると、Linux用のドライバーがあったので、それを試してみた。
中身はドライバーのソースでコンパイルが必要である。コンパイルにはカーネルソースが必要となるが当初カーネルソースが2つあることに気づかづ別のソースにリンクを張っていた。
もしかしてこれが苦労した原因かもしれないが、それは試していない
その条件を整えるため以下のツールをインストールした。
pi@raspberrypi:~ $ sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
*** Performing self-update
*** Relaunching after update
*** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
*** We're running for the first time
*** Backing up files (this will take a few minutes)
*** Remove old firmware backup
*** Backing up firmware
*** Backing up modules 4.14.98+
#############################################################
WARNING: This update bumps to rpi-4.19.y linux tree
Be aware there could be compatibility issues with some drivers
Discussion here:
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=224931
##############################################################
Would you like to proceed? (y/N)n
Enterで実行せず
sudo reboot
pi@raspberrypi:~ $ sudo apt-get install build-essential bc git
pi@raspberrypi:~ $ sudo apt-get install raspberrypi-kernel-headers
pi@raspberrypi:~ $ cd /usr/src
pi@raspberrypi:/usr/src $ ls
linux-headers-4.14.98+ linux-headers-4.14.98-v7+
pi@raspberrypi:/usr/src $ sudo ln -s linux-headers-4.14.79+ linux
ここで4.14.79+ではなく4.14.79-v7+にリンクを張っていた。
pi@raspberrypi:/usr/src $ ls -l
合計 8
lrwxrwxrwx 1 root root 25 3月 27 13:07 linux -> linux-headers-4.14.79+
drwxr-xr-x 24 root root 4096 3月 27 13:03 linux-headers-4.14.98+
drwxr-xr-x 24 root root 4096 3月 27 13:03 linux-headers-4.14.98-v7+
必要のないものもあるが、ネットで見ながら適当にインストール。
ソースに添付のreadme.txtを見ると、解凍したディレクトリーに入ってmakeするようにとなっている。
その前にプラットホームをラズパイに合わすためI386_PCをnとしてARM_RPIをyとする
$ sudo vi ./Makefile
CONFIG_PLATFORM_I386_PC = n ## y -> n
CONFIG_PLATFORM_ARM_RPI = y ## n -> y
次に
$ make
色んなメッセージが出るが、時折カラー表示のwarningとかnoteなどの表示が出る。
しかし、最終的に終了して8812AU.koなるドライバーは完成した。
これをinsmodで組み込む。
$ insmod ./8812au.ko
lsmodで確認すると組み込まれているようである。
そこでiwconfigで動作を確認する。
wlan1として組み込まれた表示はあるが、正常動作しているwlan0と比べると項目はあるが、具体的な数字が無い。
どうも動いていないようである。やはりコンパイル中に出た警告がいけなかったようで、正常にコンパイルできなかったようである。
それではとソースに添付の説明にあったdkmsなるツールを使う事を試してみる。
pi@raspberrypi:/usr/src $ sudo apt-get install dkms
realtekホームページのソースで再試行
pi@raspberrypi:/usr/src $ ls
8812au-4.2.2 linux linux-headers-4.14.98+ linux-headers-4.14.98-v7+
pi@raspberrypi:/usr/src $ sudo dkms add -m 8812au -v 4.2.2
Creating symlink /var/lib/dkms/8812au/4.2.2/source ->
/usr/src/8812au-4.2.2
DKMS: add completed.
pi@raspberrypi:/usr/src $ sudo dkms build -m 8812au -v 4.2.2
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area...
'make' all...................................................................................................................................................................................................................................................................................................................................
cleaning build area...
DKMS: build completed.
やはり20分
しかしこれで作成されたドライバーも動作しなかった。
これも失敗
ネットで探したらラズパイ用に修正されたドライバーソースがある記述に遭遇。
https://github.com/abperiasamy/rtl8812AU_8821AU_linux
ここからソースを頂いてきて、ラズパイに転送。
gitでの取得はID認証を求められ上手くいかなかったのでブラウザでZIPファイルを取得後転送した。
ラズパイのホームディレクトリーにunzipで解凍し、
Makefile 調整 †
つまり前にやったようにMakefileの内容を386_PCからRaspberry Pi 向けに変更する。
pi@raspberrypi: ~ $ cd rtl8812AU_8821AU_linux/
pi@raspberrypi: ~/rtl8812AU_8821AU_linux $ vi Makefile
52行目
CONFIG_PLATFORM_I386_PC = y
を
CONFIG_PLATFORM_I386_PC = n
に、
58行目
CONFIG_PLATFORM_ARM_RPI = n
を
CONFIG_PLATFORM_ARM_RPI = y
に変更
Make を実行
pi@raspberrypi ~/rtl8812AU_8821AU_linux $ make
今回は警告は出ない。
make[1]: Entering directory '/usr/src/linux'
CC [M] /home/pi/src/rtl8812AU_8821AU_linux/core/rtw_cmd.o
CC [M] /home/pi/src/rtl8812AU_8821AU_linux/core/rtw_security.o
CC [M] /home/pi/src/rtl8812AU_8821AU_linux/core/rtw_debug.o
CC [M] /home/pi/src/rtl8812AU_8821AU_linux/core/rtw_io.o
CC [M] /home/pi/src/rtl8812AU_8821AU_linux/core/rtw_ioctl_query.o
CC [M] /home/pi/src/rtl8812AU_8821AU_linux/core/rtw_ioctl_set.o
CC [M] /home/pi/src/rtl8812AU_8821AU_linux/core/rtw_ieee80211.o
以下省略
やはり20分ほどかかった。
rtl8812au.ko は 1.7M で不調だったものに比べ500Kほど増えている。
-rwxr--r-- 1 pi pi 1769328 3月 28 12:22 rtl8812au.ko
インストール †
pi@raspberrypi ~/rtl8812AU_8821AU_linux $ sudo make install
install -p -m 644 rtl8812au.ko /lib/modules/4.14.98+/kernel/drivers/net/wireless/
/sbin/depmod
これでは組み込まれなかったのでinsmodで組み込むと
pi@wp-test:~ $ lsmod
Module Size Used by
sg 21445 0
uas 15036 0
rtl8812au 1287573 0
cfg80211 542402 1 rtl8812au
rfkill 21476 3 cfg80211
snd_bcm2835 23253 0
snd_pcm 89814 1 snd_bcm2835
snd_timer 22428 1 snd_pcm
snd 60280 3 snd_timer,snd_bcm2835,snd_pcm
uio_pdrv_genirq 3718 0
uio 10038 1 uio_pdrv_genirq
fixed 3033 0
ip_tables 12427 0
x_tables 22130 1 ip_tables
ipv6 398081 34
root@raspberrypi:~# iwconfig
で動作確認。前とは違って見事動作していた。
このテストは実働システムを壊さないように新規のSDカードで実施したため、実働システムにドライバーを入れる必要がある。
ラズパイ用にアレンジされたソースのおかげで無事、realtekのwifiを動かすことが出来た。
しかし、これはテスト用に作ったSDカードでのことであり、wordpress等をインストールしている実働用のSDで動かすには、同じようなドライバーのコンパイルをすればよいが、折角wordpressなどが動いているSDカードでコンパイルの様な危険な操作はしたくない。
となるとどうするかと考え、もしかしてカーネルが同じなのだからドライバー本体であるrtl8812AU.koをコピーして認識されれば良いのではと思いつく。
しかし、これも稼働用のSDカードではなく試しにwordpressをインストールしたのがあったのでこれで試してから上手くいけば正式に稼働用SDカードにコピーすることとした。
ファイル共有してあるのでウィンドウズPCを経由してrtl8812AU.koをコピー
それをドライバーの所定の位置にコピー
pi@raspberrypi:~ $ cd /lib/modules/4.14.98+/kernel/drivers/net/wireless/
pi@raspberrypi:/lib/modules/4.14.98+/kernel/drivers/net/wireless $ sudo cp ~/rtl8812au.ko
パーミッションを644に変更
pi@raspberrypi:/lib/modules/4.14.98+/kernel/drivers/net/wireless $ sudo chmod 64
4 rtl8812au.ko
pi@raspberrypi:/lib/modules/4.14.98+/kernel/drivers/net/wireless $ ls -l
合計 1880
drwxr-xr-x 6 root root 4096 3月 17 21:02 ath
drwxr-xr-x 2 root root 4096 3月 17 21:02 atmel
drwxr-xr-x 5 root root 4096 3月 17 21:01 broadcom
drwxr-xr-x 4 root root 4096 3月 17 21:01 intersil
-rw-r--r-- 1 root root 67816 2月 18 19:11 mac80211_hwsim.ko
drwxr-xr-x 5 root root 4096 3月 17 21:01 marvell
drwxr-xr-x 3 root root 4096 3月 17 21:01 mediatek
drwxr-xr-x 3 root root 4096 3月 17 21:01 ralink
drwxr-xr-x 6 root root 4096 3月 17 21:01 realtek
-rw-r--r-- 1 root root 47416 2月 18 19:11 rndis_wlan.ko
-rw-r--r-- 1 root root 1769328 3月 28 16:06 rtl8812au.ko
drwxr-xr-x 3 root root 4096 3月 17 21:02 zydas
認識させる
pi@raspberrypi:~ $ sudo depmod
lsmodで確認するが組み込まれていない。再起動が必要かも。
そこで強制的に
pi@raspberrypi:~ $ sudo insmod ./rtl8812au.ko
pi@raspberrypi:~ $ lsmod
Module Size Used by
rtl8812au 1287573 0
ctr 4422 2
ccm 10611 3
arc4 2332 2
rt2800usb 18197 0
rt2800lib 95872 1 rt2800usb
rt2x00usb 12185 1 rt2800usb
rt2x00lib 47572 3 rt2800lib,rt2800usb,rt2x00usb
mac80211 651286 3 rt2800lib,rt2x00lib,rt2x00usb
cfg80211 542402 3 rt2x00lib,mac80211,rtl8812au
rfkill 21476 4 cfg80211
crc_ccitt 1654 1 rt2800lib
snd_bcm2835 23253 0
snd_pcm 89814 1 snd_bcm2835
snd_timer 22428 1 snd_pcm
snd 60280 3 snd_timer,snd_bcm2835,snd_pcm
uio_pdrv_genirq 3718 0
uio 10038 1 uio_pdrv_genirq
fixed 3033 0
ip_tables 12427 0
x_tables 22130 1 ip_tables
ipv6 398081 29
で組み込まれた。
確認する。
pi@raspberrypi:~ $ iwconfig
wlan1 IEEE 802.11bgn ESSID:"0024A511B049" Nickname:""
Mode:Managed Frequency:2.462 GHz Access Point: 00:24:A5:11:B0:49
Bit Rate:150 Mb/s Sensitivity:0/0
Retry:off RTS thr:off Fragment thr:off
Power Management:off
Link Quality=100/100 Signal level=100/100 Noise level=0/100
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
lo no wireless extensions.
wlan0 IEEE 802.11 ESSID:"0024A511B049"
Mode:Managed Frequency:2.462 GHz Access Point: 00:24:A5:11:B0:49
Bit Rate=135 Mb/s Tx-Power=20 dBm
Retry short long limit:2 RTS thr:off Fragment thr:off
Power Management:off
Link Quality=70/70 Signal level=-25 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:147 Missed beacon:0
pi@raspberrypi:~ $ ifconfig
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (ローカルループバック)
RX packets 12 bytes 720 (720.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12 bytes 720 (720.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163 mtu 1500
inet 192.168.0.80 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::fcb4:233a:cb8d:c72 prefixlen 64 scopeid 0x20
ether 10:6f:3f:80:1e:0f txqueuelen 1000 (イーサネット)
RX packets 3680 bytes 2074049 (1.9 MiB)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 1578 bytes 214468 (209.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan1: flags=4163 mtu 1500
inet 192.168.0.63 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::533c:a46d:765b:471f prefixlen 64 scopeid 0x20
ether 00:0f:00:73:eb:96 txqueuelen 1000 (イーサネット)
RX packets 58 bytes 8723 (8.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 34 bytes 5967 (5.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
動いているようである。
当初のwifiドングルを抜いて、realtek単独で起動する。
正常に動いている。
raspi-config でアクセスポイントを5ギガにして完成である。
ゴミ
pi@raspberrypi:/usr/src $ sudo git clone https://github.com/diederikdehaas/rtl88
12AU
Cloning into 'rtl8812AU'...
pi@raspberrypi:/usr/src $ $ sudo mv rtl8812AU rtl8812AU-4.3.20
pi@raspberrypi:/usr/src $ ls -al
合計 20
drwxr-xr-x 5 root root 4096 3月 27 13:20 .
drwxr-xr-x 10 root root 4096 11月 13 12:56 ..
lrwxrwxrwx 1 root root 25 3月 27 13:07 linux -> linux-headers-4.14.79+
drwxr-xr-x 24 root root 4096 3月 27 13:03 linux-headers-4.14.98+
drwxr-xr-x 24 root root 4096 3月 27 13:03 linux-headers-4.14.98-v7+
drwxr-xr-x 8 root root 4096 3月 27 13:18 rtl8812AU-4.3.20
pi@raspberrypi:/usr/src $ DRV_NAME=rtl8812AU
pi@raspberrypi:/usr/src $ DRV_VERSION=4.3.20
pi@raspberrypi:/usr/src $ sudo dkms add -m ${DRV_NAME} -v ${DRV_VERSION}
Creating symlink /var/lib/dkms/rtl8812AU/4.3.20/source ->
/usr/src/rtl8812AU-4.3.20
DKMS: add completed.
pi@raspberrypi:/usr/src $ sudo dkms build -m ${DRV_NAME} -v ${DRV_VERSION}
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area...
'make' KVER=4.14.98+.................................................................................................................................................................................................................................................................................................................................................................................................................................
cleaning build area...
DKMS: build completed.
ラズパイZEROで約20分
pi@raspberrypi:/usr/src $ sudo dkms install -m ${DRV_NAME} -v ${DRV_VERSION}
8812au:
Running module version sanity check.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/4.14.98+/updates/dkms/
depmod....
DKMS: install completed.
再起動
i@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 0bda:a811 Realtek Semiconductor Corp.
Bus 001 Device 003: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub