hotch-potch, Note to self

いろいろ作業記録

Zephyr・Teensy 4.1 チュートリアルチャレンジ

1.はじめに

リアルタイムOSのひとつであるZephyrの試行として、マイコンボードのTeensy 4.1 を対象に試してみます。

2.ビルド環境の準備

ちょうど1年前に、RaspberryPi PICOでトライする記事を書いています。環境構築の手順が当時と若干変わっているようなので、最初から改めて実行します。

docs.zephyrproject.org

基本的には、上記公式の「Getting Started Guide」に従い、 Windows上のVirtualBOX上にインストールしたUbuntu Linuxに開発環境を作りながら進めて行きます.

本記事では、上記を進める中で細々引っかかった点などの気付きも含め、補完していきます。

(1)実行環境

詳細

$ uname -a
Linux u24vb 6.14.0-37-generic #37~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov 20 10:25:38 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

ここまでは、Ubuntu Linuxの標準的なインストール内容です。

(2)開発ツールのインストール

改めて、こちらの手順を参考に進めていきます。

aptでインストールできるもの

# 一通りアップグレードしておきます
$ sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y

# 標準的な開発ツールをインストール
$ sudo apt install build-essential dkms linux-headers-$(uname -r) -y

# Zephyrに係るツールをインストール
$ sudo apt install --no-install-recommends git cmake ninja-build gperf ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 -y

# Pythonのパッケージ管理ツールをインストール
# https://docs.astral.sh/uv/getting-started/installation/
$ curl -LsSf https://astral.sh/uv/install.sh | sh

# ここまでにインストールした主なツールの、バージョンの確認です
$ cmake --version
cmake version 3.28.3

$ python3 --version
Python 3.12.3

$ dtc --version
Version: DTC 1.7.0

ここからは、作業ディレクトリで進めます。

本記事では~/gitwork/以下に作っていきます。

ここからのインストールではかなりまとまった分量のダウンロードが続きますので、おおよそ30分程度を目安に時間を取っておいてください。

# プロジェクトのディレクトリを作成
$ cd
$ mkdir -p ~/gitwork/zephyrproject
$ cd !$

# 仮想環境を準備します
$ python3 -m venv ~/zephyrproject/.venv
# 仮想環境に入ります
$ source ~/zephyrproject/.venv/bin/activate

# Zephyr開発に必要なパッケージをインストール
$ pip install west
$ west init ~/zephyrproject
$ cd ~/zephyrproject
$ west update
$ west zephyr-export
$ west packages pip --install

# zephyrproject/zephyr ディレクトリに移動して
# Zephyr SDKをインストール
$ cd ~/zephyrproject/zephyr
$ west sdk install

対応しているマイコンボードの一覧を確認できます (途中省略しています)

Teensyの他、RaspberryPi、microbit、最近のArduinoなども表示されています。

$ west boards | sort
・・・
teensy40
teensy41
・・・

(3)Teensyへの書き込みツールのインストール

Teensyへの書き込みツールが必要です。下記からソースコードを入手します。

# 作業フォルダを準備
$ mkdir ~/gitwork
$ cd !$

# ソースコードをクローン
$ git clone https://github.com/PaulStoffregen/teensy_loader_cli.git
# ビルドに必要なライブラリを入手
$ sudo apt-get install libusb-dev -y

# ビルド
$ cd teensy_loader_cli
$ make

# 動作確認
$ ./teensy_loader_cli

# パスの通っている所にコピー(例)
$ cp ~/.local/bin ./teensy_loader_cli
# .localフォルダがない場合は、/usr/local/binフォルダなどに移してください

# パスが通っているか(実行できるか)確認
$ which teensy_loader_cli
/home/username/.local/bin/teensy_loader_cli

# 書き込みをするときのコマンド(例)
#  w= パソコンのUSBにTeensyが接続されるまで待つ
#  v= Verbose
$ sudo teensy_loader_cli --mcu=TEENSY41 ~/zephyrproject/zephyr/build/zephyr/zephyr.hex -w -v

3.ビルド・Teensy 4.1 で実行

まずはLEDの点滅のサンプルを、ビルドしてみます。

こちらを参考にします。

$ west build -b teensy41 samples/basic/blinky

[7/7] Linking C executable zephyr/zephyr.elf
Memory region         Used Size  Region Size  %age Used
           FLASH:       32112 B         8 MB      0.38%
             RAM:        4288 B       256 KB      1.64%
            ITCM:          0 GB       128 KB      0.00%
            DTCM:          0 GB       128 KB      0.00%
           OCRAM:          0 GB       256 KB      0.00%
          OCRAM2:          0 GB       512 KB      0.00%
        IDT_LIST:          0 GB        32 KB      0.00%
Generating files from /home/hoge/zephyrproject/zephyr/build/zephyr/zephyr.elf for board: teensy41

ビルドの所要時間は数分程度です。

ビルドが終わると、こちら↓にファームウェアが出来上がっています。

~/zephyrproject/zephyr/build/zephyr/zephyr.hex

# ファイルの構成
$ file ~/zephyrproject/zephyr/build/zephyr/zephyr.hex
zephyr.hex: ASCII text, with CRLF line terminators

このファイルを、Teensy 4.0 に書き込みます。

  1. TeensyをパソコンにUSB接続します
  2. Teensyの電源が入って、マイコンが起動します
  3. Teensyのボードの上にある押しボタン「Program Pushbutton」を押します
  4. micro USBコネクタ傍の、赤色LEDが点灯します
  5. (Virtual BOXで開発の場合)「デバイス」メニュー→「USB」→「Van ... Bootloader」にチェックを入れる。下図を参照

  1. Teensyがファームの書き込み待機モードの状態でUbuntuLinuxに見えるようになるので、下記の通りに書き込みコマンドを実行
$ sudo teensy_loader_cli --mcu=TEENSY41  ~/zephyrproject/zephyr/build/zephyr/zephyr.hex -w -v

Teensy Loader, Command Line, Version 2.3
Read "zephyr.hex": 32112 bytes, 0.4% usage
Waiting for Teensy device...
 (hint: press the reset button)
Found HalfKay Bootloader
Read "zephyr.hex": 32112 bytes, 0.4% usage
Programming................................
Booting

書き込みが終わると、Teensyが再起動して、LEDの点滅が始まります。

次に、ソースコードを修正して、LEDの点滅速度を変えてみます。

こちらにソースファイルがあります。

~/zephyrproject/zephyr/samples/basic/blinky/src/main.c

11行目のSLEEP_TIME_MSの数字を変えてみます。単位はmsです。

# ビルド
$ west build -b teensy41 samples/basic/blinky

# Teensyを書き込みモードにしてから、書き込み
$ sudo teensy_loader_cli --mcu=TEENSY41  ~/zephyrproject/zephyr/build/zephyr/zephyr.hex -w -v

点滅速度が変わったことが確認できます。

4.補足・失敗ケース

チュートリアルを進める中で、引っかかったところの処置の覚え書きです。

コマンドwestが使えない

新しいターミナルを開いて実行しようとしたところ、ツールが見えないことがあります。

$ west build -b teensy41 samples/basic/blinky
コマンド 'west' が見つかりません。もしかして:
  command 'jest' from deb jest (29.6.2~ds1+~cs73.45.28-5)
  command 'test' from deb coreutils (9.4-3ubuntu6.1)
次を試してみてください: sudo apt install <deb name>

Pythonの仮想環境の立ち上げができていないためです。 下記を参考に、仮想環境に切り替えしてください。

$ source ~/zephyrproject/.venv/bin/activate
(.venv) user@host:~/zephyrproject$ 

source ディレクトリが見つからない

$ west build -b teensy41 samples/basic/blinky
ERROR: source directory samples/basic/blinky does not exist
FATAL ERROR: refusing to proceed without --force due to above error

ビルドするときのディレクトリを間違っています。 プロジェクトを作ったディレクトリに移動してください。

$ cd ~/zephyrproject/zephyr

west flashコマンドが使えない(VirtualBOX環境)

westコマンドのマニュアルは下記にあります。

マニュアルの通りflashすると書き込みができません。

$ west flash

-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner teensy
-- runners.teensy: Flashing file: /home/hoge/zephyrproject/zephyr/build/zephyr/zephyr.hex
Unable to open device (hint: try -w option)

ERROR: runners.teensy: Failure 1

Teensyの書き込みがうまく始まりません。 Virtual BOXとUbuntuの組み合わせに特有と思われますが、おそらく下記の現象が起きているのかなと思います。

  1. west flashに紐付けられているコマンドが、Teensyを書き込みに切り替えるモードのオプションがついている
  2. VirtualBOXのUSB設定で、Teensyを「VAN...RowHID」で接続していても、前項の指示で一旦、USBが途切れる
  3. 書き込みに入れずタイムアウトし、コマンドが終了してしまう

westコマンドをいじれば書き込めそうですが、ここはteensy_loader_cliコマンドを直接使って書き込んでください。

$ sudo teensy_loader_cli --mcu=TEENSY41 ~/zephyrproject/zephyr/build/zephyr/zephyr.hex -w -v

Teensy Loader, Command Line, Version 2.3
Read "/home/myasu/zephyrproject/zephyr/build/zephyr/zephyr.hex": 32112 bytes, 0.4% usage
Found HalfKay Bootloader
Programming................................
Booting
# 書き込み完了

teensy_loader_cli をsudoなしで起動した

パーミッションが不足のため書き込みできません。 -vオプションを付けないとこのメッセージすら出てこないので、そのまま実行すると止まったままに見えます。この時は[Ctrl-C]で終了します。

$ teensy_loader_cli --mcu=TEENSY41 ./blink_slow_Teensy41.hex -v -s

Teensy Loader, Command Line, Version 2.3
Read "./blink_slow_Teensy41.hex": 22528 bytes, 0.3% usage
Error opening USB device: No error
Waiting for Teensy device...
 (hint: press the reset button)
Unable to claim interface, check USB permissions
Unable to claim interface, check USB permissions
Unable to claim interface, check USB permissions
・・・

5.まとめ

Teensy4における、組み込みOS Zephyrを試行しました。

参考資料