2019-01-01から1年間の記事一覧

技術書典6の戦利品を読む①〜OS Girls / 組込みエンジニアの教科書 / Rust on Bare-metal Raspberry Pi / Atmelさんちの消失〜

はじめに 1つ1つは短めです。 少しでも、宣伝、フィードバック、になれば幸いです。 OS Girls booth.pm 8086やIntel SDMの紙媒体が転がっている不思議な部室で繰り広げられる女子高生たちのOS自作物語です。 物語の導入として、PCを使っていて湧いた疑問から…

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

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

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

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

技術書典6買い物メモ

はじめに 自分用メモです。 1日の流れ 10:10分ごろ会場に到着しましたが、すでにかなりの行列でした。 入場券の番号は2111でした。 11:30頃、会場入りしたと思います。 ハードウェア、低レイヤ、セキュリティ、と島を巡りました。 12:15頃には買い物を終えま…

Zephyrのテストフレームワーク調査③〜はじめてのZmock〜

はじめに Zephyrにはテストフレームワーク (Mockもあります!) が用意されています。 テストは大事です。さっさとテストを作れるようにしましょう! docs.zephyrproject.org 前回は、単純なテストを試したので、今回は、Mockを試してみます。 サンプル とに…

Zephyrのテストフレームワーク調査②〜はじめてのZtest〜

はじめに Zephyrにはテストフレームワーク (Mockもあります!) が用意されています。 テストは大事です。さっさとテストを作れるようにしましょう! docs.zephyrproject.org 何事も写経から、ということで、サンプルの写経を行っていきます。 汎用テンプレー…

Zephyrのテストフレームワーク調査①〜サンプル実験〜

はじめに Zephyrにはテストフレームワーク (Mockもあります!) が用意されています。 テストは大事です。さっさとテストを作れるようにしましょう! docs.zephyrproject.org Ztest ZephyrのテストフレームワークZtestは、インテグレーションテストにも、特定…

Zephyr×Rustのインテグレーションにチャレンジ!⑫~Driver APIリファクタリングの旅1~

はじめに ZephyrとRustのインテグレーションに挑戦しています。 Rustで最低限動作するZephyrのUART Driverを作りました。 力技で無理矢理実装したところも多いです。負債を返済するときが来ました。 デバイス登録 まずは、デバイスおよびデバイスドライバをZ…

Zephyr×Rustのインテグレーションにチャレンジ!⑪~UART Driver 受信編~

はじめに ZephyrとRustのインテグレーションに挑戦しています。 RustでデバイスDriverを作っていきます。 まずは、QEMUのUARTをターゲットにします。 QEMUのUARTデバイスはガバガバで、初期化を行わなくてもデータ送受信ができるので、敷居が低いです。 UART…

Zephyr×Rustのインテグレーションにチャレンジ!⑩~UART Driver 送信編~

はじめに ZephyrとRustのインテグレーションに挑戦しています。 RustでデバイスDriverを作っていきます。 まずは、QEMUのUARTをターゲットにします。 QEMUのUARTデバイスはガバガバで、初期化を行わなくてもデータ送受信ができるので、敷居が低いです。 やる…

Zephyr×Rustのインテグレーションにチャレンジ!⑨~UART Driver 準備編~

はじめに ZephyrとRustのインテグレーションに挑戦しています。 前回は、RustでDriverの初期化関数を書いて、動作させることに成功しました。 tomo-wait-for-it-yuki.hatenablog.com 今回から、もう少しちゃんとデバイスDriverを作っていきます。 まずは、QE…

Zephyrのdriverを作ってみよう④~device tree~

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

Zephyr×Rustのインテグレーションにチャレンジ!⑧~続システムコール調査~

はじめに ZephyrとRustのインテグレーションに挑戦しています。 これまでで、アプリケーションをRustで書いてきました。 ここからは、Driverを書く方法を調査していきます。 前回までのあらすじ アプリケーションに公開するDriver APIを作るため、システムコ…

Zephyr×Rustのインテグレーションにチャレンジ!⑦~システムコール調査~

はじめに ZephyrとRustのインテグレーションに挑戦しています。 これまでで、アプリケーションをRustで書いてきました。 ここからは、Driverを書く方法を調査していきます。 前回までのあらすじ Rustで書いたDriverの初期化関数から、文字が出力できました。…

ARM TrustZone CryptoCell 310という名称の疑問

はじめに nRF52840は、Cortex-M4Fが搭載されたSoCです。 また、CryptoCell 310という暗号化アクセラレータが搭載されています。 Nordic Documentation LibraryのCryptoCellのページを見ると、「ARM TrustZone CryptoCell 310」と書かれています。 www.nordic…

Zephyr×Rustのインテグレーションにチャレンジ!⑥~RustでDriverを書く!~

はじめに ZephyrとRustのインテグレーションに挑戦しています。 これまでで、アプリケーションをRustで書いてきました。 ここからは、Driverを書く方法を調査していきます。 前回までのあらすじ RustでZephyrのDriverを書くためには、INIT_DEVICEマクロ相当…

Zephyr×Rustのインテグレーションにチャレンジ!⑤~続RustでDriverを書くための調査~

はじめに ZephyrとRustのインテグレーションに挑戦しています。 これまでで、アプリケーションをRustで書いてきました。 ここからは、Driverを書く方法を調査していきます。 DEVICE_INITマクロ tomo-wait-for-it-yuki.hatenablog.com 前回記事で、DEVICE_INI…

Zephyr×Rustのインテグレーションにチャレンジ!④~RustでDriverを書くための調査~

はじめに ZephyrとRustのインテグレーションに挑戦しています。 tomo-wait-for-it-yuki.hatenablog.com これまでで、アプリケーションをRustで書いてきました。 ここからは、Driverを書く方法を調査していきます。 最低限必要なことは何か? まずは、ここか…

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のIRQ_CONNECTメモ

はじめに Zephyrのdriverを書いています。IRQハンドラ登録の処理を調査したので、メモを残しておきます。 IRQ_CONNECT Zephyrで割り込みハンドラを登録する場合、IRQ_CONNECTというマクロを使用します。 まず、Zephyrのドキュメントに掲載されている利用例で…

Zephyrで実行時間を計測する

はじめに Zephyrでアプリケーションを開発しており、ベンチマークが取りたくなりました。 driverが提供されているnRF52840のRTC (Real Time Counter) を使って、プログラムの実行時間を計測してみます。 最終的には、Zephyr kernelが提供しているKernel Cloc…

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

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

nRF52840 DKで遊ぼう⑦~バイナリ肥大化の謎を追う~

はじめに Zephyrのアプリケーションを作成しています。 すると、バイナリが肥大化する現象が発生したため、原因を調査しました。 結論から言うと、ライブラリを作る際、コンパイラにPIC (Position Independent Code) の無効化を指定し忘れていたことが原因で…

CMakeのExternalProjectで外部プロジェクトのビルドシステムに環境変数を渡す

はじめに CMake無限にわからん。 小ネタですが、調査したことは、まとめていきたいと思います。 ExternalProject_Add CMakeで外部プロジェクトを取り込むには、ExternalProjectを使います。 cmake.org まずは、ExternalProjectライブラリをincludeします。 #…

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

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

Zephyrのビルドプロセスを追え!

はじめに 色々こねこねするために、Zephyrのビルドプロセスを解析します。 最小構成のZephyrがどのようにビルドされるか、を見ていきます。 ビルドログ |> zephyr/samples/hello_world おなじみのHello WorldプログラムをQEMU Cortex-M3で動かす場合を対象と…

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 CryptoCell 310の使い方メモ①

はじめに 以前、CryptoCell 310を使ったサンプルアプリケーションを解析しました。 tomo-wait-for-it-yuki.hatenablog.com もう少し真面目に使い方を知る必要があるので、nRF5 SDKのAPIリファレンスを読んでいきます。 nRF5 SDK CryptoCell APIリファレンス…