Nov 09, 2021

Raspberry Pi + USB WiFiアダプターで piCore 起動時に自動的に無線LANに接続させる

今回はLinuxの話になる。

前回のエントリーは、Raspberry Pi2をAP化、オーディオプレーヤー化しようとしたところ、なんだかよく分からないことになったという話だったんだけど、未だにどうなってるのか分からない。
とりあえずAP化の詳細は置いといて、初歩的なとこから、家庭内LANに無線でつなぐとこから始めよう、と思ったら、意外に嵌ったので備忘録化しておく。

まず使ったpiCoreは、piCore13.0.3 /armv7。つまりRaspberry Pi B2用の最新版。
うちで余っているRas Piは、B+、B2が多く、無線を使うならUSB WiFiアダプターを使うのが前提となる。入手しやすいのは最近の製品となるので、新しいOSじゃないと対応できないんじゃないかと思ったので、piCore7に拘るのは止めたということだ。

今回、それでもUSB WiFiアダプターはLinuxで使えないことが少なくないことを初めて知った。機材自体をpiCoreで認識できなかったり、Linux対応と書いてあってもドライバーをCDからインストールしないといけないのとかあって、ちょっと手間が掛かりすぎる。
何種類か試したけど、今のところ使えているのは、前回エントリーのBUFFALO WLI-UC-GNM、TP-LinkのTL-WN725N、エレコムのWDC-150SU2MBKだ。
Aigital AC600、Rich AC1200M、BUFFALO WI-U2-433DMSは、現在のところ使えていない。

環境構築のインストールに使ったコマンドは以下のとおり。
hostapd、dnsmasqはまだ使わないけど、今後の使用を考えて入れてある。関連があるtczも同時にインストールされる。

tce-load -wi ntp.tcz
tce-load -wi wifi.tcz firmware-brcmwifi.tcz firmware-ralinkwifi.tcz firmware-rpi-wifi.tcz firmware-rtlwifi.tcz
tce-load -wi wireless-5.10.16-piCore-v7.tcz wireless_tools.tcz
tce-load -wi usbutils.tcz usbutils-doc.tcz libusb-dev.tcz libusb.tcz usb-ids.tcz
tce-load -wi hostapd.tcz dnsmasq-doc.tcz dnsmasq.tcz

あれこれネット上で迷ったが灯台下暗しで、最終的に参考にしたのはtceコマンドで見ることができるwifi.tczの説明書き。

Comments: A console based tiny wifi scan access point tool.
 Select from menu or type sudo wifi.sh
 Creates wifi.db in HOME directory.
 Can auto connect to first db entry with use of -a flag, e.g.,
 /usr/local/bin/wifi.sh -a 2>&1 > /tmp/wifi.log
 Add above to bootlocal or bootsync for quick auto connect.
 When mobile, use menu for select list of APs.
 wpa_supplicant driver is defined by /etc/sysconfig/wifi-wpadrv
 default is wext. Add it to backup if changed.
 Available drivers wext,nl80211

加えて「/usr/local/bin/wifi.sh」に書かれているwifi.shのヘルプ。
これはコマンド「sudo wifi.sh -?」でも見ることができる。

Usage:
 Default select AP from menu and request IP via DHCP.
 -a Auto connect to first wifi.db entry via DHCP.
 -p Select AP from menu and prompt for IP configuration type.
 -w Wait indefinitely until lease is obtained
 -? Displays this help message.

これらを参考にして実際に行った手順を、以下に記録しておく。

まず「/opt/bootlocal.sh」に無線LAN有効化のコマンドを書き込む。これで電源を入れたときに、無線LANが有効になる。

tc@box:~$ vi /opt/bootlocal.sh

ifconfig wlan0 up

設定ファイルを書き換えたので保存のコマンド「filetool.sh -b」を打って保存。
sudo reboot で、再起動。

USB WiFi アダプター(今回はTP-Link TL-WN725N)を刺し、ハード認識確認のコマンドを打つ。

tc@box:~$ lsusb
Protocol spec without prior Class and Subclass spec at line 23179
Bus 001 Device 004: ID 0bda:8179 Realtek Semiconductor Corp. RTL8188EUS 802.11n Wireless Network Adapter
Bus 001 Device 003: ID 0424:ec00 Microchip Technology, Inc. (formerly SMSC) SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Microchip Technology, Inc. (formerly SMSC) SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
tc@box:~$


tc@box:~$ iwconfig
lo  no wireless extensions.

eth0  no wireless extensions.

wlan0 unassociated  ESSID:""  Nickname:""
  Mode:Auto  Frequency=2.412 GHz  Access Point: Not-Associated 
  Sensitivity:0/0  
  Retry:off RTS thr:off Fragment thr:off
  Power Management:off
  Link Quality:0  Signal level:0  Noise level:0
  Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
  Tx excessive retries:0  Invalid misc:0 Missed beacon:0

tc@box:~$ 
tc@box:~$ ifconfig
eth0  Link encap:Ethernet  HWaddr B8:27:EB:39:F8:15  

      *snip*

lo    Link encap:Local Loopback  

      *snip*

wlan0 Link encap:Ethernet  HWaddr 7C:C2:C6:1B:53:D2  
      UP BROADCAST MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

tc@box:~$

こんな感じ。機材は認識されているけど、wifi (wlan0)は機能していない。

wifi.tczの説明書きに沿って設定していく。
sudo wifi.sh を打って、WiFiでローカルのLANに接続する。以下、流れを記載。

tc@box:~$ sudo wifi.sh

Select Wifi Network

    ESSID           Enc	Qual	Channel Type		
 1. ssssssssssss    on	  0	  2	WPA
 2. oooooooooooo    on	  0	  5	WPA
 3. AAAAAAAAAAAA    on	  0	 12	WPA

Enter selection ( 1 - 3 ) or (q)uit: 3

Enter password for AAAAAAAAAAAA (8 to 63 characters): zzzzzzzzzzzz
Sending credentials to requested access point AAAAAAAAAAAA..
deleting routers
adding dns 192.168.1.1
tc@box:~$ 

tc@box:~$ ifconfig
eth0  Link encap:Ethernet  HWaddr B8:27:EB:39:F8:15  

      *snip*

lo    Link encap:Local Loopback  

      *snip*

wlan0 Link encap:Ethernet  HWaddr 7C:C2:C6:1B:53:D2  
      inet addr:192.168.1.42  Bcast:192.168.1.255  Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:19 errors:0 dropped:82 overruns:0 frame:0
      TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:89869 (87.7 KiB)  TX bytes:3824 (3.7 KiB)

tc@box:~$ 

こんな感じでLANのアクセスポイントにWiFiで接続できた。
アクセスポイントをセレクトし(上の例だとAAAAAAAAAAAA)、パスワードを入力(上の例だとzzzzzzzzzzzz)、「ifconfig」でIPアドレスを確認すると、wlan0に「192.168.1.42」が振られている。

こうして1回接続することで、接続設定ファイル「wifi.db」が、ホームディレクトリに作られる。このファイルにはアクセスポイントとパスワード、暗号化について記述されている。これを「filetool.sh -b」を打って保存。

wifi.tczの説明書きには、
/usr/local/bin/wifi.sh -a 2>&1 > /tmp/wifi.log
Add above to bootlocal or bootsync for quick auto connect.
とあるのだけど、、、
このコマンドをそのまま使うと、理由は分からないが上手くいかなかった。LANに接続できないままコマンドが指示を出し続け、ログが積み重なるような状況に至る。
そういうわけで、うちではbootlocal.shに下記のようにコマンドを書き込んだ。

tc@box:~$ vi /opt/bootlocal.sh

/usr/local/bin/wifi.sh -a

保存のコマンド「filetool.sh -b」を打って、sudo reboot で、再起動。
これで、Ras Pi電源オン、piCore起動と同時に、wifi.dbに記載されたアクセスポイントに自動的に無線でつながる。

これで、OS起動と同時に自動的に無線LANにつながるpiCore13ができた。といっても、アクセスポイントは予め設定されていて変更するには再設定する必要があるので、いつでも何処でも使えるというのではないけど。あと、USB WiFiアダプターを替えたら設定し直ししないといけないようだ。

ともあれ、これでうちで余っているRaspberry Piを無線でつないで、オーディオ以外でも活用することができるかもしれない。

Posted at 23:11 in pc | WriteBacks (0) | Edit
Edit this entry...

wikieditish message: Ready to edit this entry.
















A quick preview will be rendered here when you click "Preview" button.