M5Stack CoreMP135にてBuildrootをBuild(WiFiドングル付き)
スイッチサイエンス社から購入した、「M5Stack CoreMP135」にて、WiFiドングル含めてBuildrootをBuild(&動作)したときの記録。
情報
URL
初めは、スイッチサイエンス社サイトから辿れる、次の2つの情報を元にトライしたが、Buildはできるものの、小生の環境(Ubuntu 22.04.4 LTS )で作成したイメージは動作しなかった。
で、本家サイトを探していたところ、下記情報によりBuildを行い、作製したイメージを動作させることができた。
WiFiドングル
用いたWiFiドングルは下記バッファロー製のもの。
最初のBuild:WiFiドングル使えず
上記動作することができたサイトの情報に従いBuild。
$ git clone https://github.com/m5stack/CoreMP135_buildroot.git
$ git clone https://github.com/m5stack/CoreMP135_buildroot-external-st.git
$ cd CoreMP135_buildroot
$
$ make BR2_EXTERNAL=../CoreMP135_buildroot-external-st/ m5stack_coremp135_defconfig
$ make -j4
$
$ sudo dd if=./output/images/sdcard.img of=/dev/sdc bs=4M
sdカードを本体に入れて動作はした。
# uname -a
Linux CoreMP135 5.15.118 #1 SMP PREEMPT Sat Aug 24 15:04:31 JST 2024 armv7l GNU/Linux
# cat /etc/issue
# # ####### ##### ####### # ##### # #
## ## # # # # # # # # # #
# # # # # # # # # # # #
# # # ###### ##### # # # # ###
# # # # # ####### # # #
# # # # # # # # # # # # #
# # ##### ##### # # # ##### # #
Welcome to CoreMP135, Powered by M5Stack.
が、WiFiドングル動作せず。dmesgによるログは下記。
[ 3182.218377] usb 2-1.3: new high-speed USB device number 5 using ehci-platform
[ 3182.678439] usb 2-1.3: reset high-speed USB device number 5 using ehci-platform
[ 3182.837993] ieee80211 phy0: rt2x00_set_rt: Info - RT chipset 3070, rev 0201 detected
[ 3182.867596] ieee80211 phy0: rt2x00_set_rf: Info - RF chipset 0005 detected
[ 3182.868077] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
[ 3182.879171] usbcore: registered new interface driver rt2800usb
[ 3182.987830] ieee80211 phy0: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'
[ 3182.988000] rt2800usb 2-1.3:1.0: Direct firmware load for rt2870.bin failed with error -2
[ 3182.988032] ieee80211 phy0: rt2x00lib_request_firmware: Error - Failed to request Firmw
WiFiドングルをハードウェア的に認識するものの、「rt2870.bin」が足りていないらしい。
Buildオプションの探索
正直時間がかかった(苦闘した)。
$ make ARCH=arm menuconfig
menuconfigにより、組み込む機能(Buildオプション)を選択できそうなことはわかったでいたが、menuconfigにより表示されるメニューや選択肢の階層が深く、どこに「rt2870.bin」があるのかすぐには分からずであった。シローとなりに調べると、「Config.in」と「*.mk」あたりが、Buildオプション選択に関連しそうなことがわかる。
オプション選択:最終的なBuild
$ make ARCH=arm menuconfig
rt2870.bin
「Target Packages > Hardware handling > Firmware > linux-firmware > Wifi firmware」に見つかる。
WiFi Supplicant
調べた結果、WiFi SupplicantなどWiFiツール関連を組み込んだ方が良さそうであった。「Target Packages > Networking applications」にある関連しそうなものを組み込む。
上記は一例。下記のものを選択。
- wpa_supplicant
- wireless tools
- Install wpa_cli binary
- Install wpa_client shared library
- Install wpa_passphrase binary
- iw
- iwd
Network Manager(不要かもしれない)
何かと便利かと思い、Network Managerも組み込むことにした。同じく「Target Packages > Networking applications」から選ぼうとしたが、
udev及びglibcを先に組み込む必要があるらしい。「System Configuraiton」に見つかる。
これを選択後、下記となる。
Build
$ make -j4
$
$ sudo dd if=./output/images/sdcard.img of=/dev/sdc bs=4M
検証
起動
起動後のKernelログ。
[ 5.515887] usb 2-1.3: reset high-speed USB device number 3 using ehci-platform
[ 5.675526] ieee80211 phy0: rt2x00_set_rt: Info - RT chipset 3070, rev 0201 detected
[ 5.705376] ieee80211 phy0: rt2x00_set_rf: Info - RF chipset 0005 detected
[ 5.706240] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
[ 5.715908] usbcore: registered new interface driver rt2800usb
[ 7.028360] ieee80211 phy0: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'
[ 7.045835] ieee80211 phy0: rt2x00lib_request_firmware: Info - Firmware detected - version: 0.36
ハードウェア検出後、rt2870.binロードされている。
Supplicant設定及び起動。
/etc/wpa_supplicant.confにSSID及びパスワードの設定を行う。
# cat /etc/wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid="SSID_ABC"
psk="Himitsu"
}
起動させる。
# wpa_supplicant -B -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf
Successfully initialized wpa_supplicant
nl80211: kernel reports: Match already configured
nl80211: kernel reports: Match already configured
nl80211: kernel reports: Match already configured
nl80211: kernel reports: Match already configured
nl80211: kernel reports: Match already configured
この時のKernelログは下記となる。
[ 116.441587] wlan0: authenticate with 82:22:a7:XX:YY:ZZ
[ 116.489488] wlan0: send auth to 82:22:a7:XX:YY:ZZ (try 1/3)
[ 116.491278] wlan0: authenticated
[ 116.496259] wlan0: associate with 82:22:a7:XX:YY:ZZ (try 1/3)
[ 116.539283] wlan0: RX AssocResp from 82:22:a7:XX:YY:ZZ (capab=0x1431 status=0 aid=3)
[ 116.551145] wlan0: associated
[ 116.721358] cryptd: max_cpu_qlen set to 1000
[ 116.878509] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
動作
WiFiインターフェース(wlan0)にて、DHCPによりIPアドレスを取得させる。
# udhcpc -i wlan0
udhcpc: started, v1.36.0
udhcpc: broadcasting discover
udhcpc: broadcasting discover
udhcpc: broadcasting select for 192.168.10.105, server 192.168.10.1
udhcpc: lease of 192.168.10.105 obtained from 192.168.10.1, lease time 86400
deleting routers
adding dns 192.168.10.1
成功。
# ifconfig
wlan0 Link encap:Ethernet HWaddr 6A:F1:49:XX:UU:DD
inet addr:192.168.10.105 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:43 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3572 (3.4 KiB) TX bytes:1374 (1.3 KiB)
WiFiインターフェースにIPアドレスが割り振られていることが確認できる。
EOF