スキップしてメイン コンテンツに移動

Nuttx on ESP32 board : build environment setup for linux and build nsh for esp32

Nuttx master repositoryにesp32のwifi関係がやっと入ったので、まずは、ESP32をビルドする環境をLinux(Debian 11)上で整え、nshをビルドして見ました。それでは早速設定していきます。
#nuttx用のツール類のインストール
sudo apt-get install kconfig-frontends

#esp32 idf用のツール類のインストール
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools \
	python3-serial python3-click python3-cryptography python3-future python3-pyparsing \
	python3-pyelftools python3-libusb1 cmake ninja-build ccache

#python3をデフォルトにしておく。
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
nuttxのソースをクローンし、esp32の開発環境を読み込むようにしておきます。
cd /usr/src

sudo mkdir /usr/src/nuttx-master
sudo chown -R YourUseName nuttx-master

cd nuttx-master
git clone https://github.com/apache/incubator-nuttx nuttx
git clone https://github.com/apache/incubator-nuttx-apps apps

cd nuttx
make -C tools/esp32 ${HOME}/esp/esp-idf
#ツール類のダウンロードが行われ、数分かかります。

#続いて ~/.bashrc を編集し、ログイン時にesp32のidf環境を読み込むようにしておきます。

. ${HOME}/esp/esp-idf/export.sh

ここで一旦ログアウトして、再度ログインしてください。
Setting IDF_PATH to '/home/yourUserName/esp/esp-idf'
Adding ESP-IDF tools to PATH...
Not using an unsupported version of tool openocd-esp32 found in PATH: 0.11.0-rc1-snapshot.
Checking if Python packages are up to date...
Python requirements from /home/yourUserName/esp/esp-idf/requirements.txt are satisfied.
Added the following directories to PATH:
  /home/yourUserName/esp/esp-idf/components/esptool_py/esptool
  /home/yourUserName/esp/esp-idf/components/espcoredump
  /home/yourUserName/esp/esp-idf/components/partition_table/
  /home/yourUserName/.espressif/tools/xtensa-esp32-elf/esp-2020r2-8.2.0/xtensa-esp32-elf/bin
  /home/yourUserName/.espressif/tools/xtensa-esp32s2-elf/esp-2020r2-8.2.0/xtensa-esp32s2-elf/bin
  /home/yourUserName/.espressif/tools/esp32ulp-elf/2.28.51-esp-20191205/esp32ulp-elf-binutils/bin
  /home/yourUserName/.espressif/tools/esp32s2ulp-elf/2.28.51-esp-20191205/esp32s2ulp-elf-binutils/bin
  /home/yourUserName/.espressif/tools/openocd-esp32/v0.10.0-esp32-20191114/openocd-esp32/bin
  /home/yourUserName/.espressif/python_env/idf4.1_py3.9_env/bin
  /home/yourUserName/esp/esp-idf/tools
Done! You can now compile ESP-IDF projects.
Go to the project directory and run:

  idf.py build
続いて、ビルドしたnuttxをシリアル経由でボードに書き込めるように先にブートローダーバイナリーを取得しておきます。
cd ~
wget -O ~/bootloader.bin https://github.com/saramonteiro/esp32_binaries_nuttx/blob/main/bootloader.bin?raw=true
wget -O ~/partitions.bin https://github.com/saramonteiro/esp32_binaries_nuttx/blob/main/partitions.bin?raw=true
最後にビルドとESP32ボードへの書き込みを行います。
cd /usr/src/nuttx-master/nuttx
tools/configure.sh esp32-devkitc/nsh
# Xは環境にあわせてください。
make -jX

rm nuttx.bin
esptool.py --chip esp32 elf2image --flash_mode dio --flash_size 4MB -o ./nuttx.bin nuttx

# ここで、espボードを接続。
# ttyUSB0は環境に合わせて下さい。
sudo chmod 666 /dev/ttyUSB0
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 write_flash 0x1000 \
           ~/bootloader.bin 0x8000 ~/partitions.bin 0x10000 nuttx.bin

==========
esptool.py v3.0
Serial port /dev/ttyUSB0
Connecting....
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, Coding Scheme None
Crystal is 40MHz
MAC: 30:ae:ww:xx:yy:zz
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Compressed 23904 bytes to 14870...
Wrote 23904 bytes (14870 compressed) at 0x00001000 in 0.2 seconds (effective 969.4 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 103...
Wrote 3072 bytes (103 compressed) at 0x00008000 in 0.0 seconds (effective 5092.6 kbit/s)...
Hash of data verified.
Compressed 189504 bytes to 48817...
Wrote 189504 bytes (48817 compressed) at 0x00010000 in 1.5 seconds (effective 994.6 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
================

$ minicom -D /dev/ttyUSBX
Welcome to minicom 2.7.90

OPTIONS: I18n
Compiled on Jul 26 2020, 10:44:57.
Port /dev/ttyUSB0, 23:25:20

Press CTRL-A Z for help on special keys


nsh> uname -a
NuttX 10.0.1 ca0932f842 Jan 13 2021 23:23:20 xtensa esp32-devkitc
nsh>

今回は以上です。それでは。
参考にしたサイト:
https://medium.com/the-esp-journal/getting-started-with-esp32-and-nuttx-fd3e1a3d182c

コメント

このブログの人気の投稿

wsdd を使ってSamba サーバをネットワークに表示

Windows 10のアップデートで、セキュリティー対応のため、smbv1がデフォルトではインストールされなくなり、Samba serverがエクスプローラーのネットワークに表示されなくなってしまいました。そこで、いくつか方法を調べたのですが、linuxでwsdの実装がないか探したところ、 https://github.com/christgau/wsdd が、見つかりましたので、さっそくインストールしてみました。まだパッケージにはないようですが、インストール自身は簡単です。wsdd自体は以下のように取得し、linkを張っておきます。 cd /usr/local/bin/ sudo wget https://raw.githubusercontent.com/christgau/wsdd/master/src/wsdd.py sudo chmod 755 wsdd.py sudo ln -sf wsdd.py wsdd こちらのsambaサーバはDebianなので、/etc/systemd/system/wsdd.serviceは以下のようにしました。 [Unit] Description=Web Services Dynamic Discovery host daemon Requires=network-online.target After=network.target network-online.target multi-user.target [Service] Type=simple ExecStart=/usr/local/bin/wsdd -d MYDOMAIN [Install] WantedBy=multi-user.target wsdd -d MYDOMAINのところを、環境にあわせて書き換えてください。 次に、systemdに登録・起動テストを行います。 systemctl enable wsdd systemctl start wsdd 起動に成功すると、エクスプローラーのネットワークに表示されます。  なおこのwsddはpython3が必要です。一度試してみてください。SMBv1/CIFSを停止していても、大丈夫です。 cで書かれたほかのwsddの実装もあるようなので、いずれパッケージになるかもしれませ

Windows デバイス暗号化 のサポートで "許可されていない dma 対応バス/デバイスが検出されました"の対処

Windows でセキュリティー関係を見ているのですが、とあるPCでmsinfo32で確認すると"デバイス暗号化のサポート"で"許可されていない dma 対応バス/デバイスが検出されました"と出ていました。このPCの場合、それ以外はOK(なにも表示されない)だったのですが、ネットでしらべるとMSのドキュメントではハードウェアベンダーに問い合わせるなどと敷居が高く具体的にどこが引っかかっているかわかりません。そこでほかに方法はないかとしらべやってみたところ、"前提条件をみたしています"まで持って行けたので、本稿を挙げた次第です。 具体的には、以下のようにします。 1-a. 許可するDMA対応バス・デバイスを指定するレジストリの所有権と書き込み設定をおこなう。 以下のレジストリキーの所有者を自分自身(管理ユーザ)のものにし、フルコントロール権を付与する。 HKLM\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses もしくは 1-b. MicrosoftよりPsExecをダウンロードし、System権限でRegeditを立ち上げ編集する。 Microsoftより、https://docs.microsoft.com/en-us/sysinternals/downloads/psexec にある こちら をダウンロードし、解凍する。解凍すると、x64の場合、PsExec64.exeがあるので、管理者権限で以下を実行し、システム権限でregeditを立ち上げることが出来るようになる。 cd Downloads\PSTools .\PsExec64.exe -sid C:\Windows\regedit.exe 2-a. パワーシェルスクリプトを実行し、PnPデバイスのうちインスタンスがPCIで始まるものを"AllowedBuses"に追加する。 以下のパワーシェルスクリプトを作成する。たとえばDocuments\allow-dma-bus-device.ps1として作成する。( こちらの記事のものを使用させていただきました: Thank you! ) $tmpfile = "$($env:T

フレッツ光クロス:MAP-E ROUTER by Debian Box (iptables)

フレッツ光クロスがようやく開通したので、Debianにてrouterを構成し接続してみました。なお、プロバイダーを選ぶにあたっては、IPoE方式がそれぞれ異なるため検討したところ、IPoEでは、MAP-Eでもv6plusとocnバーチャルコネクトがあり、前者がポート数240なのに対し、後者は約4倍のポート数が使えるようなネットの情報をみて、OCNバーチャルコネクトを選択しました。(プロバイダーとしてはぷららです。なおDS-LiteはCE側でのNATではないので今回は見送りました。)そこで、OCN バーチャルコネクトをDebian(iptables)で実現するとどうなるかと思い、ネットの情報を頼りにしつつ、設定した次第です。 実際に試した結果、とりあえず通信できていますが、MAP-Eは本来マッピングルールをマップサーバから取得するはずなので、今回のやり方が正解とはいえませんし、仕様変更されると通信できなくなる可能性があります。あくまでも参考程度ですが、本稿をUPしてみました。 2023/03/16追記: こちら にゲームコンソールNAT越え(Nintendo Switch ナットタイプ A判定)対応版を投稿しました。 2023/03/28追記:※1の記述および3行無効化によりNAT越え(Nintendo Switch ナットタイプ B判定)できるようになりました。 構成は以下の通りです。 ルーターがDebianで回線がOCNバーチャルコネクトであること以外はなにも特別なところはない構成です。 さて、いきなり設定ですが、まず、割り当てられたプレフィックスを確認します。 確認は、 dhclient -6 -d -P enp2s0 とします。出力の中に 前略 RCV: | | X-- IAPREFIX 2400:4050:5c71:af00::/56 後略 このようにプレフィックスが表示されるので、その確認したプレフィックスを書き留めておきます。これを こちらで 入力します。すると、 CE: 2400:4050:5c71:af00:99:f171:c600:2f00 IPv4 アドレス: 153.241.113.198 ポート番号:(1776-1791 2800-2815 3824-3839) 4848-4863 5872-5887 6896-