12月の技術講座

2015-12-09

テーマ: Chopstxとはなにか

開催日時 2015年12月11日(金曜日)18:30 ~ 19:30

場所:東京体育館第四会議室

概要

ChopstxはARM Cortex-M3/M0用のリアルタイムスレッドライブラリでGnukやNeuGで使われています。

かつてある地域で組み込み向けのAPIの仕様(カーネルですらなく、スレッドライブラリとしても半端)が"OS"と謳われたことに対する嘆き、また、今もって続くカーネルとOSとの意図的な混同に対する悲しみ、などが反映されてない... とは言えませんが、単なる小さなスレッドライブラリです。

今年は、9月の月例会でChopstxをCortex-A7に移植するという話が小島さんから発表されました。 11月には、Orange Pi PCとAllwinner H3が、まぁマシなプラットフォームでしょう、という話をしました。Orange Pi PCでJTAG debuggerをつないで4つのコアを動かし、続いてDRAMも動かせるようになりました。

そこで、あらためてChopstxの考え方と作業中のCortex-A7の移植を話します。

話題提供

  • g新部 裕

Threads and only threads

  • ChopstxはPOSIX ThreadsプログラミングのAPIに則って、組み込みアプリケーションを作りましょう、というものです。
  • スレッドしかありません。
  • 排他制御は mutex と condition variable です。
  • 割り込みコンテクストはありません。割り込みによってその割り込みを受け付けるスレッドが起きる、これだけ、です。
  • Bottom-halfとかありません。かつてのkludgeで今は残像しかないものをありがたがらない。

これまでの経緯

  • Gnukの開発でChibiOS/RTを使っていた。(2010年)
  • いろいろな排他制御の仕組みは要らない。豊富な機能のあまり使われてない部分にはバグがつきもの。
  • 付属のドライバとか要らない。「OSがハードウェアを抽象する」という考え方はharmfulかもしれない。
  • BSPとか要らない。
  • ボードと core の仕様があれば、比較的すぐに動かせるような、スレッドライブラリだけが欲しい。
  • Cortex-M3向けに開発 (2013年)
  • Gnukで採用。
  • NeuGで採用。NeuG TRNG device (on FST-01)で製品に使われる。
  • Cortex-M0向けに移植。FSM-55で製品に使われる。(2014年)
  • Cortex-A7向けに移植が進む (2015年)

Cortex-A7向けに移植を通じての考察

同じCortex-A7のコアといってもBroadcomとAllwinnerではだいぶ様子が違うことが分かった。

  • 複数のコアがあると、affinity とか欲しくなるかもしれない。
  • FIQとか要らないでしょ。暇なコアが寝ていて余ってるし。
  • GICのプライオリティも要らないでしょう。
  • Chopstxには、すべてのコアが共有するシステムでひとつのタイマ、が必要。
  • Chopstxには、IPI (inter-processor interrupt)が必要。自分自身に適用できるとさらに良い。
  • Secure/Non-secureって、たしかに特定の状況では一定の効果はあるだろうというものですが...
  • こういうものがあると前提されると、それは複雑化と品質低下に貢献する、というのも事実。

今後

  • Orange Pi PCでHDMIに画を出すところまで作ってみるか。
  • ユーザスペースのプログラミングを提供する、か。