目次: Zephyr
便利ツールwestとZephyr SDKをインストールしました。やっとOut-of-treeアプリケーション作成の説明ができます。基本的にはZephyr Example Applicationを見たら良いですけど、機能満載すぎてどこ見たら良いかわからんと思うので、最低限必要な要素だけを1つずつ組み立てて紹介します。
最初にwestのマニフェストを作ります。これがないとwest initができません。マニフェストではwestのカスタムコマンドを定義できますが、今は要らないのでzephyr本体だけ記述します。
manifest:
remotes:
- name: zephyrproject-rtos
url-base: https://github.com/zephyrproject-rtos
projects:
- name: zephyr
remote: zephyrproject-rtos
revision: v4.4.0
import:
name-allowlist:
- cmsis_6
- hal_stm32
今回はST-Microのnucleo F446REボードを使いますので、Cortex-M用にcmsis_6とhal_stm32をallowlistに入れました。
$ cd work_dir $ west init -l hello $ west update $ west zephyr-export $ west packages pip --install
チュートリアルに紹介されているコマンドは-m URLオプションでリモートのGitリポジトリを指定する方法でした。これはこれで便利ですが、なんでもかんでもGitHubにアップロードするのも面倒です。今回は-lオプションでローカルディレクトリを指定する方法を使います。
もし間違えてしまったら.westディレクトリを全て消してwest initからやり直せば良いです。zephyr-exportとpackages pip --installは1回やればもうやらなくていいはず。たぶん。
アプリケーションの骨組みを作ります。ディレクトリ名は何でも良いですが、ここではhello/appとします。CMakeLists.txt, Kconfig, prj.confとmain.cを作ります。
cmake_minimum_required(VERSION 3.13.1)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(app LANGUAGES C)
target_sources(app PRIVATE src/main.c)
menu "Zephyr"
source "Kconfig.zephyr"
endmenu
(空っぽでOK)
#include <zephyr/kernel.h>
int main(void)
{
printk("Hello, World!\n");
return 0;
}
作成し終わったらビルドします。
$ cd work_dir/hello
$ west build -b nucleo_f446re app
[158/158] Linking C executable zephyr/zephyr.elf
Memory region Used Size Region Size %age Used
FLASH: 17136 B 512 KB 3.27%
RAM: 4480 B 128 KB 3.42%
BACKUP_SRAM: 0 B 4 KB 0.00%
SRAM0: 0 B 128 KB 0.00%
IDT_LIST: 0 B 32 KB 0.00%
Generating files from /home/ubuntu/work_dir/hello/build/zephyr/zephyr.elf for board: nucleo_f446re/stm32f446xx
もし下記のような既にconfig済だぞ!みたいなエラーで怒られるときは、
ERROR: Build directory /home/ubuntu/work_dir/hello/build targets board nucleo_f446re, but board warp7 was specified. (Clean the directory, use --pristine, or use --build-dir to specify a different one.) FATAL ERROR: refusing to proceed without --force due to above error
ビルド生成物(buildディレクトリ)を全削除してからやり直してください。最小アプリであればビルドにさほど時間はかかりませんし、毎回buildディレクトリを削除してフルビルドするストロングスタイルでもいいと思います。以上がうまくいっていたら、ディレクトリはこうなっているはずです。
work_dir |-- .venv |-- .west |-- hello |-- modules |-- zephyr `-- zephyr-sdk-1.0.1
ビルドできたら実行したいですね。続きはまた今度。
この記事にコメントする
目次: OpenOCD
以前(2023年6月28日の日記参照)紹介したときからビルド方法が変わったかも?と思ったらそんなことはなく同じでした。コードはSourceForgeのGitリポジトリが本家ですが、GitHubにも公式ミラー(OpenOCD GitHub公式ミラー)があります。気のせいかもしれませんが、GitHubの方が速い気がします。
今回はUbuntu 24.04のDockerイメージからビルドしてみます。
$ docker run -it ubuntu:24.04 /bin/bash
# apt-get update
# apt-get install -y git gcc g++ autoconf automake libtool pkg-config make \
libusb-1.0-0-dev libhidapi-dev libgpiod-dev libftdi1-dev
以下、Docker内で実行する場合はrootユーザーなのでプロンプトの先頭は#ですが、一般ユーザーで実行しても一緒なのでプロンプトの先頭は$で表記します。
$ git clone https://git.code.sf.net/p/openocd/code openocd-code $ cd openocd-code $ git submodule init Submodule 'jimtcl' (https://github.com/msteveb/jimtcl.git) registered for path 'jimtcl' Submodule 'src/jtag/drivers/libjaylink' (https://gitlab.zapb.de/libjaylink/libjaylink.git) registered for path 'src/jtag/drivers/libjaylink' $ git submodule update --recursive $ bootstrap $ ./configure --enable-internal-jimtcl --enable-internal-libjaylink OpenOCD configuration summary --------------------------------------------------- ... CoreSight Direct Memory yes (auto) Linux GPIO bitbang through sysfs yes (auto) Remote Bitbang driver yes (auto) SEGGER J-Link Programmer yes (auto) Xilinx XVC PCIe and AXI drives yes (auto) Bus Pirate yes (auto) ...
基本的にOpenOCDのconfigureは依存ライブラリを発見すると関連機能を自動的に有効にしますから、特に何も指定する必要がありません。が、今回は下記を指定します。
ディストリビューション提供のlibjaylinkやjimtclを使っても構わないですが、Ubuntu 20.04のような古めのディストリビューションを使っている場合はバージョンが合わないので内蔵のライブラリを使うと良いです。
OpenOCDはconfigureのオプションを打ち間違っても怒らずにそのまま進んでしまうので、configureの最後に表示されるconfiguration summaryのSEGGER J-Link Programmerがyesになっているか確認しましょう。
$ make -j8
$ ./src/openocd --version
Open On-Chip Debugger 0.12.0+dev-01537-ge6752ecbc (2026-06-02-00:00)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
うまくいったようです。良かった良かった。
この記事にコメントする
目次: Zephyr
前回はPythonとwestの準備をしました。今回はZephyrをビルドするツールzephyr-sdkをインストールします。基本的にはZephyr SDKにあるとおりです。westを使える方はwestで良いですが詰みやすい(※)ので、インストーラを使う方法も知っておいて損はないでしょう。
SDKのバージョンは何でも良い訳ではなくZephyr Version Compatibilityにある通り、SDKのバージョンによってサポートしているZephyrのバージョンが違うのでご注意ください。
今回はSDK 1.0系とZephyr 4.4.0を使いましたが、特に理由はないので必要に応じて適切なバージョンを選んでください。
$ mkdir work_dir $ cd work_dir $ tar xf zephyr-sdk-1.0.1_linux-x86_64_minimal.tar.xz $ cd zephyr-sdk-1.0.1 Install GNU toolchain [y/n]? y Install GNU toolchains for all targets [y/n]? y → この問いにnと答えると、アーキテクチャごとに要るか/要らないかを聞かれるので、 要るものだけにyと答えると時間節約になります。 Install LLVM toolchain [y/n]? y Install host tools [y/n]? y Register Zephyr SDK CMake package [y/n]? y Create symbolic links for old Zephyr bisectability [y/n]? y → 以前はSDK直下にアーキテクチャのディレクトリ(例: x86_64-zephyr-elf)がありましたが、 llvmが導入されてgnu/以下に移動しました。 昔のディレクトリ構造を期待する古いZephyrを使うなら、yと答えてシンボリックリンクを作っておいたほうが良いです。
基本は全部yと答えれば良いはずです。インストール時間を短くしたい人は"Install GNU toolchains for all targets"にnと答えて要るものだけに絞りましょう。
(※)west sdk installでもインストールできますが、westだと何が起きたのか全くわかりません。成功するうちは良いものの、いざ失敗するとどうしようもなくなります。
Zephyr SDKを/optや/usr/localなどに置く場合はZephyrのビルドシステムが勝手にSDKを探してくれます。もし別の場所に置きたい場合はもうひと手間必要です。ホームディレクトリに下記の.zephyrrc設定ファイルを作ります。
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=/home/ubuntu/work_dir/zephyr-sdk-1.0.1
設定を反映させるため、zephyrのディレクトリにあるzephyr-env.shをsourceで取り込みます。
$ cd work_dir/zephyr $ source zephyr-env.sh
先ほど作った設定ファイルの内容が環境変数に反映されていれば成功です。
$ env | grep -i zephyr ZEPHYR_BASE=/home/ubuntu/work_dir/zephyr PWD=/home/ubuntu/work_dir/zephyr ZEPHYR_TOOLCHAIN_VARIANT=zephyr ZEPHYR_SDK_INSTALL_DIR=/home/ubuntu/work_dir/zephyr-sdk-1.0.1 PATH=/home/ubuntu/work_dir/zephyr/scripts:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
注意点は、シェルを終了させると環境変数が消えてしまうことです。したがってシェルを立ち上げる度に、
$ cd work_dir $ source .venv/bin/activate $ cd zephyr $ source zephyr-env.sh
を実行する必要がありまして面倒です……。手間なく設定する方法がありそうなので、ご存じの方は教えてくださいませ。以上がうまくいっていたら、ディレクトリはこうなっているはずです。
work_dir |-- .venv `-- zephyr-sdk-1.0.1
またセットアップだけで話が終わってしまいました。Zephyrは本題に至るまでが遠いです。次こそアプリを作ります。
この記事にコメントする
目次: Zephyr
Zephyrのアプリケーションをビルドするには、Zephyrをビルドできる環境が必要です。最初はPython環境のセットアップを行います。
なんで初手がPythonかというと、ZephyrのツリーをダウンロードしたりビルドするときにwestというPython製のツールを実行するためです。基本的にはGetting Started Guideにあるとおりです。
私の環境はDebian Testingなのでcmake(> 3.20.5), Python(> 3.12), Devicetree compiler(> 1.4.6)のバージョンを満たしています。
$ cmake --version cmake version 3.28.3 $ python3 --version Python 3.12.3 $ dtc --version Version: DTC 1.7.0
Ubuntu 24.04 LTSも問題ありません。もし古めのディストリビューションを使っている場合は上記の3ツールの最小バージョンを満たしているかチェックしてください。
$ 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 $ mkdir work_dir $ cd work_dir $ python3 -m venv .venv $ source .venv/bin/activate $ pip install west
Getting Started Guideには続きがありますが、In-treeアプリケーションをビルドするわけではないので今は実行しなくて良いです。以上がうまくいっていたら、ディレクトリはこうなっているはずです。
work_dir `-- .venv
続きはまた今度。
この記事にコメントする
| < | 2026 | > | ||||
| << | < | 06 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| - | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | - | - | - | - |
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
2026年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: