STM32でNUTTXを使ってみる

開発環境構築


STM32でNuttxが動くことが分かりました。
Nuttxはマイコン用のRTOSでこ ちらにプレゼンテーション資料があります。
日本語の資料はほとんどないので、分かる範囲で紹介したいと思います。

ホストマシン(開発環境)にはCorei3のUbuntu 22.04を使いました。
Ubuntuのバージョンは以下の通りです。
コンパイルに結構時間がかかるので、できるだけ高性能のマシンのほうがいいです。


<補足>
Nuttxの開発環境としてWindowsマシンを使うこともできますが、Windowsマシンの場合はcigwinをインストールして
cigwin上でLinuxコマンドを使います。
コマンドラインでの操作になりますので、Windowsのシェル(cmd.com)よりも、Linuxのシェルのほうが操作性は格段にいいです。
</補足>

開発ツール

開発ツール、KConfig frontend、Toolchainのインストールに関してはこ ちらのままです。
KConfig frontendは、Ubuntu20.04からはaptを使ってインストールできるようになりました。

Nuttxのダウンロード

NuttX kernelとNuttx applicationsをgithubからダウンロードします。
インストール時点の最新はreleases/12.4でしたが、このバージョンからnxtask_init()の引数が変わりました。
そこで、12.3を使っています。
$ sudo apt install git
$ mkdir $HOME/nuttxspace
$ cd $HOME/nuttxspace
$ git clone -b releases/12.3 https://github.com/apache/nuttx.git nuttx
$ git clone -b releases/12.3 https://github.com/apache/nuttx-apps apps

インストールされているNuttxのバージョンは以下で確認することができます。
version.hはビルド時に自動生成されるファイルなので、ビルド前は存在しません。
$ cat $HOME/nuttxspace/nuttx/include/nuttx/version.h
/* version.h -- Autogenerated! Do not edit. */

#ifndef __INCLUDE_NUTTX_VERSION_H
#define __INCLUDE_NUTTX_VERSION_H

#define CONFIG_VERSION_STRING "12.3.0"
#define CONFIG_VERSION_MAJOR 12
#define CONFIG_VERSION_MINOR 3
#define CONFIG_VERSION_PATCH 0
#define CONFIG_VERSION_BUILD "8fdb56b5f2-dirty"

#define CONFIG_VERSION ((CONFIG_VERSION_MAJOR << 16) |\
                        (CONFIG_VERSION_MINOR << 8) |\
                        (CONFIG_VERSION_PATCH))

#endif /* __INCLUDE_NUTTX_VERSION_H */

これらのマクロを使って、プログラムの中でNuttxのバージョンを判定することができます。
    printf("CONFIG_VERSION_MAJOR=%d\n",CONFIG_VERSION_MAJOR);
    printf("CONFIG_VERSION_MINOR=%d\n",CONFIG_VERSION_MINOR);
    printf("CONFIG_VERSION_PATCH=%d\n",CONFIG_VERSION_PATCH);

ST-Link Utilities

ファームの書き込みに使用するST-Link Utilitiesをインストールします。
インストールはこ ちらを参考にしました。
github.com/texane/stlink にアクセスすると、github.com/stlink-org/stlink に飛びます。
$ cd $HOME
$ sudo apt install -y cmake libusb-1.0-0-dev

$ git clone https://github.com/stlink-org/stlink
$ cd stlink
$ make
$ sudo make install
$ sudo cp config/udev/rules.d/49-stlinkv* /etc/udev/rules.d/
$ sudo /sbin/ldconfig

$ sudo udevadm control --reload-rules
$ sudo udevadm trigger
$ st-flash --version
v1.7.0-352-g8c581c3

これでNuttxの環境構築は完了です。
次回はいよいよNuttxのファームウェア作成を紹介します。

続く...