SlideShare a Scribd company logo
1 of 16
いまどきの組込みOSの
ZephyrRTOSと
OpenThreadを
Arduino環境で遊んでみる
あすもの研 5月度 MEETUP
富士通コンピューターテクノロジーズ 常田 裕士
最近の組み込みOS事情
qFreeRTOS
• Anazonが買収(2017年)
ThreadX RTOS
• Microsoftが買収(2019年)
Zephyr-RTOS
q元々WindRiver社のプロジェクトだったが、オープンソース化
q現在はLinux Foundationが開発を進めている
• Nordic Semiconductorが積極的にコミット
q4月に最新版のv1.14.0がリリース
Zephyr-RTOSの特徴
q全体的にLinux風味の組み込みOS
qprintk()など、Linuxのカーネル見たことある人なら、
ナントナクソレッポイのが見える。
qいろんなハードに対応するため、Linuxで実績のあるmenuconfigを移植している
現在150種類以上のボードに対応
q FreeRTOSと比べると、「大きなOS」
q FreeRTOSは敢えてタスクの実行関係だけに絞っていて、他はオプション
q ZephyrRTOSはドライバから何から、「色々入っている」
menuconfig, DeviceTree導入の帰結で、要らないものを外してコンパイルできるから。
OpenThread
Google傘下のNestが作ったIoT向け通信規格のThreadのオープンソース版
IEEE802.15.4, 6LoWPAN, COAPなどのオープン標準の上に作られている。
Threadの仕様はThread Groupで作っている。
• 仕様書は登録すれば無料で読める。ただし情報公開に制限あり。
• 認証には金がかかる(Bluetoothなんかと同じ)
各種の組み込みOSに埋め込んで使える。
• 現在ZephyrRTOSとFreeRTOSに対応が入っている。
Google Next Hub Maxに搭載!
2019年夏、アメリカ、イギリス、オーストラリアで発売予定
ZephyrRTOSをArduino環境から使う
https://github.com/soburi/arduino-on-zephyr
実体としては、ZephyrRTOS組み込んだArduino互換実装
Arduinoからコンパイルできるようにするために、あの手この手で動かしている。
main()が動けばいいじゃない!
// cores/arduino/main.cpp
int main(void)
{
init();
initVariant();
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
Arduinoのメインの処理はこれだけ。
Init(), initVariant()は初期化処理。必要なければ何もし
なくてもよい。
serialEventRunも設定しなければ何もしない。
setup(), loop()は自分で書いている。
 実は何もしなくてよい。
Lチカ
 pinMode(), digitalWrite(), delay()は作る必要がある
 だいたい似たような関数がZephyrRTOSにある
• delay()
 ZephyrRTOSではk_sleep()が全く同じ機能。
• digitalWrite()
 gpio_pin_write()が同じ機能。ピンの番号だけ変換。
• pinMode()
• gpio_pin_configure()が同じ機能
 attachIntterupt()もpinの設定を変えるけど?
 Arduinoだと、attachInterrupt()はレジスタ見てピン状態を確認してる
 ZephyrRTOSだと、ピンの状態調べられない?!
 いい感じに実装する
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(1000);
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
}
コンパイルする
最近のArduino(1.8以降)はarduino-builderのコマンドを経由
して、コンパイラを動かしている
Arduinoのhardware以下のフォルダにあるplatform.txtを読
み取って、コンパイルのコマンドを決めている。
Arduinoの.inoファイルはコンパイル時にC++のソースに変換
される。
ArduinoIDE
arduino-builder.exe
gcc
ZephyrRTOSのコンパイル
ZephyrRTOSではCMakeとninjaでビルドシステムが作られて
いる。
コンパイラの設定はZephyrRTOS側で持っている
CMake
ninja
gcc
黒魔術
arduino-builderからコンパイラが起動されるので、platform.txtを書き
換えて、コンパイラの部分を乗っ取る
コンパイルのコマンドを引っ掻き集めて、CMakeのファイルを作る。
あとはZephyrRTOSのビルドの仕組みでビルドする。
arduino-builderのpreprocessの処理が酷い
使われているライブラリを探す処理をpreprocessでやっている
インストールされているライブラリのディレクトリをひとつずつ
include対象にして、総当たりでコンパイルエラーが発生しない
設定を探す。
ArduinoIDE
arduion-builder.exe
独自コマンド
CMake
Ninja
gcc
独自ライブラリを作る
今回はZephyrRTOSに組み込まれているOpenThreadを使いたいので、ライブラリを作成した
基本的には、「関数を呼ぶだけ」
https://www.arduino.cc/en/Reference/APIStyleGuide
• Arduinoのライブラリの作成ガイド
• Don’t assume knowledge of pointers.
• ArduinoのAPI設計の根幹
• Computer Science的な原則と敵対することになる。
• Abstract禁止!
• これを守ると、ライブラリの使用感がArduinoっぽくなる。
通信
自作のOpenThread APIを使って、RaspberryPiと UDP echoで単純な通信ができた。
通信自体は従来のArduinoのUDPライブラリと同じ。ノウハウがそのまま使える。
NRF52840
(Arduino化)
RaspberryPI
(Linux)
OpenThread
モジュール
echo
echo
nRF52840
国内で入手できるモジュールもようやく増えてきた
https://www.sparkfun.com/products/15025 千石電商で売ってる
https://www.switch-science.com/catalog/5400/ SwitchScienceで売ってる
https://makezine.com/2019/05/17/arduino-unveils-new-nano-family-of-boards/
5/17に発表された Arduino Nano33 にも搭載予定
まとめ
ZephyrRTOS/OpenThreadはGoogle Nest Hub Maxが流行ると、面白くなるかも。
arduinoのAPIの設計はクセがある。
arduino-builderの闇は深い。
nRF52840のボードが出てきたので、OpenThreadで遊ぶ環境が作りやすくなった。
OpenThreadを触ってるやつがいない。

More Related Content

What's hot

第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介
ksk_ha
 

What's hot (20)

BuildKitの概要と最近の機能
BuildKitの概要と最近の機能BuildKitの概要と最近の機能
BuildKitの概要と最近の機能
 
閉域網接続の技術入門
閉域網接続の技術入門閉域網接続の技術入門
閉域網接続の技術入門
 
Rust で RTOS を考える
Rust で RTOS を考えるRust で RTOS を考える
Rust で RTOS を考える
 
Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-Hadoop -NameNode HAの仕組み-
Hadoop -NameNode HAの仕組み-
 
CXL_説明_公開用.pdf
CXL_説明_公開用.pdfCXL_説明_公開用.pdf
CXL_説明_公開用.pdf
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとはコンテナを止めるな!  PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
コンテナを止めるな! PacemakerによるコンテナHAクラスタリングとKubernetesとの違いとは
 
P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介P4によるデータプレーンプログラミングとユースケースのご紹介
P4によるデータプレーンプログラミングとユースケースのご紹介
 
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデートOracle Cloud Infrastructure:2023年2月度サービス・アップデート
Oracle Cloud Infrastructure:2023年2月度サービス・アップデート
 
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介
 
ガチで聞く!ヤフーのOpenStackプライベート・クラウドの実態とは
ガチで聞く!ヤフーのOpenStackプライベート・クラウドの実態とはガチで聞く!ヤフーのOpenStackプライベート・クラウドの実態とは
ガチで聞く!ヤフーのOpenStackプライベート・クラウドの実態とは
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
CyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallengeCyberAgentのインフラについて メディア事業編 #catechchallenge
CyberAgentのインフラについて メディア事業編 #catechchallenge
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 

Similar to いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる

Similar to いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる (20)

Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux
Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on LinuxAndroid タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux
Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux
 
Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2
Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2
Android タブレットにLinuxを入れて色々と遊んでみよう 続編その2 Hacking of Android Tablet on Linux 2
 
Qt creatorでremote_debug
Qt creatorでremote_debugQt creatorでremote_debug
Qt creatorでremote_debug
 
Open Source Conference Kansai@Kyoto 2012 presentaiton about Tizen and Tizen M...
Open Source Conference Kansai@Kyoto 2012 presentaiton about Tizen and Tizen M...Open Source Conference Kansai@Kyoto 2012 presentaiton about Tizen and Tizen M...
Open Source Conference Kansai@Kyoto 2012 presentaiton about Tizen and Tizen M...
 
Introduction about Tizen on Open Seminor Kagawa 2012
Introduction about Tizen on Open Seminor Kagawa 2012Introduction about Tizen on Open Seminor Kagawa 2012
Introduction about Tizen on Open Seminor Kagawa 2012
 
Gentoo Linuxの紹介
Gentoo Linuxの紹介Gentoo Linuxの紹介
Gentoo Linuxの紹介
 
20230128.pptx
20230128.pptx20230128.pptx
20230128.pptx
 
ゼロからはじめるTerraformでのDevOps2021
ゼロからはじめるTerraformでのDevOps2021ゼロからはじめるTerraformでのDevOps2021
ゼロからはじめるTerraformでのDevOps2021
 
Unbound/NSD最新情報(OSC 2014 Tokyo/Spring)
Unbound/NSD最新情報(OSC 2014 Tokyo/Spring)Unbound/NSD最新情報(OSC 2014 Tokyo/Spring)
Unbound/NSD最新情報(OSC 2014 Tokyo/Spring)
 
Android タブレット、スマートウォッチにLinuxを入れて色々と遊んでみよう Hacking of Android Tablet and Smart...
Android タブレット、スマートウォッチにLinuxを入れて色々と遊んでみよう Hacking of Android Tablet and Smart...Android タブレット、スマートウォッチにLinuxを入れて色々と遊んでみよう Hacking of Android Tablet and Smart...
Android タブレット、スマートウォッチにLinuxを入れて色々と遊んでみよう Hacking of Android Tablet and Smart...
 
CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討CentOS Linux 8 の EOL と対応策の検討
CentOS Linux 8 の EOL と対応策の検討
 
Tizen & Crosswalk
Tizen & CrosswalkTizen & Crosswalk
Tizen & Crosswalk
 
AzureでopenSUSE Leap42.1が使えるよ!
AzureでopenSUSE Leap42.1が使えるよ!AzureでopenSUSE Leap42.1が使えるよ!
AzureでopenSUSE Leap42.1が使えるよ!
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
Jetson Xavier NX クラウドネイティブをエッジに
Jetson Xavier NX クラウドネイティブをエッジにJetson Xavier NX クラウドネイティブをエッジに
Jetson Xavier NX クラウドネイティブをエッジに
 
Hacking with x86 Windows Tablet and mobile devices on openSUSE #opensuseasia17
 Hacking with x86 Windows Tablet and mobile devices on openSUSE #opensuseasia17 Hacking with x86 Windows Tablet and mobile devices on openSUSE #opensuseasia17
Hacking with x86 Windows Tablet and mobile devices on openSUSE #opensuseasia17
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
ドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyoto
ドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyotoドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyoto
ドライバハッキング。UMPC、Windowsタブレット にLinux、*BSDを入れて遊ぼう  2017年度京都版 #osckyoto
 
Getting Started .NET Core
Getting Started .NET CoreGetting Started .NET Core
Getting Started .NET Core
 
2006-04-22 CLR/H #14 .NET and open source
2006-04-22 CLR/H #14 .NET and open source2006-04-22 CLR/H #14 .NET and open source
2006-04-22 CLR/H #14 .NET and open source
 

More from 裕士 常田

DVB recording command on gstreamer.
DVB recording command on gstreamer.DVB recording command on gstreamer.
DVB recording command on gstreamer.
裕士 常田
 

More from 裕士 常田 (11)

WeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加するWeblateでOSSの翻訳に参加する
WeblateでOSSの翻訳に参加する
 
Node native ext
Node native extNode native ext
Node native ext
 
Arduino library の作り方 2020
Arduino library の作り方 2020Arduino library の作り方 2020
Arduino library の作り方 2020
 
BlackMagic ProbeでARMをデバッグする
BlackMagic ProbeでARMをデバッグするBlackMagic ProbeでARMをデバッグする
BlackMagic ProbeでARMをデバッグする
 
HKマスクを作ってみた
HKマスクを作ってみたHKマスクを作ってみた
HKマスクを作ってみた
 
Openthread / nrf52811 調査(仮)
Openthread / nrf52811 調査(仮)Openthread / nrf52811 調査(仮)
Openthread / nrf52811 調査(仮)
 
Arduino compatible layer (with 6LoWPAN) on Contiki
Arduino compatible layer (with 6LoWPAN) on ContikiArduino compatible layer (with 6LoWPAN) on Contiki
Arduino compatible layer (with 6LoWPAN) on Contiki
 
KiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアルKiCadで雑に基板を作る チュートリアル
KiCadで雑に基板を作る チュートリアル
 
Mft2014 defeated
Mft2014 defeatedMft2014 defeated
Mft2014 defeated
 
DVB recording command on gstreamer.
DVB recording command on gstreamer.DVB recording command on gstreamer.
DVB recording command on gstreamer.
 
Traveltoitalia
TraveltoitaliaTraveltoitalia
Traveltoitalia
 

いまどきの組込みOSの​ ZephyrRTOSと​ OpenThreadを​ Arduino環境で遊んでみる