ファームウェア≠組み込み

  • 投稿日:
  • by
  • カテゴリ:



違い分かりますか。


信用ならないWikipediaを眺めて整理しておきます。


firmware Wikipedia


http://en.wikipedia.org/wiki/Firmware



元はCPU上のマイクロコード(RAM上)を指し、のちに、ROM/RAMに解釈が広まり、BIOSやブートローダなどにも使われるようになり、90年代中ごろにはアップデートできるファームウェアが広まった。



こんなところでしょうか。


個人的な印象では90年代まで、GALの内容やCPLDのROMに入っているものはファームと呼ぶが、マイコンのコードはファームと呼ばなかった気がします。「ロム」と呼ぶ現場も多かったのではないでしょうあ。


21世紀をまたぐころには、間抜けなソフト屋さんが組み込みのコード全般をファームと呼んでいるのをよく見かけました。ハード屋さんがファームと組み込みは違うぜよ、と主張しているのは見かけたことありませんが。


長いものには巻かれたい系のわたしは、相手がどういう意味でファームと言っているのかを考えて、「空気を読んで」話を合わせています。


以前みかけた間抜けな話はこんなのです。



組み込みLinuxで、ファームに強い人で、アプリケーションのSE/プログラマを探しています。



特殊なハードでアプリ書く人が触れないファームがあるとして、ファームに強くてもファームは触れませんからね。道具も必要ですし。ファームまで触るんなら、探す人間違いなわけで。ファーム屋を探せということです。アプリのソースしかなくて、ファームの外部仕様(せいぜいメモリマップ)しかないのに、"その"ファームに詳しいってどういう状況なんでしょ。当然ファーム全般に詳しい、というのはいかにもあやしげなスキルだと思います。


さて、ファームを組み込み全般の意味で遣っている場合に困るのは、こちらは間に入った間抜けに合わせて「ファームを組み込み全般のこと」として話をしているのに、間抜けの向こう側の切れ者が、



あ~こいつは、ファーム分かってねぇな



と早合点してしまうことです。これを間抜けによる中間者攻撃と呼ぶとか呼ばないとか。


ありそうな具体例で、ファームの遣い方を書いておきます。


例:


メインのボード上にはSOC(MIPS)とDSPがある。バス回路周辺にはCPLDでとってつけたようなバスアービタ。



  • ハード屋さん、CPLDのファームを提供する。

  • ファーム屋さんは、DSPのコードをROMに焼く。

  • OS屋さんは、OSのポートをする。CPLD対応と、DSPドライバ対応ドライバを提供。

  • ドライバ屋さんはドライバを書く。

  • アプリ屋さんはドライバを叩くプログラムを書く。


このような綺麗なレイヤで切り分けしても、以下のような状況になりますから、分かっていない中間攻撃者(素人マネージャとも言う)が居るとかなり混乱します。以下はケーススタディです。



  • 誰がどのレイヤの詳細情報にアクセス可能とするか。

  • CPLDとDSPのファームの更新プログラムはOS屋さん担当。必要な情報はハード屋さん、ファーム屋さんが提供する必要あり。

  • ファーム更新プログラムはドライバをアンロードした状態でおこなう必要がある。(ロード状態でも更新できるならそれに越したことはない。)

  • ハード屋さん、ファーム屋さんは、OSがブートできない状態でもISPでファームを更新できるが、アプリ屋さんはできない。そのためだけにISPの道具一式を用意できるなら話は別。

  • ISPするときに使うファームのファイルと、更新プログラムで読み込むファームのファイルの形式を統一していないとバージョンの不整合で混乱する。ISPで焼いちまったファイルが構成管理から漏れてしまいがち。


アプリ屋さんはバージョン管理や構成管理をウダウダ主張するのですが、ファームやドライバまで管理しなければ、エンバグに悩まされ続けることでしょう。まともなファーム屋さんやハード屋さんはブツのリリースはかなり厳格に管理しますが、やっつけ仕事の現場だと、「緊急バグ修正」とか「ちょっと改良しました版」などのファームウェアで致命的なバグ修正が恐ろしく遅延することもあるかもしれません。


ケーススタディはとても簡略化した状況を書きました。実際には、ハード屋さんは複数いますし、一部流用で担当者不在(アンタッチャブル)だったりします。ファームも一部が内製、一部外作だったりするのは当然のことです。ドライバは特に流用圧力が強いかもしれません。ですがメモリマップがちょっと違うだけでも、油断すると大変です。


ハード~ドライバのレイヤでは、玄人集団が素人マネージャの目を盗んで、「内々で処理する」ことが多く、運良くドキュメントが残っていても、後から見て理解不能な仕様や機能が満載かと思います。


だらだらと書きましたが、ここに書いたシステム切り分けの問題だけでもこれだけややこしいのですから、システム設計なんてすんなり行くわけがありません。勢い、大きな設計変更や性能改善には向かいにくくなります。ハード屋さんはアプリがボトルネックになっていると考え、アプリ屋さんはハード屋さんの保守主義にウンザリするばかりです。



私の頭は古いので、常に業界最新の環境でお仕事をしている皆様にとっては、ここに書いたような間抜けな状況は昔話に過ぎないのかもしれませんが。