日記

日本語の勉強のためのブログ

PINE64+ArmbianでWi-Fiに接続する

はじめに

PINE A64+(以下、PINE64)にArmbianを入れて遊んでいるが、Wi-Fiが使えないのでどうにかしたい。
無線LAN子機はすでに持っているが、ドライバが入っていないので接続しても認識されない状況。

やりたいこと

  • 無線LAN子機のドライバを入れ、デバイスとして認識されるようにする
  • Wi-Fiに接続する

必要なもの

  • PINE A64+
    • Armbian Armbian 24.2.1 Jammy
    • Linux 6.6.16-current-sunxi64
  • 無線LAN子機
    • Realtek Semiconductor Corp. RTL8723BU 802.11b/g/n WLAN Adapter
    • 中古PCについてきたもの
    • Bluetoothも使えるらしいが、今回は使用しない

書いてはいないが、この他に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というのがアダプタのようだ。

アダプタにあったドライバを探す

RTL8723BUGoogle検索したら出てきた。

github.com

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 installmodprobeしてみる。

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:~#

できた!

参考リンク