■ミドルウエアの入手
TCP/IPなどネットワークプロトコルやファイルシステムなど、中間に存在するライブラリ群のことを「ミドルウエア」と呼びます。パソコン向けソフトウエア開発では意識しない、用意されていて当たり前のライブラリも、ファームウエアの世界では何らかの方法で入手する必要があります。(ミドルウエア例)
・TCP/IPプロトコルスタック
・FileSystem
・暗号/認証アルゴリズム
・GUI
・画像処理、音声処理
・メモリ操作、文字列操作
ミドルウエアの入手先は、デバイスドライバ同様外部から購入または無償のものを入手するか、自力で実装します。
デバイスドライバで必要だった「デバイス固有の制御方法に関する知識」は不要ですが、やはりミドルウエアはミドルウエアなりに実装難易度が高かったり規模が大きかったりします。自力で実装して実運用に耐えられるくらい動作確認(品質担保)するコスト及び開発に必要な期間を考えると、外部から入手した方が現実的です。
ただ、個人的には「何でもかんでも外部から入手」とは考えていません。例えばイベントログをサーバに送信するSyslogクライアント(オリジネータ)ならRFC読んで書いた方が早いように思いますし、HTTPのリクエストのバリエーションがないなら決め打ちのデータをやりとりするだけの「なんちゃってHTTPc」を実装しただけで用が足りるかもしれません。「外部から入手する!」と決める前にちょっと立ち止まって考えてみるのがエンジニアかなと。
さて、外部から入手する、となるとデバイスドライバ同様必要なカスタマイズの度合いや、ライセンス、サポートについてよく確認しましょう。
・カスタマイズの度合い
普通ミドルウエアは幅広い用途向けに汎用的に設計されているため、設定の変更だけでなく、そのままでは御社の組込機器に対する要求仕様に一部機能が不足していたり性能が満たない可能性もあります。ミドルウエアの仕様についてよく確認しましょう。
・ライセンス
無償ミドルウエアの場合でも完全に好きに使って良いわけではありません。Linuxに多いGPLライセンスのミドルウエアであれば、外部からの求めに応じてファームウエアのソースコードを開示する義務を負いますし、BSDライセンスであれば製品に添付したドキュメントにBSDライセンス条項自体を記載する必要があります。
有償ミドルウエアの場合はそういったことは発生しませんが、どこまでそのソースコードを流用して良いかが条件として決められています。同一会社の製品なら何に使っても良い、CPUが同じなら流用して良い、製品で限定など、ライセンスが御社用途に合致しているかご確認ください。
・サポート
前述のことをWebサイトなどで確認したとしても不明な点も出てくるでしょう。また、組込作業を始めてみると上手く動かずに誰かに相談したくなるはずです。サポートは、誰がどの程度相談相手になってくれるか、という話題です。無償ミドルウエアの場合、その相談相手はユーザフォーラムや運営グループが普通でしょう。某知恵袋やここ(Qiita)も有効かもしれませんが、いずれにせよ回答が来るとは保証されないので、最終的には自分でなんとかする覚悟が必要になります。
一方有償ミドルウエアの場合、そのミドルウエアについての相談はしっかり受けてくれるはずです。購入先候補の会社としっかりコミュニケーションをとり、ミドルウエアが自分の組込機器で目的の動作をさせられることを確認すべきです。
また、どんなに事前に確認・準備しても、実際に組み込んでみると意図した挙動をしなかったり、組込機器が完成して市場に出た後でトラブルが発生、というケースはゼロにはなりません。どの程度サポートしてくれるのかもミドルウエア選択のポイントとなるかと思います。
★Centeでは...
CenteではiTRONOS用のミドルウエアをCソースコード形態で販売(使用許諾)しており、ターゲット基板への移植、独自仕様へのカスタマイズ作業も承っております。案件がやわらかい段階でもお気軽にお問合せください。この道のベテラン営業担当はもちろん、打ち合わせ内容によってはミドルウエアを開発したエンジニアも参加するなど、お客様が不安に思うことがなくなるまでしっかり説明いたします。サポートに関しても購入時には半年のサポートがついており、その後は年単位でサポート契約が可能です。専用メールアドレスにお問合せをいただくと、ミドルウエア開発エンジニアが原則その日のうちに一次回答する体制としており、直ちにソースコードレベルの詳細な問い合わせから始めることができます。また、ミドルウエアに原因があるか切り分けができていない段階でもお問い合わせいただければ切り分けの方法などアドバイスを差し上げます。
Centeミドルウエアパッケージシリーズ
https://www.cente.jp/product/list/
なお、ネットワークミドルウエアだけでも相当種類があり、自分の組込機器にどれが必要なのか不明という方もいらっしゃると思います。ネットワークやセキュリティについては別シーズンで解説したいと思います。
■今日の閑話
PCで動作するソースコードを組込環境に移植したことがある方ならわかると思うのですが、PC環境で動作することが前提のソースコードは同じCでもそのままでは組込環境で動かないことがあります。たとえばこんなことで苦労します。・リトルエンディアン前提で変数と配列を変換している(組込機器ではビッグエンディアンのマイコンがある)
・オート変数で大きな(1Kbyteを超える、など)配列を使っている(組込機器ではリソースが厳しいことが多い)
・intやlongなど表現できる最大値の前提が組込環境と異なる(組込機器のCPUは8bit、16bitのものがあった)
・外部関数を大量に呼んでいて、includeするヘッダファイルも大量(そもそもそれらを全部新たに用意する?)
もちろん元コードを書いたエンジニアに罪はありません。様々なスペックのマイコン上で、最小限のカスタマイズで動く汎用的なミドルウエアを書く立場になって、改めて組込ソフトウエアの難しさを感じた、というお話です。
Cente:
https://www.cente.jp/