1.はじめに
リアルタイムOSのひとつであるZephyrの試行として、マイコンボードのTeensy 4.1 を対象に試してみます。
2.ビルド環境の準備
ちょうど1年前に、RaspberryPi PICOでトライする記事を書いています。環境構築の手順が当時と若干変わっているようなので、最初から改めて実行します。
基本的には、上記公式の「Getting Started Guide」に従い、 Windows上のVirtualBOX上にインストールしたUbuntu Linuxに開発環境を作りながら進めて行きます.
本記事では、上記を進める中で細々引っかかった点などの気付きも含め、補完していきます。
(1)実行環境
- Windows版・Virtual Box Ver.7.1.4
- Ubuntu Linux 24.04.03
詳細
$ 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 に書き込みます。
- TeensyをパソコンにUSB接続します
- Teensyの電源が入って、マイコンが起動します
- Teensyのボードの上にある押しボタン「Program Pushbutton」を押します
- micro USBコネクタ傍の、赤色LEDが点灯します
- (Virtual BOXで開発の場合)「デバイス」メニュー→「USB」→「Van ... Bootloader」にチェックを入れる。下図を参照

- 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の組み合わせに特有と思われますが、おそらく下記の現象が起きているのかなと思います。
west flashに紐付けられているコマンドが、Teensyを書き込みに切り替えるモードのオプションがついている- VirtualBOXのUSB設定で、Teensyを「VAN...RowHID」で接続していても、前項の指示で一旦、USBが途切れる
- 書き込みに入れずタイムアウトし、コマンドが終了してしまう
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を試行しました。