はじめに
STM32F103 Minimum BoardでNuttXというRTOSを動かしてみる。 このボードはAmazonで買えた
2個で990円。もっと安いものもあるみたいだが、中国から直送で1ヶ月くらい輸送にかかりそうなのでプライムで短期間で届きそうなものを買った。
このボードにはSTM32F103C8T6
が載っている。
メモリ | サイズ |
---|---|
フラッシュ | 64KiB |
RAM | 20KiB |
NuttXを動かすためには大まかに次のような作業が必要になる。
- kconfig-frontendsのインストール
- stlink toolsのインストール
- ARMツールチェーンのインストール
- NuttXの作成
- ボードへの書き込み
kconfig-frontendsのインストール
nuttxのビルドにはKconfigを使用するが、その際にkconfig-frontends
が必要となる。
ubuntu 18.04では、自分でビルドする必要がある。
必要パッケージのインストール
次のパッケージをインストールする。
$ sudo apt install build-essential $ sudo apt install make gperf flex bison libncurses-dev
ビルドとインストール
次のようにしてkconfig-frontendを作成、インストールする。
$ git clone https://bitbucket.org/nuttx/tools $ cd tools/kconfig-frontends $ ./configure $ make -j 4 $ sudo make install
stlink toolsのインストール
nuttxの書き込みにstlink tools
を使用する場合はインストールする。
ubuntu 18.04では自分でビルドする必要がある。
必要パッケージのインストール
次のパッケージをインストールする。
$ sudo apt install cmake libusb-1.0
ビルドとインストール
$ wget https://github.com/texane/stlink/archive/v1.5.1.tar.gz $ tar xvfz ./v1.5.1.tar.gz $ cd stlink-1.5.1 $ make -j4 $ cd build/Release $ sudo make install $ sudo ldconfig
udevルールの更新
root権限無しでstlinkにアクセスできるようにudevルールを更新する。
$ sudo udevadm control --reload-rules $ sudo udevadm trigger
ARMツールチェーンのインストール
$ wget https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/8-2018q4/gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2 $ tar xvf gcc-arm-none-eabi-8-2018-q4-major-linux.tar.bz2 $ mv gcc-arm-none-eabi-8-2018-q4-major ~/bin
次のようにPATHに追加する。
PATH="/home/mickey/bin/gcc-arm-none-eabi-8-2018-q4-major/bin:${PATH}";
nuttxの作成
ソースの取得
$ git clone https://bitbucket.org/nuttx/nuttx.git $ git clone https://bitbucket.org/nuttx/apps.git
コンフィグレーション
$ cd nuttx $ tools/configure.sh -l configs/stm32f103-minimum/usbnsh
ビルド
$ make -j4
イメージの書き込み
ST-Link V2とボードの接続
ST-Link V2のピン配置とファンクションをマニュアルから抜粋する
ST-Link V2 | Pin | ターゲット |
---|---|---|
GND | 20 | GND |
TCK | 9 | CLK |
TMS | 7 | IO |
TVCC | 1 | 3.3V |
st-flashコマンドによる書き込み
st-flash
コマンドでnuttx.bin
を書き込む。
$ st-flash write nuttx.bin 0x8000000 st-flash 1.5.1 2019-01-27T15:55:48 INFO usb.c: -- exit_dfu_mode 2019-01-27T15:55:48 INFO common.c: Loading device parameters.... 2019-01-27T15:55:48 INFO common.c: Device connected is: F1 Medium-density device, id 0x20036410 2019-01-27T15:55:48 INFO common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes 2019-01-27T15:55:48 INFO common.c: Attempting to write 50224 (0xc430) bytes to stm32 address: 134217728 (0x8000000) Flash page at addr: 0x0800c400 erased 2019-01-27T15:55:50 INFO common.c: Finished erasing 50 pages of 1024 (0x400) bytes 2019-01-27T15:55:50 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL core id 2019-01-27T15:55:50 INFO flash_loader.c: Successfully loaded flash loader in sram 50/50 pages written 2019-01-27T15:55:53 INFO common.c: Starting verification of write complete 2019-01-27T15:55:54 INFO common.c: Flash written and verified! jolly good!
jolly good!が表示されていれば、書き込みは成功している。
ターゲットの起動
USB NSH環境のNuttXを書き込んだボードをUbuntuのPCに接続すると/dev/ttyACM0
として見える。
minicomでNSHに接続する。
何度かEnterキーを押してみて、プロンプトが表示されればOK。
nsh> nsh> help help usage: help [-v] [<cmd>] [ cp exit kill mw sleep usleep ? dd false ls pwd test xd cat echo help mb set true cd exec hexdump mh sh unset Builtin Apps: nsh>