embedded

VxWorksの脆弱性「URGENT11」のテクニカルホワイトペーパーを読む①

はじめに 7月末にVxWorksの脆弱性発見が公開されました。 armis.com 日本語関連記事 VxWorksは組込み機器では非常に有名なRTOSで、20億以上のデバイスに搭載されています。 今回の脆弱性URGENT11で影響を受けるデバイスは2億個以上であると報告されています…

7/27(土) 技書博で組込み/ベアメタルRustクックブックを販売します!

はじめに 宣伝です! 来週開催される技術書同人誌博覧会にて、組込み/ベアメタルRustクックブックを販売します。 A-9 AQUAXISさんのブースにご一緒させて頂きます。 ブース主の石原ひでみさんはFPGAの薄い本とMarkdown組版の本を、みつきんさんはNuttxの本を…

Rust × 組込みで前代未聞のInterfaceオフ会レポート

はじめに 昨日、2019年6月17日、巣鴨のCQ出版社様セミナールームにおいて記念すべき組込みRustのオフ会が開催されました! 今回のオフ会は、雑誌掲載前にオフ会を開催する、という前代未聞のオフ会、とのことでした。 inteface-meet-up.connpass.com 非常に…

WebAssembly Micro RuntimeでRustアプリをマイコンで動かす!

はじめに 前回、もう一歩のところだったのですが、RAMが2MB搭載されていないと動かない状態でした。 tomo-wait-for-it-yuki.hatenablog.com 私はそんなマイコン持っていないため、今回は、256KB RAMが搭載されているマイコン (これも高性能品ですが) 上でRus…

WebAssembly Micro RuntimeでRustのアプリを動かす!

はじめに WebAssembly Micro Runtimeでは、64KB程度のRAMが搭載されたマイコンであれば、wasmアプリケーションを動かすことができます。 github.com Rustはwasmをターゲットにビルドできます。 後は、わかるね? アプリケーションの作り方 WebAssembly Micro…

WebAssembly Micro Runtimeお試し②

はじめに 少し前に、組込みで使えるWebAssembly Micro Runtimeが公開されました。 また、いつの間にかSTMでのデモアプリが公開されています。 github.com リファレンスが普段触っているZephyrなので、少し動かしてみます。 前回のおさらい 試しに、qemu_cort…

WebAssembly Micro Runtimeお試し①

はじめに 少し前に、組込みで使えるWebAssembly Micro Runtimeが公開されました。 また、いつの間にかSTMでのデモアプリが公開されています。 github.com リファレンスが普段触っているZephyrなので、少し動かしてみます。 準備 ライブラリをインストールし…

ZephyrのI2C scannerサンプルを動かしてみる

はじめに I2Cデバイスを使いたいので、手始めにZephyrのI2C scannerサンプルを動かしてみます。 ターゲットSoCはnRF52840です。 サンプルプロジェクトを確認 |> zephyr/samples/drivers/i2c_scanner nRF52x系は、overlayする設定ファイルが用意されています…

ZephyrでPWM

はじめに ZephyrでPWMしてみます。 ターゲットSoCはnRF52840です。 Zephyrプロジェクト設定 Zephyr PWM driver CONFIG_PWMを有効にします。 nRF52840のPWM0を利用するので、CONFIG_PWM_0を有効にします。 |> prj.conf # PWM CONFIG_PWM=y CONFIG_PWM_0=y dev…

westを使ったZephyrプロジェクトの管理

はじめに Zephyr 1.14からwestというメタツールが公式なツールになりました。 面倒ですがさらっと使っておきましょう。 ソースコードやドキュメントは、できるだけ1.14を参照するようにします。 Zephyr 1.14はLTSという位置づけで、2年間はセキュリティアッ…

ZephyrでRTTコンソール

はじめに 久々のZephyrです。 JLinkには、JTAG/SWD経由でシリアル入出力をする機能があります。 UARTを使ったコンソールも良いのですが、物理配線が増えたり、簡単にUARTを引き出せない場合、RTTが便利です。 Zephyrコンフィグ NordicのZephyrフォークを参考…

Rust製組込みOSのTockを触ってみる②

はじめに 諸事情によりまとまった時間を取るのが難しいので、入門系やります。 今回は、Rust製のRTOSであるTockを触ってみます。 githubのTock organizationはこちらです。 前回はC言語で書かれたサンプルアプリケーションを動かしたので、今回はRustで書か…

Rust製組込みOSのTockを触ってみる①

はじめに 諸事情によりまとまった時間を取るのが難しいので、入門系やります。 今回は、Rust製のRTOSであるTockを触ってみます。 githubのTock organizationはこちらです。 Getting started Getting startedを参考に、何か動かしてみます。 Requirements nig…

connectFreeでできる!低レイヤ好きのためのIoT自作入門〜ハードウェア、プログラミング言語、OS、通信、全部作ろう!〜

はじめに 大体宣伝です。 でも、面白いと思うので見て行って下さい。 私事ですが、次男が産まれました。 さらに私事ですが、とうとうconnectFreeでも長男にあたるボードNET BOYが産声をあげました。 NETBOY 低レイヤから全て自作するIoTへの挑戦が始まります…

RustのRTFM (Real Time For the Masses)を試してみる⑤

はじめに 組込みRust界の伝説japaric氏が実装しているReal Time For the Masses (RTFM) framework for ARM Cortex-M microcontrollersを試してみます。 github.com サンプルコードをマクロ展開して心が折れそうです。 とりあえず、当面サンプルコードの表面…

RustのRTFM (Real Time For the Masses)を試してみる④

はじめに 組込みRust界の伝説japaric氏が実装しているReal Time For the Masses (RTFM) framework for ARM Cortex-M microcontrollersを試してみます。 github.com 面白いので、引き続き触っていきます。 リソース管理続き RTFMのstatic変数は、通常のstatic…

RustのRTFM (Real Time For the Masses)を試してみる③

はじめに 組込みRust界の伝説japaric氏が実装しているReal Time For the Masses (RTFM) framework for ARM Cortex-M microcontrollersを試してみます。 github.com 軽い気持ちで触り始めたのですが、読み進めるうちに、手続きマクロでゴリゴリ静的解析してい…

RustのRTFM (Real Time For the Masses)を試してみる②

はじめに 組込みRust界の伝説japaric氏が実装しているReal Time For the Masses (RTFM) framework for ARM Cortex-M microcontrollersを試してみます。 github.com 前回変なところで切ってしまったため、今回は軽めです。 idleタスク idleタスクは、initタス…

RustのRTFM (Real Time For the Masses)を試してみる①

はじめに 組込みRust界の伝説japaric氏が実装しているReal Time For the Masses (RTFM) framework for ARM Cortex-M microcontrollersを試してみます。 github.com RTFM自体は、Real-time for the masses, step 1: Programming API and static priority SRP …

組込みRustドキュメントを和訳したお話

はじめに 組込みRustの(勝手に主要と思っている)ドキュメント3つの和訳が、一通り完了しました。 今後は、upstream変更に対するメンテンナンスをやっていきます。 節目なので、整理しておこうと思います。 和訳も、大本になる文章があるからできるわけで、…

YoctoでRust①〜meta-rustのhello-worldビルド〜

はじめに 組込みLinuxでRustする場合、普通にホストマシンで開発して、普通にホストマシンのRustコンパイラでクロスビルドしたものをターゲットに持って行っています。 これで事足りているのですが、前々から興味があったため、YoctoでRustアプリケーション…

インラインアセンブリだけの関数の最適化でハマった

はじめに Cortex-Mのコンテキストスイッチを書いています。 引数有りで、インラインアセンブリだけを実行する関数を作り、threadのディスパッチを書いていました。 このような場合、適切なconstraintを書いてインラインアセンブリを呼び出さないと、リリース…

組込みRustのイベントやります 2019/6/17

はじめに inteface-meet-up.connpass.com CQ出版様の雑誌インタフェース主催で、組込みRustのイベントを開催することになりました。 CQ出版様、ありがとうございます。 参加枠埋まってますが、繰り上がりや、多くの方が参加登録して頂ければまた別の機会を設…

組込みでCからRustにステップアップする順序

はじめに 先日、twitterで以下のアンケートを行ったところ、予想以上に多くの方にご回答頂けたため、まとめと私の考えを書きます。 組込みでCからRustにステップアップするための順序。C → ?? → Rustさぁ??に入るのは?— 錆ありはぐれベアメタル (@LDScell) …

Discovery翻訳の宣伝

はじめに Discoveryを翻訳したので、マイコンでRustを動かす体験をお楽しみください。 tomoyuki-nakabayashi.github.io Discoveryでは、STM32F3DISCOVERY開発ボードを使って、次のようなアプリケーションを実装します。 LEDルーレット LEDコンパス シリアル…

Zephyrのdriverを作ってみよう②~単純なシリアル送信~

はじめに Zephyrのdriverを作る方法を学びます。 まずは、qemu_cortex_m3をターゲットとした場合の、UART device driverを写経します。 |> zephyr/drivers/serial/uart_stellaris.c 全体で700行くらいなので、全てを単純に写経する、というよりポイントを押…

Zephyrのdriverを作ってみよう①~写経開始~

はじめに Zephyrのdriverを作る方法を学びます。 まずは、qemu_cortex_m3をターゲットとした場合の、UART device driverを写経します。 |> zephyr/drivers/serial/uart_stellaris.c 全体で700行くらいなので、全てを単純に写経する、というよりポイントを押…

nRF52840 DKで遊ぼう⑥~enc28j60でエコーサーバ~

はじめに 先日、IoTSecJPTokyo Version 5のデモ用に、nRF52840 USB Dongle+enc28j60 Ether MAC+Zephyrでエコーサーバを構築しました。 同様のものをnRF52840 DKで動くように移植を行っていきます。 USB Dongleから、DKへの移植は、GPIOピンの設定変更だけ…

Zephyr×Rustのインテグレーションにチャレンジ!③~bindgen~

はじめに ZephyrのアプリケーションをRustで実装するインテグレーションに挑戦しています。 tomo-wait-for-it-yuki.hatenablog.com これまでに、Rustをライブラリとしてインテグレーションすることに成功しました。 ただし、Rustから呼ぶC言語のFFIは、手動…

nRF52840 DKで遊ぼう③~Bluetooth Mesh Serial example~

はじめに nRF5 SDK for MeshのSerial exampleを試します。 |> nRF5-SDK-for-Mesh/examples/serial www.nordicsemi.com PyACI 本アプリケーションをテストするためには、Pythonのインタラクティブアプリケーションが必要です。 下記の手順に沿って、インスト…