>100 Views
July 17, 26
スライド概要
OSDEVもくもく会で利用
アライブビジョンソフトウェア株式会社の髙橋です。 組込み制御系です。 Raspberry piもよく触っています。
Raspberry Piのベアメタ ル環境circleにプリエン プトスケジューラを実 装した 髙橋和浩 アライブビジョンソフトウェア株式会社 2 0 2 6 年 8 月 2 日 第 5 2 回 自 作 O S も くもく 発表作 業会
今回発表の経緯 第29回 自作OSもくもく会オンライン にて発表したかと思います カーネルディスパッチャだけでは つまらないという 結果でした orz… 2026/7/17
今回はそれの挽回版(時間たってますが) CircleというRaspberry Piのベアメタル環境があることを知りました 2026/7/17
結局同じものを違うプラットフォームに移植しました CircleにTOPPERS/SSPシュリンク版を移植すればいいと考えました。 勝手な妄想です。 2026/7/17
TOPPERS/SSPシュリンク版のおさらい もうすでに世代が昔のものになっていますが、TOPPERSプロジェクトの最小セットカーネルから改造を加えた ものです。 変更内容: ・システム全体のOSという形態から、既存のベアメタル環境に移植できる構成に変更 ・上記に伴い不要ファイル、不要ヘッダファイルを削除 ・C言語ディスパッチャの実装にともない、従来協調型プリエンプションをプリエンプションカーネルに変更 2026/7/17
Circleとは https://github.com/rsta2/circle に公開されています。 世界中で作られている、Circleベースの驚異的な「専用機」たち Linuxを介さないベアメタルならではの「超低レイテンシ」「高速起動」「リソースの完全占有」を活かし、世界中の開発者が Circleを使って驚くほど実用的なプロダクトを生み出しています。 その多様性とポテンシャルの高さは、公式Wikiにまとめられたプロジェクト一覧を見れば一目瞭然です。シンセサイザーやMIDI 機器、ポータブルゲーム機、高度なネットワーク機器など、Linuxを起動せずとも「電源ONですぐに動く専用機」が多数開発さ れています。 Circle ベース・プロジェクト一覧(公式Wiki) https://github.com/rsta2/circle/wiki/List-of-Circle-based-projects 2026/7/17
Circleについて特徴1(私からの説明) 簡潔なビルド方法、各Raspberry piが同一サンプルで動作 1)コンフィグレータで、Piの種類とAArch32/64の指定 2)ライブラリビルド 3)SDイメージ共通ファイルがMakeで作成できる 4)サンプルアプリのビルド Make1発 2026/7/17
Circleについて特徴2(私からの説明) サンプルアプリの構成 ◦ kernel.cpp/h main.cpp/h で構成されている。 ◦ C++なので、継承したクラスで対応可能 デバッグ情報あり/doc ◦ JTAG用の設定ファイル情報なども記載されている。 ◦ 自分もJTAGに接続しています。 2026/7/17
プリエンプトスケジューラの話 内容は目新しくないのですが、前回と同じ ただ、移植先が変わっただけです。 移植の様子はgithubの修正履歴からも確認できると思います。 ⚫起動時に sta_ker()の呼び出し、と周期タイマーハンドラを登録することです。 ⚫周期タイマーハンドラの登録はcircle APIで m_Timer.RegisterPeriodicHandler(TimerHandler); になります ⚫どうしてもアセンブラな部分は sample/04-01-preemptive-kernel/arch/RPI/target_kernel.h になります。 Aarch32は試していませんが、ベースが違うときのものなので動くと思っています。 2026/7/17
今後の課題と今やっていること 自作RTOSセミナー(有料セミナ) ◦ 以前のベースでもやっていました。今回は助成金対象になるように対応しています。 circle プリエンプトスケジューラ対応を使ったシステム構築 ◦ 今検討中のビジネスプランで開発を考えています。OpenAMPを利用検討中。 ◦ 兵庫県のオープンイノベーションの勉強会に参加中です。 2026/7/17
ビジネスプランで開発検討中(案) [ Circle (Core3) ] [ Linux (Core0-Core2) ] │ │ (PIR(赤外線)センサーが検知!) │ (OpenAMPのコマンドを │ │ ポーリングしながら ├─① カメラに撮影命令 (50msでシャッター) │ 低電力アイドル維持) │ │ ├─② メモリ(DRAM)上に撮影した画像を展開 │ │ │ └─③ OpenAMPで「画像アドレス」を通知 ──────────────>│ (割り込みにより復帰) │ ├─④ 共有メモリから直接 │ 画像を読み込む │ ├─⑤ なにかします │ └─⑥ なにか後 アイドル状態に戻る │ 2026/7/17