RustはじめにZephyrのアプリケーションをRustで実装するインテグレーションに挑戦しています。tomo-wait-for-it-yuki.hatenablog.comこれまでに、Rustをライブラリとしてインテグレーションすることに成功しました。Rustから呼ぶC言語のFFIは、手動で作成していました。worldプログラムです。ここで呼び出しているputs_c()は、自分でFFIを用意した関数です。APIのFFIを自動生成します。準備Rustのbindgenを使います。github.combindgenをインストールしておきます。bindgen後は、Zephyrのビルド環境があればOKです。bindgen!まず、うまく行く手順を書きます。一度、対象とする設定でZephyrをビルドするこの手順が必要な理由は、Zephyrのビルドプロセス中で、自動生成されるヘッダファイルが必要なためです。自動生成されるヘッダファイルは、ビルドを実行したディレクトリの、下記パスに置かれます。bindgenでは、次のディレクトリをインクルードパスに加えます。configurationからC言語マクロを生成するヘッダファイルが重要になります。bindgenでbindingsを生成する続いて、bindingを生成する対象となるヘッダファイルを用意します。<zephyr.h>次のようなディレクトリ構造にしておきます。zephyr...bindgenを実行します。今回は、ARMがターゲットであるため、ARM固有のインクルードパスも追加します。-m32デフォルトでは、stdクレートのC言語FFI用の型が使われてしまうため、no_std環境でも使える、ctyクレートを使うようにします。これで、printkのbindingが生成されます。Rustプロジェクトを含んだZephyrプロジェクトをビルドする自動生成したファイルには手を加えたくないため、no_stdのアトリビュートを指定するためのlib.rsを用意します。zephyr;Cargo.tomlは次の通りです。"0.2.0"自動生成したbindingsクレートに依存するRustアプリケーションクレートを用意します。["staticlib"]ソースコードは次の通りです。printkの引数がダサい感じですが、今後改善していきます。}}動作確認C言語のmainは次の通りです。rust_main();}ビルドして実行します。ZephyrとRustのインテグレーションに挑戦しています。ZephyrとRustのインテグレーションに挑戦しています。Zephyrのdriverを作る方法を学びます。ZephyrとRustのインテグレーションに挑戦しています。読者になる検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログPro最新記事Zen言語の標準ライブラリ紹介〜rand2〜Zen言語の標準ライブラリ紹介〜rand1〜Zen言語の標準ライブラリ紹介〜lazy〜Zen言語の標準ライブラリ紹介〜sort2〜Zen言語の標準ライブラリ紹介〜sort1〜月別アーカイブはてなブログをはじめよう!tomo-wait-for-it-yukiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。