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

投稿

3月, 2021の投稿を表示しています

NuttX on ESP32: wapi_smpを使ってみる (as of Mar/29/2021)

レポジトリに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

Nuttx: zoneinfo(time zone)を使用してみる

前回はNTPClientを実行してみましたが、デフォルトではzoneinfo/timezoneの設定は入っていないので、同期できるのはGMT/UTCのみです。当然といえば当然なのですが、ローカルタイムを設定できないかと思いコンフィグをしてみたのですが、少し込み入った結果になったので 前回 とは別稿で本稿を挙げてみることにしました。なお、ビルドは今回Debianではビルドできず(malloc erro)、ubuntu 2004 LTSでビルドしました。 まず、Configです。 前回 と今回のコンフィグのdiffは以下の通りです。 $diff -urN boards/arm/stm32/weact-f401ce/configs/rndis_ipv6_ntpc/defconfig \ boards/arm/stm32/weact-f401ce/configs/rndis_tz/defconfig --- boards/arm/stm32/weact-f401ce/configs/rndis_ipv6_ntpc/defconfig 2021-03-28 03:34:21.000000000 +0900 +++ boards/arm/stm32/weact-f401ce/configs/rndis_tz/defconfig 2021-03-29 19:29:34.283539700 +0900 @@ -22,10 +22,17 @@ CONFIG_BOARD_LOOPSPERMSEC=8499 CONFIG_BUILTIN=y CONFIG_FS_PROCFS=y +CONFIG_FS_ROMFS=y CONFIG_HAVE_CXX=y CONFIG_HAVE_CXXINITIALIZE=y CONFIG_HOST_WINDOWS=y CONFIG_INTELHEX_BINARY=y +CONFIG_LIB_ZONEINFO=y +CONFIG_LIB_ZONEINFO_ROMFS=y +CONFIG_LIBC_LOCALTIME=y +CONFIG_LIBC_TZDIR="/etc/zoneinfo" +CONFIG_LIBC_TZ_MAX_TIMES=370 +CONFIG_LIBC_TZ_MAX_TYPES=2

Nuttx: NTP Clinetで時刻を合わせる

NuttxでNTPクライアントを実行し、時刻を合わせることができたので備忘録として本稿を挙げてみることにしました。 対象はweact-f401ceで、 前回のf401ccのrndis_ipv6の設定 と少ししか差がないのですが、configのdiffは以下の通りです。 $ diff -urN boards/arm/stm32/weact-f401cc/configs/rndis_ipv6/defconfig \ boards/arm/stm32/weact-f401ce/configs/rndis_ipv6_ntpc/defconfig --- boards/arm/stm32/weact-f401cc/configs/rndis_ipv6/defconfig 2021-03-27 08:14:07.000000000 +0900 +++ boards/arm/stm32/weact-f401ce/configs/rndis_ipv6_ntpc/defconfig 2021-03-28 03:34:21.000000000 +0900 @@ -9,13 +9,14 @@ # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_HEXDUMP is not set # CONFIG_NSH_CMDPARMS is not set +# CONFIG_NSH_DISABLE_DATE is not set CONFIG_ARCH="arm" -CONFIG_ARCH_BOARD="weact-f401cc" -CONFIG_ARCH_BOARD_WEACT_F401CC=y +CONFIG_ARCH_BOARD="weact-f401ce" +CONFIG_ARCH_BOARD_WEACT_F401CE=y CONFIG_ARCH_BUTTONS=y CONFIG_ARCH_CHIP="stm32" CONFIG_ARCH_CHIP_STM32=y -CONFIG_ARCH_CHIP_STM32F401CC=y +CONFIG_ARCH_CHIP_STM32F401CE=y CONFIG_ARCH_STACKDUMP

NuttX: W25Q64JV-_IM( JEDEC ID EF 70 17 )を認識させる

何種類かのW25Qを入手したのですが、どれも同じだろうと思っていたところ、結線は問題ないのに初期化に失敗するものがありました。チップの刻印をみてもわからず、とりあえず、 こちらのSTM32向けのコード を走らせたところ、 JEDEC ID : EF 70 17 と識別されていました。(作者の方に感謝します。)そこでこれをもとに検索すると、どうやら W25QJVでも_IMで終わるもの だそうです。ここまでわかれば、あとはソースコードで識別できるようにするだけでよさそうなので、以下の変更を加えると、無事、初期化・書込・読出ができました。 $ diff -urN drivers/mtd/w25.c.orig drivers/mtd/w25.c --- drivers/mtd/w25.c.orig 2020-09-21 00:09:41.000000000 +0900 +++ drivers/mtd/w25.c 2021-03-23 08:17:30.523539700 +0900 @@ -102,6 +102,7 @@ #define W25Q_JEDEC_MEMORY_TYPE_A 0x40 /* W25Q memory type */ #define W25Q_JEDEC_MEMORY_TYPE_B 0x60 /* W25Q memory type */ #define W25Q_JEDEC_MEMORY_TYPE_C 0x50 /* W25Q memory type */ +#define W25Q_JEDEC_MEMORY_TYPE_D 0x70 /* W25Q memory type */ #define W25_JEDEC_CAPACITY_8MBIT 0x14 /* 256x4096 = 8Mbit memory capacity */ #define W25_JEDEC_CAPACITY_16MBIT 0x15 /* 512x4096 = 16Mbit memory capacity */ @@ -363,7 +364,8 @@ (memory == W25X_JEDEC_MEMORY_TYPE || memory == W25Q_JEDEC_MEMO

Nuttx: IPv6 over RNDIS on F411/F401 Black Pill

ネットでNuttXのIPv6関係のことを検索しても、情報はおおくはないのですが、調べてみたところ stm32f4discoveryにipv6のコンフィグが入っていることがわかりました。そこでさらにしらべたのですが、Ethernetでは動作するようですが、残念ながらそれ以上のことはわかりませんでした。 そこでソースをみたところ、CDCECMはIPv6に対応している様子で、いったんBlack PillでCDCECMをコンパイルし書き込んでみたのですが、IPv6は無論のこと、IPv4も動作しませんでした。どうやら、RNDISはF4のOTGFS依存であり、CDCECMはF103系のUSBDEV依存のようです。 そこで今一度気を取り直し、RNDISにIPv6関連の設定を入れ、動作しない場合は、ソースに手を入れるという方向でやろうとしたところ、結局コンフィグだけでアドレス取得、PING6, telnet over ipv6ができたので、備忘録として本稿を挙げてみることにしました。また、今回はコンフィグだけでなく、Black Pillを接続する母艦側の設定も挙げてあります。 まずは、 weact-f401cc(F401cc Black Pill) 向けのIPv6のコンフィグ設定です。 $ cat boards/arm/stm32/weact-f401cc/configs/rndis_ipv6/defconfig # # This file is autogenerated: PLEASE DO NOT EDIT IT. # # You can use "make menuconfig" to make any modifications to the installed .config file. # You can then do "make savedefconfig" to generate a new defconfig file that includes your # modifications. # # CONFIG_ARCH_FPU is not set # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_HEXDUMP is not set # CONFIG_NSH

NuttX: STM32F401CC/ST32F401CE Black Pill 向けにソースをフォーク

F4 Black Pillにはいくつか種類があり、F411CEのものもあれば、F401CC, F401CEのものもあります。その後、F411CEに続いてF401CE/F401CCを入手したので、今回はF401CCとF401CE向けにソースをフォークし、RCC関係のところだけですが本稿を挙げてみることにしました。 F401CCとF401CEはクロック関連は同じなので、以下、F401CE向けのboards/arm/stm32/weact-f401ce/include/board.hです。 $ diff -urN boards/arm/stm32/stm32f411-minimum/include/board.h boards/arm/stm32/weact-f401ce/include/board.h --- boards/arm/stm32/stm32f411-minimum/include/board.h 2021-03-16 23:33:19.400000000 +0900 +++ boards/arm/stm32/weact-f401ce/include/board.h 2021-01-09 02:52:09.000000000 +0900 @@ -1,5 +1,5 @@ /**************************************************************************** - * boards/arm/stm32/stm32f411-minimum/include/board.h + * boards/arm/stm32/weact-f401ce/include/board.h * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -18,8 +18,8 @@ * ****************************************************************************/ -#ifnde

NuttX: STM32F411CE Black Pill 向けにソースをフォーク

前回はSTM32F103RC向けのソースフォーク をしたのですが、今回はSTM32F411CEBlackPill向けのフォークについてです。もともとboards/arm/stm32/stm32f411-minimumというソースがありますが、2021/03現在、RCCの設定がうまくいっていないようで、USBを使ったサンプルはなく、nsh(シリアルコンソール)しかサンプルが入っていません。そこで、 STM32F103RC向けのフォーク と同様に、ソースをフォークしてみました。 基本的には前回とおなじやり方 なのですが、USB関係を動かすためには、RCCの設定(include/board.h)を修正する必要がありますので、今回はそこだけですが、UPしておきます。 $ diff -urN boards/arm/stm32/stm32f411-minimum/include/board.h boards/arm/stm32/weact-f411ce/include/board.h --- boards/arm/stm32/stm32f411-minimum/include/board.h 2021-03-16 23:33:19.400000000 +0900 +++ boards/arm/stm32/weact-f411ce/include/board.h 2021-03-17 00:21:58.290000000 +0900 @@ -1,5 +1,5 @@ /**************************************************************************** - * boards/arm/stm32/stm32f411-minimum/include/board.h + * boards/arm/stm32/weact-f411ce/include/board.h * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -18,8 +18,8 @@ *

Testing mqtt on Nuttx with cdcecm

MQTTのサンプルがNuttxで動くそうなので、CDCECM接続した STM32F103RCの載ったボード で動作確認をやってみました。 こちら を参考にさせていただきました。ありがとうございます。なお、linuxはDebian/11, Nuttxは9.1.xです。 それでは早速設定です。まず最初にnuttx/appsに対するMQTTパッチを取得し適用します。 mkdir /usr/src/tmp cd /usr/src/tmp wget https://gist.githubusercontent.com/mickey-happygolucky/8f311691be2b8000f82628b56ded435c/raw/aabf945b67914c2bfd5137cdac0d85d474db22f1/nuttx_mqtt.patch cd /usr/src/nuttx/apps patch -p1 < /usr/src/tmp/nuttx_mqtt.patch 続いて、先にCDCECMデバイスを接続させるLinux機にmosquittoをインストールし、最小限の設定をしておきます。 sudo apt-get install mosquitto mosquitto-clients # 新規作成: $ sudo vi /etc/mosquitto/conf.d/bind-10.0.0.1.conf allow_anonymous true bind_address 10.0.0.1 $ sudo systemctrl restart mosquitto CDCECMのコンフィグは以下の様にしました。 $ cd /usr/src/nuttx/nuttx $ mkdir -p boards/arm/stm32/f103rcbb/configs/cdcecm_mqtt $ vi nuttx/boards/arm/stm32/f103rcbb/configs/cdcecm_mqtt/defconfig # CONFIG_DISABLE_ENVIRON is not set # CONFIG_DISABLE_POSIX_TIMERS is not set # CONFIG_NSH_DISABLEBG is not set # CONFIG_NSH

Nuttx: STM32F103RC向けにソースをNucleo-F103RBからフォーク

以前からSTM32F103RC向けにフォークしたソースを使っているのですが、具体的にフォークさせる方法を上げていなかったので、備忘録として本稿を上げることにしました。 フォークとは言うものの、一からソースフォークするわけではなく、すでにNUTTXがサポートしているCPUの範囲であることが前提です。なお、本稿ではnuttx-9.1でフォークしました。 それでは、早速設定です。まず最初に、フォークする名前等を決めておきます。 board name small: f103rcbb board name big : F103RCBB board CPU : STM32F103RC RAM Size : 49152 続いてフォークする設定をnuttx/boards/Kconfigに3箇所追加します。(2023/10/20追記:config ARCH_BOARD_NUCLEO_F103RBの後ろでもどこでも構いません。) 一箇所目 config ARCH_BOARD_F103RCBB bool "F103RC black board" depends on ARCH_CHIP_STM32F103RC select ARCH_HAVE_LEDS select ARCH_HAVE_BUTTONS select ARCH_HAVE_IRQBUTTONS ---help--- F103RC black board based on the STMicro STM32F103RCT6 MCU. 二箇所目 default "f103rcbb" if ARCH_BOARD_F103RCBB 三箇所目 if ARCH_BOARD_F103RCBB source "boards/arm/stm32/f103rcbb/Kconfig" endif なお先頭の空白はスペースではなく、タブです。続いてフォーク元のソースをコピーします。 cd /usr/src/nuttx/nuttx cp -a boards/arm/s

Nuttx on Blue Pill にて CDCECMを実行しDHCPでネットワーク接続

以前の投稿では、STM32F103RC(RAM 48KB)でCDCECMを起動させたのですが、BluePillでNuttxを起動させる場合、TCP/IPを設定する記事はほとんど見あたりません。さらにBluePillにかぎらず、Ethernetアダプタを使わずに複数ターゲットを同時にかつDHCPでアドレスを割り当てネットワーク接続させる記事もみあたらなかったので 以前の投稿 に加えてトライしてみました。 今回のコンフィグはDHCPでアドレスを取得してPINGに応答するだけでほぼ実用性はありませんが、NuttxをBluePillよりもRAMが多い機種、例えば、RAM 48KのSTM32F103RCやRAM 64KのF401CC/RAM 96KのF401CE/RAM 128KのF411CEでUSB/DHCP接続などで役に立ちそうなので、本稿を備忘録を兼ねてあげてみることにしました。なお、CPUIDの一部をマックアドレスの一部に疑似的に割り当てているので、ネットワークの設定のために個体ごとにconfig・sourceを変更しコンパイルする必要はありません。 早速ですが、コンフィグは以下の様にしてみました。 # # This file is autogenerated: PLEASE DO NOT EDIT IT. # # You can use "make menuconfig" to make any modifications to the installed .config file. # You can then do "make savedefconfig" to generate a new defconfig file that includes your # modifications. # # CONFIG_DISABLE_ENVIRON is not set # CONFIG_DISABLE_POSIX_TIMERS is not set # CONFIG_NSH_DISABLEBG is not set # CONFIG_NSH_DISABLESCRIPT is not set # CONFIG_NSH_DISABLE_DD is not set # CONFIG_NSH_DISABLE_EXEC i