LuckFox Pico Miniでbuildrootを使ってみる

ネットワーク共有

Google Cloudで提供されているbuildrootのイメージはRNDIS(リモートNDIS)機能が有効になっていて、
USBポートに対して「172.32.0.93」のIPアドレス がアサインされます。
WindowsやLinuxホストのIPアドレスを同じセグメントに変更することで、USBポートを使ったネットワークが使えるようになります。
EthernetもWiFiもないので、これ以外のネットワークインタフェースは有りません。


リモートNDIS(RNDIS)とは、コンピュータにUSB接続されたネットワークインターフェース(NIC)を制御するための標準仕様です。
装置ごとに個別にデバイスドライバを開発・配布・導入しなくてもシステム標準のUSBドライバで利用できるようになります。
簡単に言うとUSBインタフェースを使った仮想ネットワークです。
RNDISの概要がこ ちらに有りますが、私には難しすぎます。
buildrootのRNDISが提供するIPアドレスは172.32.0.93です。
# ifconfig -a
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  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)

usb0      Link encap:Ethernet  HWaddr 1A:10:F0:BC:2F:70
          inet addr:172.32.0.93  Bcast:172.32.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:81 errors:0 dropped:62 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:11863 (11.5 KiB)  TX bytes:3694 (3.6 KiB)

Windowsマシンを母艦にしたネットワーク共有の手順はこ ちらに有りますが、中国語が混じっていて分かりにくかったので改めて紹介します。
まず最初にPico-MiniをWindowsのUSBポートから給電します。
buildrootが立ち上がると、Windows側に「Remote NDIS based Internet Sharing Device」が出現します。


ネットワーク接続を開くと2つ(以上)のネットワークが表示されます。
1つが現在母艦が使用中のネットワークで、「識別されていないネットワーク」がRNDISが作成したネットワークです。
こちらがWiFiを使っているときの表示です。


Ethetnetを使っているときはこのように表示されます。


母艦側のネットワーク(イーサネット/WiFi)のプロパティを開いて共有を有効にします。


「識別されていないネットワーク」のプロパティを開いて、さらにインターネットプロトコルバージョン4のプロパティを開きます。


IPアドレス、サブネットマスクを指定します。
IPアドレスは172.32.0のセグメントであれば、最後のオクテットは何でも構いません。


全てのウィンドウをOKで閉じると、この変更が有効になります。

◇pingによる疎通確認
Windowsのコマンドプロンプトでpingを実行するとPico-Miniにpingが通ります。


◇scpによるリモートファイル転送
Windowsのコマンドプロンプトでscpを実行するとPico-Miniへのファイル転送ができます。
WinScpなどのGUIツールも使用することができます。


◇sshによるリモートログイン
Windowsのコマンドプロンプトでsshを実行するとPico-Miniへのリモートログインができます。
TeraTermなどのGUIツールも利用することができます。


◇ネットワーク共有
Pico-Mini側で以下のコマンドを実行します。
routeコマンドは一時的なルーティングの追加です。
/etc/resolv.confgは/tmp/resolv.confにリンクされているので、再起動すると消えてしまいます。
起動するたびに以下のコマンドを実行する必要が有りますが、こ ちらの手順に従うとPico-Miniの起動時に自動的に設定を行います。
$ route add default gw 172.32.0.100

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.32.0.100    0.0.0.0         UG    0      0        0 usb0
172.32.0.0      *               255.255.0.0     U     0      0        0 usb0

$ ls -l /etc/resolv.conf
lrwxrwxrwx    1 1000     1000            18 Oct 16  2023 /etc/resolv.conf -> ../tmp/resolv.conf

$ echo "nameserver 8.8.8.8" >> /etc/resolv.conf

$ cat /etc/resolv.conf
nameserver 8.8.8.8

これでPico-Miniから外部にネットワークが通ります。


外部にネットワークが通ったのでpip本体をアップデートしてみました。

pipを使うためにはbuildrootをカスタマイズしてpython-pipを有効にする必要が有りますが、

buildrootをカスタマイズするとデバイスファイルが無くなってしまします。

pip本体が22.0.2から24.1にアップデートされました。
35秒でアップデート出来ました。


buildrootはaptもgitも使えませんが、pipが使えると格段に便利になります。
後はひたすらpipでパッケージをインストールするだけです。
手始めにAdafruit-PlatformDetectをインストールします。
11秒でインストールできました。


Adafruit-PlatformDetectは動作中のLinuxのチップとボードを自動判定するライブラリです。
以下のスクリプト(platformdetect.py)で、このライブラリの動作を確認することができます。
from adafruit_platformdetect import Detector
detector = Detector()
print("Chip id: ", detector.chip.id)
print("Board id: ", detector.board.id)

Pico-Miniを識別しました。
$ python3 ./platformdetect.py
Chip id:  RV1103
Board id:  LUCKFOX_PICO_MINI

こちらのライブラリを インストールすると、このライブラリをベースとして利用するこ れらのライブラリが使えるようになります。
buildrootではaptやgitによるパッケージ追加はできませんが、pipを使ったライブラリの追加は問題なく動きます。

続く....