はじめに
PINE A64+(以下、PINE64)にArmbianを入れて遊んでいるが、Wi-Fiが使えないのでどうにかしたい。
無線LAN子機はすでに持っているが、ドライバが入っていないので接続しても認識されない状況。
やりたいこと
必要なもの
書いてはいないが、この他にPINE64の電源供給に使うUSBケーブルや、OSを焼いたSDカード、SSH接続に使うPCなども必要である。
やったこと
無線LAN子機のアダプタを特定する
あらかじめPINE64に子機を挿しておく。
PINE64にログインし、lsusb
コマンドで接続されているUSBデバイスを調べる。
※ちなみにArmbianの初期ユーザはroot
、パスワードは1234
である。
root@pine64:~# lsusb Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 002: ID 0bda:b720 Realtek Semiconductor Corp. RTL8723BU 802.11b/g/n WLAN Adapter Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
今回はRealtek Semiconductor Corp. RTL8723BU 802.11b/g/n WLAN Adapter
というのがアダプタのようだ。
アダプタにあったドライバを探す
RTL8723BU
でGoogle検索したら出てきた。
READMEによると、cloneしてから以下のコマンドを入力すればビルド+インストールできるらしい。
make
sudo make install
sudo modprobe -v 8723bu
ドライバをビルドする
まずGithubからcloneする。
root@pine64:~# git clone https://github.com/lwfinger/rtl8723bu.git root@pine64:~# cd rtl8723bu
次にmake
する。
※ /lib/modules/XXX/build: No such file or directory
というエラーが出る場合は、apt update && apt upgrade -y
してからreboot
すれば多分治る。
make
したが、arch/aarch64/Makefile
がないというエラーが出た。
root@pine64:~/rtl8723bu# uname -r 6.6.16-current-sunxi64 root@pine64:~/rtl8723bu# make make ARCH=aarch64 CROSS_COMPILE= -C /lib/modules/6.6.16-current-sunxi64/build M=/root/rtl8723bu modules make[1]: Entering directory '/usr/src/linux-headers-6.6.16-current-sunxi64' /usr/src/linux-headers-6.6.16-current-sunxi64/Makefile:770: arch/aarch64/Makefile: No such file or directory make[2]: *** No rule to make target 'arch/aarch64/Makefile'. Stop. make[1]: *** [Makefile:234: __sub-make] Error 2 make[1]: Leaving directory '/usr/src/linux-headers-6.6.16-current-sunxi64' make: *** [Makefile:332: modules] Error 2
そこでmake
ではなく、make ARCH=arm64
を実行したらエラーは消えた。
Sometimes 64-bit ARM is called “aarch64”, and at other times “arm64”. In this case use “ARCH=arm64”.
参考:https://forums.developer.nvidia.com/t/make-command-fails-when-installing-a-tp-link-driver/66280/2
root@pine64:~/rtl8723bu# make ARCH=arm64 make ARCH=arm64 CROSS_COMPILE= -C /lib/modules/6.6.16-current-sunxi64/build M=/root/rtl8723bu modules make[1]: Entering directory '/usr/src/linux-headers-6.6.16-current-sunxi64' warning: the compiler differs from the one used to build the kernel The kernel was built by: gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0 You are using: gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 CC [M] /root/rtl8723bu/core/rtw_cmd.o CC [M] /root/rtl8723bu/core/rtw_security.o (中略) MODPOST /root/rtl8723bu/Module.symvers CC [M] /root/rtl8723bu/8723bu.mod.o LD [M] /root/rtl8723bu/8723bu.ko make[1]: Leaving directory '/usr/src/linux-headers-6.6.16-current-sunxi64'
これでビルドが完了。
アダプタをインストールする
満を持してmake install
&modprobe
してみる。
root@pine64:~/rtl8723bu# make install make INSTALL_MOD_DIR=kernel/drivers/net/wireless/ -C /lib/modules/6.6.16-current-sunxi64/build M=/root/rtl8723bu modules_install make[1]: Entering directory '/usr/src/linux-headers-6.6.16-current-sunxi64' INSTALL /lib/modules/6.6.16-current-sunxi64/kernel/drivers/net/wireless//8723bu.ko DEPMOD /lib/modules/6.6.16-current-sunxi64 Warning: modules_install: missing 'System.map' file. Skipping depmod. make[1]: Leaving directory '/usr/src/linux-headers-6.6.16-current-sunxi64' /sbin/depmod -a 6.6.16-current-sunxi64 install rtl8723b_fw.bin -D /lib/firmware/rtl_bt/rtl8723b_fw.bin root@pine64:~/rtl8723bu# sudo modprobe -v 8723bu insmod /lib/modules/6.6.16-current-sunxi64/kernel/drivers/net/wireless/8723bu.ko
いけたっぽい。ip a
でインターフェースが増えてるか確認。
root@pine64:~/rtl8723bu# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 02:ba:2b:8e:34:da brd ff:ff:ff:ff:ff:ff inet 192.168.0.2/24 brd 192.168.0.255 scope global dynamic noprefixroute eth0 valid_lft 85203sec preferred_lft 85203sec inet6 fe80::4c76:5abe:558b:fa24/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: wlx0013eff3a5e4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 00:13:ef:f3:a5:e4 brd ff:ff:ff:ff:ff:ff 4: br-804b237d96a0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:2f:7f:ef:a1 brd ff:ff:ff:ff:ff:ff inet 172.18.0.1/16 brd 172.18.255.255 scope global br-804b237d96a0 valid_lft forever preferred_lft forever 5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:e2:e6:5b:26 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever
wlx0013eff3a5e4
が増えていた。これがWi-Fiのインターフェースのようだ。
(追記)
デフォルトのアダプタと今追加したアダプタが競合するらしいのでvim /etc/modprobe.d/blacklist.conf
で末尾にblacklist rtl8xxxu
という行を追加しておいた。追加しなくても動くかもしれないが。
Wi-Fiに接続する
まず必要な設定ファイルを作成し、それを適用するところから行う。
※ /etc/netplan
直下にはすでにarmbian-default.yaml
という設定ファイルがあるが、何かあったら嫌なので一応触らないでおく。
root@pine64:~# cd /etc/netplan root@pine64:/etc/netplan# vim 00-installer-config-wifi.yaml
Vimが開いたら以下の内容を書く。
network: version: 2 wifis: wlx0013eff3a5e4: # ここは使用するインターフェースを入力 dhcp4: true optional: true access-points: input-your-SSID-here: # ここはWi-FiのSSIDを入力 password: "ここにパスワードを入力"
そしてnetplan apply
して設定を適用する。
root@pine64:/etc/netplan# netplan apply
何も出なければ成功。
※ 「パーミッションがゆるすぎる」とWarningが出ることがあるが、動作に問題はない。もちろん従ったほうがいいが…
Wi-Fiに接続できているか確認し、SSH接続を試す
その後Wi-Fiに接続できているかwifi-status
で確認する。
root@pine64:/etc/netplan# apt install byobu root@pine64:/etc/netplan# wifi-status Every 1.0s: iw info; ip addr show ; ip route; echo; (journalctl -b --no-pager -q | grep -i | tail -n 10 | sort -r); e... pine64: Sun Mar 17 01:24:21 2024 sh: 1: iw: not found 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 02:ba:2b:8e:34:da brd ff:ff:ff:ff:ff:ff inet 192.168.0.2/24 brd 192.168.0.255 scope global dynamic noprefixroute eth0 valid_lft 86185sec preferred_lft 86185sec inet6 fe80::4c76:5abe:558b:fa24/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: wlx0013eff3a5e4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:13:ef:f3:a5:e4 brd ff:ff:ff:ff:ff:ff inet 192.168.0.10/24 brd 192.168.0.255 scope global dynamic noprefixroute wlx0013eff3a5e4 valid_lft 86195sec preferred_lft 86195sec inet6 fe80::213:efff:fef3:a5e4/64 scope link valid_lft forever preferred_lft forever (後略)
先ほど設定したインターフェースにIPが振られ、valid_lft
の値が1秒毎に変化していれば成功しているはず。
試しにそのIP(今回は192.168.0.10)でSSHログインを試してみる。
※ちなみに192.168.0.0/24
の範囲で22番ポートが空いているIPを調べるには、nmap -p 22 --open 192.168.0.0/24
が使える
┌──(kali㉿hp-desktop-8500)-[~] └─$ ssh root@192.168.0.10 The authenticity of host '192.168.0.10 (192.168.0.10)' can't be established. (中略) Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.10' (ED25519) to the list of known hosts. root@192.168.0.10's password: ____ _ __ _ _ | _ \(_)_ __ ___ / /_ | || | | |_) | | '_ \ / _ \ '_ \| || |_ | __/| | | | | __/ (_) |__ _| |_| |_|_| |_|\___|\___/ |_| Welcome to Armbian 24.2.1 Jammy with Linux 6.6.16-current-sunxi64 System load: 9% Up time: 23 min Memory usage: 19% of 919M IP: 172.17.0.1 192.168.0.2 192.168.0.10 CPU temp: 31°C Usage of /: 6% of 57G [ General system configuration (beta): armbian-config ] Last login: Sun Mar 17 01:04:04 2024 from 192.168.0.9 root@pine64:~#
できた!