レポジトリにESP関係のコードがかなり入ったことは知っていたのですが、久しぶりにESP32用にNuttxをビルドしてみたところ、生成されるnuttx.binがEsp32に直接書き込めるbinaryになっていたり、wapi scan などが動作したり、wapi_smpやsta_softapのコンフィグ等多数追加されるなどかなり進展があったので、本稿を挙げてみることにしました。
レポジトリの取得や、基本的な環境設定は、前々回/前回と違いtools/esp32/Makefileがなくなっったようなので、以下の様にしてみました。
ツール類のインストールなど
# 念のため sudo apt-get update #nuttx用のツール類のインストール sudo apt-get install kconfig-frontends #esp32 idf用のツール類のインストール sudo apt-get install git automake autoconf cmake build-essential git wget flex bison gperf make \ libncurses5-dev python3 python3-pip python3-setuptools python3-serial python3-click \ python3-cryptography python3-future python3-pyparsing python3-pyelftools python3-libusb1 python3-pip \ pkg-config unzip ninja-build ccache #python3をデフォルトにしておく。 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10なおubuntu 18.04ではkconfig-frontendsのパッケージがないので、別途ソースを取得し、ビルド・インストールします。 kconfig-frontendsのビルド(ubuntu 18.04)
cd /usr/src sudo mkdir kconfig-frontends chown yousrid kconfig-frontends git clone https://bitbucket.org/nuttx/tools cd tools/kconfig-frontends ./configure --disable-shared --prefix=/usr/local make sudo make installnuttx ソースのクローン
sudo mkdir /usr/src/nuttx-esp32 sudo chown yourid /usr/src/nuttx-esp32 cd /usr/src/nuttx-esp32 git clone https://github.com/apache/incubator-nuttx nuttx git clone https://github.com/apache/incubator-nuttx-apps appsesp32ビルド環境の構築
mkdir -p ~/esp cd ~/esp git clone -b master --recursive https://github.com/espressif/esp-idf.git # クローンには数分かかります。 cd esp-idf ./install.sh # ダウンロードなど、数分かかります。続いて ~/.bashrc を編集し、ログイン時にesp32のidf環境を読み込むようにしておきます。
. ${HOME}/esp/esp-idf/export.shここで一旦ログアウトするか、. ${HOME}/esp/esp-idf/export.shとしてください。 また、前述の様にnuttx.binがEsp32に直接書き込めるbinaryになったので注意してください。 ビルドは以下の様にします。ビルドするとソースが一部ダウンロードされます。
cd /usr/src/nuttx-esp32/nuttx tools/configure.sh esp32-devkitc/wapi_smpビルドログの最後の方ですが、以下の様になります。
tools/configure.sh esp32-devkitc/wapi_smp make #(中略) CP: nuttx.hex CP: nuttx.bin MKIMAGE: ESP32 binary esptool.py -c esp32 elf2image -fs 4MB -fm dio -ff 40m -o nuttx.bin nuttx esptool.py v2.9-dev Generated: nuttx.bin (ESP32 compatible)前回使用した/usr/local/bin/flash-write-esp32 (sudo chmod +x)スクリプトは以下の様にしてみました。
#!/bin/bash if [ $# -eq 0 ]; then echo usage: $0 /dev/ttyXXXX exit 1 else if [ $# -eq 1 ]; then # check if give device is available if [ ! -e $1 ]; then echo $1 does not exist. exit 1 else ser=$1 fi else echo usage: $0 /dev/ttyXXXX exit 1 fi fi if which esptool.py; then \ if [ ! -e ~/bootloader.bin ]; then echo Not Found ~/bootloader.bin does not exists. : Exiting... exit 1 fi if [ ! -e ~/bootloader.bin ]; then echo Not found: ~/partitions.bin does not exists. : Exiting... exit 1 fi if [ ! -e /usr/src/nuttx-esp32/nuttx/nuttx.bin ]; then echo Not found: /usr/src/nuttx-esp32/nuttx/nuttx.bin : Exiting... exit 1 fi esptool.py --chip esp32 --port $ser --baud 921600 write_flash 0x1000 ~/bootloader.bin \ 0x8000 ~/partitions.bin 0x10000 /usr/src/nuttx-esp32/nuttx/nuttx.bin else echo Not found: esptool.py : Exiting... exit 1 fi echo OK. exit 0なお、/dev/ttyUSBXは接続されるとmodeが0666になるようにしています。(もしくはuserをdialoutに追加)
$ cat /etc/udev/rules.d/99-usb-serial.rules ACTION=="remove", GOTO="serial_end" SUBSYSTEM!="tty", GOTO="serial_end" KERNEL=="ttyUSB*", MODE="0666" KERNEL=="ttyACM*", MODE="0666" LABEL="serial_end"コマンドは以下の様に実行します。
flash-write-esp32 /dev/ttyUSB0書き込みがすんだら、minicom などで接続して動作確認してみます。
nsh> wapi scan wlan0 bssid / frequency / signal level / ssid 94:e9:ee:AA:BB:CC 2452 -95 XXXXYYYYZZZZ-2G f8:b7:97:DD:EE:FF 2437 -84 aterm-AABBCC-g 90:2b:d2:AA:BB:CC 2452 -81 UUUUVVVVWWWW-2G de:a2:66:DD:EE:FF 2437 -75 PS4-AAAABBBBCCCC cc:1a:fa:AA:BB:CC 2462 -67 F660A-XXXX-G nsh> wapi psk wlan0 MyPSK 2 nsh> wapi essid wlan0 F660A-XXXX-G 1 nsh> ifconfig wlan0 Link encap:Ethernet HWaddr 30:ae:a4:aa:bb:cc at UP inet addr:10.0.0.2 DRaddr:10.0.0.1 Mask:255.255.255.0 (stat 省略) nsh> renew wlan0 nsh> ifconfig wlan0 Link encap:Ethernet HWaddr 30:ae:a4:aa:bb:cc at UP inet addr:192.168.2.210 DRaddr:192.168.2.1 Mask:255.255.255.0 (stat 省略) nsh> ping -c4 1.1.1.1 PING 1.1.1.1 56 bytes of data No response from 1.1.1.1: icmp_seq=0 time=1000 ms 56 bytes from 1.1.1.1: icmp_seq=1 time=20 ms 56 bytes from 1.1.1.1: icmp_seq=2 time=10 ms 56 bytes from 1.1.1.1: icmp_seq=3 time=10 ms 4 packets transmitted, 3 received, 25% packet loss, time 4040 ms nsh> ping -c4 www.google.com PING 172.217.175.228 56 bytes of data 56 bytes from 172.217.175.228: icmp_seq=0 time=20 ms 56 bytes from 172.217.175.228: icmp_seq=1 time=10 ms 56 bytes from 172.217.175.228: icmp_seq=2 time=10 ms 56 bytes from 172.217.175.228: icmp_seq=3 time=10 ms 4 packets transmitted, 4 received, 0% packet loss, time 4040 ms nsh> wapi show wlan0 wlan0 Configuration: IP: 192.168.2.210 NetMask: 255.255.255.0 Frequency: 2462 Flag: WAPI_FREQ_AUTO Channel: 11 Frequency: 2462 ESSID: F660A-XXXX-G Flag: WAPI_ESSID_ON Mode: WAPI_MODE_MANAGED AP: cc:1a:fa:aa:bb:cc BitRate: 72 Flag: WAPI_BITRATE_FIXED TxPower: 19 Flag: WAPI_TXPOWER_DBM Sense: -59いい感じになってきましたね。今回のwapi_smpのコンフィグにはtelnetdも入っているようなので外部から接続してみます。
$ telnet 192.168.2.210 Trying 192.168.2.210... Connected to 192.168.2.210. Escape character is '^]'. NuttShell (NSH) NuttX-10.0.1 nsh> help help usage: help [-v] [参考までに、3/29現在のサンプルコンフィグは以下の通りになっています。] . cd exec ifdown mh rm time [ cp exit ifup mount rmdir true ? cmp false kill mv set uname arp dirname free ls mw sleep umount basename dd help mb nslookup source unset break df hexdump mkdir ps test usleep cat echo ifconfig mkrd pwd telnetd xd Builtin Apps: getprime iperf ostest renew smp wapi hello nsh ping sh taskset nsh> ps PID CPU PRI POLICY TYPE NPX STATE EVENT SIGMASK STACK USED FILLED COMMAND 0 0 0 FIFO Kthread N-- Assigned 00000000 002048 000912 44.5% CPU0 IDLE 1 1 0 FIFO Kthread N-- Running 00000000 002048 000608 29.6% CPU1 IDLE 3 --- 100 RR Kthread --- Waiting Signal 00000000 002128 001216 57.1% lpwork 4 --- 100 RR Task --- Waiting Semaphore 00000000 003152 002048 64.9% init 5 --- 223 RR Kthread --- Waiting Semaphore 00000000 002112 001040 49.2% rt_timer 6 --- 253 RR Kthread --- Waiting MQ empty 00000000 006736 001936 28.7% wifi 7 --- 100 RR Task --- Waiting Semaphore 00000000 002096 000848 40.4% Telnet daemon 0x3ffe3e20 13 --- 100 RR Task --- Waiting Signal 00000000 002080 001648 79.2% ping -c 14400 www.google.com 14 --- 100 RR Kthread --- Waiting Semaphore 00000000 001088 000848 77.9% telnet_io 26 0 100 RR Task --- Running 00000000 003136 002192 69.8% Telnet session nsh> free total used free largest Umem: 243168 68864 174304 110608 nsh>
$ ls boards/xtensa/esp32/esp32-devkitc/configs aes leds mmcsdspi nsh ostest psram smp sta_softap wapi watchdog buttons mcp2515 netnsh oneshot pm random spiflash timer wapi_smp watcher $ ls boards/xtensa/esp32/esp32-ethernet-kit/configs buttons ethernet nsh oneshot wapi $ ls boards/xtensa/esp32/esp32-wrover-kit/configs bmp180 buttons gpio leds nsh oneshot wapiaesやsta_softapなども入っているようです。 なお、長時間動作は今のところpingとtelnetだけですが、6時間ほど経過し動作しています。そのまま動作させて、追記で経過報告したいと思います。 追記:2021/03/30: PING動作中の端末にTelnetでログインし、なにがしかのコマンドを実行しようとしたところ、ハングしてしまいました。まだ不安定であり、長時間動作や実稼働はできないと考えた方がよさそうですが、以前よりはPINGの動作時間は長くなっているので、今後に期待したいところです。 今回は以上です。それでは。
コメント
コメントを投稿