Zephyr×Rustのインテグレーションにチャレンジ!②~アプリとして組み込みたかった~

はじめに Rustプロジェクトを直接、Zephyrアプリケーションとしてインテグレーションしたいです。 が、私には無理でした! app boilerplate Zephyrのアプリケーション作成では、boilerplateの利用がおすすめされています。 |> zephyr/cmake/app/boilerplate.…

Zephyr×Rustのインテグレーションにチャレンジ!①~ライブラリとして組み込む~

はじめに Zephyrで本格的にRustアプリケーションを作る環境を構築していきます。 ソースコードはこちらにあります。 github.com tomo-wait-for-it-yuki.hatenablog.com 前回は、手動でかつ強引にRustを組み込んだので、今回はZephyrのビルドプロセス内で、Ru…

RustはHeartbleedを防げたのか?

はじめに ja.wikipedia.org 2014年に、「OpenSSL」にHeartbleedという脆弱性が見つかり、話題になっていました。 この脆弱性は、典型的なメモリ操作に関するバグであったため、Rustであれば発生しなかったのではないか?という観点で調べていると、過去に同…

「The Challenge of Using C in Safety-Critical Applications」を雑に読む

The Challenge of Using C in Safety-Critical Applicationsというwhite paperを雑に読んでみます。 このwhite paperは、C言語でsafety-criticalなシステムを作ることが、いかに難しいかを述べています。 white paper内で参照しているコードは、下記のレポジ…

nRF5 SDK for Meshで学ぶBluetooth mesh②~light_switch example概要~

www.nordicsemi.com 実装を見てみないと、どういうものなのかよくわからないので、NordicのSDKを解析しながら、どういうものか理解していきます。 今回は、SDKの大枠とlight_switch exampleの概要を理解していきます。 README なにはともあれ、READMEです。 …

nRF5 SDK for Meshで学ぶBluetooth mesh①~プロトコル概要~

www.nordicsemi.com 実装を見てみないと、どういうものなのかよくわからないので、NordicのSDKを解析しながら、どういうものか理解していきます。 はじめに Bluetooth meshは、2017年夏に採用された新しい規格です。Bluetooth Low Energyの技術を応用して、…

Zephyrのecho_serverサンプルを理解する

echo_server github.com Zephyrのecho_serverサンプルを解析し、Zephyrでのネットワークアプリケーション作成方法の理解を目指します。 一通り見てみると、割と普通のTCPサーバアプリケーションでした。 configs 重要そうなkernel configを確認します。 |> p…

組込みRust考察②~効率良く安全な組込み開発をしたい~

はじめに tomo-wait-for-it-yuki.hatenablog.com 前回の続きです。 今回は、Rustを使うことによる生産性について、考察します。 言語仕様、エコシステム、コミュニティによる生産性向上 生産性は可視化が難しいです。 そのため、本トピックではわかりやすく…

Rustで普通にプログラミングするだけでMISRA-Cのルールを90%満足できる

はじめに 2019/2/10追記 記事を書いてから気づいたのですが、正確には、Rustのアトリビュートをいくつか設定すれば、MISRA-Cのルールを90%満足できるでした。 私はMISRA-Cのコーディング規約でプログラミングしたことがないため、内容に誤りがありかもしれま…

nRF52840 CryptoCell 310を使った乱数生成サンプルコードの解析

CryptoCell 310ソフトウェアスタックを理解する目的で、コードが簡単そうだった乱数生成サンプルを解析します。 CryptoCell 310 cc310ブロック図 nRF52840のProduct Specificationによると、CryptoCell 310は、複数の暗号化アクセラレータを内包するペリフ…

組込みRust考察①~効率良く安全な組込み開発をしたい~

Rustの本質は、プログラムを理解する苦労を、未来から現在に移すことにある。 プログラミングRust p.120より はじめに www.rust-lang.org Rustは、とても良い言語です。 Rustを使う理由は、性能、信頼性、生産性を高めたいから、に尽きると考えています。 Ru…

RustでZephyrのアプリケーションを書く

github.com 最近、ZephyrというRTOSで遊んでいます。 新しい環境が手に入ると、Rustと結びつけたくなりますよね! ということで、ZephyrのアプリケーションをRustで書いてみます。 ズルしましたけど、hello worldは動きました。 知見として、no_stdだけど完…

Zephyrのリンカスクリプトを修正する

www.mouser.jp nRF52840 Dongle (pca10059)というNordicのボードに、Zephyrを乗せて遊んでいます。 Zephyrのリンカスクリプトがおかしいらしく、うまく動作しなかったのですが、修正方法まで含めて動かす方法が判明したので、まとめます。 Zephyr blinky sam…

The Embedded Rust Book翻訳の気づきメモ③~CI環境構築~

The Embedded Rust Bookを翻訳しています。下記から見ることができます。 Getting startedのQEMUまで、翻訳完了しています。 導入 - The Embedded Rust Book お仕事でもRustをやりたいな、と考えて、組込みでRustを広めるために翻訳を行っています。 翻訳を…

The Embedded Rust Book翻訳の気づきメモ②

Getting started/QEMUページの翻訳が完了しました。下記から見ることができます。 導入 - The Embedded Rust Book お仕事でもRustをやりたいな、と考えて、組込みでRustを広めるために翻訳を行っています。 翻訳を進める中で、技術的にも英語的にも、学びが…

エミュレータ開発日記 in Rust~ELFローダ編①~

ここ半年ほど、RustでCPUエミュレータを書いています。 今更ですが、これも記録に残していこうと思います。 誰かの役に立つかもしれないですし。 今は、ELFローダを作っています。 これまでは、objcopyコマンドでraw binaryを作成し、特定アドレスにマッピン…

The Embedded Rust Book翻訳の気づきメモ①

Introduction - The Embedded Rust Book お仕事でもRustをやりたいな、と考えて、組込みでRustを広めるために翻訳を行っています。 翻訳を進める中で、技術的にも英語的にも、学びがあるので、それを綴っていきます。 github.com 一応今の状況としては、Intr…

明けましておめでとうございます 2019 edition

明けましておめでとうございます。 新年新たな気持ちで、今年の目標を書いておこうと思います。 2018年の振り返り 前半は、テスト駆動開発やC++、チーム全体のレベルを上げる活動に力を入れていました。 反面、後半は、低レイヤへの情熱を取り戻し、自分だけ…

RISC-VのFENCE.I命令を調べる

rv32i基本命令をざっと眺めていて、この命令だけなんだろう?と思ったので調査します。 RISC-V specification v2.2の2.7 Memory Modelセクションに記載があります。 hardware thread間でのメモリ操作命令実行順序を保証するための明示的な命令がFENCE命令、…

2018年に読んだ本をまとめよう

これ、毎年やらないと忘れちゃうので備忘録がてら。 大雑把なジャンル別にまとめます。 書評を書く気力が今はないので、羅列だけです。 システムプログラミング、低レイヤ技術 今年の後半あたりから、システムプログラミングや低レイヤ技術に注力しはじめま…

2018年の振り返り

今年もそろそろ終わろうとしているので、2018年に学んだことをまとめておきます。 今年は、下半期での学びが濃かったです。 分岐点は、TCFMに出合ったことと、仕事のプロジェクトを変えたこと、ですね。 その中で、自分はやはり低レイヤの技術が好きなんだ、…

SDSoC Example catalog(1)~Array Partitioning~

年内にFPGAの記事を1本書いておきたかったので、詳しくなりたいSDSoCについて書きます。 今はノリで使っていて、基礎ができていないので、1歩ずつやります。 何からやろうか、と考えたところ、私は具体例から物事を理解することが得意なので、Xilinx SDSoC E…

LLVM Tutorialをやっている(2)~7章まで~

7. Kaleidoscope: Extending the Language: Mutable Variables — LLVM 8 documentation tomo-wait-for-it-yuki.hatenablog.com 前回に引き続き、LLVMのTutorial Kaleidoscopeをやっています。 メモを残しながらやっていないので、あまりインフォーマティブな…

LLVM Tutorialをやっている(1)~4章途中~

LLVM Tutorial: Table of Contents — LLVM 8 documentation コンパイラを勉強する機運が高まっているので、ずっとやりたかったLLVMに手を出しています。 対象とする言語仕様としては、Go言語でつくるインタプリタより、かなり簡素なものです。 コード(LLVM I…

Rustで書かれたVMM firecrackerを読もう!(5)~API Server初期化再訪~

github.com tomo-wait-for-it-yuki.hatenablog.com 前回は、HTTP API Serverの初期化処理を読んでいました。 少しhyperを勉強して、勘違いしていた部分も発覚したので、分かったことを改めて書きます。分からんところは分からんですが。 bind_and_run src/ma…

子育てという不確実性に対処するために、自分という不確実性を減らしておこう!

子育てエンジニア Advent Calendar 2018 17日目の記事です。 adventar.org 私は、1歳8か月の息子がいます。 はじめに 皆様ご存知かと思いますが、今年、素晴らしい本が発売されました。 エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリフ…

Rustで書かれたVMM firecrackerを読もう!(4)~API Server初期化~

github.com tomo-wait-for-it-yuki.hatenablog.com 前回は、Vmm::new()を読み、VMMの初期化が大体わかった気になりました。今回はAPI Serverの初期化を見ていきます。 tokioが絡む部分は、非同期処理初心者なので間違っている可能性があります。 ApiServer::…

Rustで書かれたVMM firecrackerを読もう!(3)~mainのテストとVmm::new()~

github.com tomo-wait-for-it-yuki.hatenablog.com 前回は、src/main.rsのmain関数を読みました。そういえば、main関数のテストを紹介しようと思って忘れていたので、今回書きます。 mainのテスト src/main.rsに含まれるユニットテストです。まずは、ヘルパ…

Rustで書かれたVMM firecrackerを読もう!(2)~API ServerとVMMの初期化~

github.com tomo-wait-for-it-yuki.hatenablog.com 前回は、main関数でLOGGERのオブジェクトを作るところまで見ました。 設計を知る 少し公式ドキュメントを読んで、知識を仕入れました。 firecrackerは、KVMを使ってVMを作成します。VMMにつき1つのゲストOS…

Rustで書かれたVMM firecrackerを読もう!(1)

最高の餌が与えられたので、少しずつ時間を取ってコード解析していこうと思います。 github.com firecracker build 何はともあれ、ビルドしてみましょう。 リリースビルドするときは、--releaseをつければ良いみたいです。 とりあえず、debugビルドします。 …