これで、LinuxとWindowsデスクトップの相対的なメリットを私たち全員がよく知っていると確信しています。しかし、組み込み開発の世界についてはあまり聞いたことがありません。私は主に業界向けのソリューションに興味があるので、iPhoneやAndroid)には興味がなく、これら2つのOSにもっと興味があります。
組み込みの世界における2つのプラットフォーム間の相対的なトレードオフは何ですか?カスタムハードウェア、部分的にカスタマイズされたOS、カスタムアプリを使用して特定のプロジェクト用のボックスを作成することを検討している場合、どちらを選択しますか。その理由は何ですか。
Windows CEはツールで勝ち、Linuxはコストとおそらくパフォーマンスの両方で勝つと思います。しかし、これはまったくの憶測です。誰かが2つの事実や経験を持っていますか?
私は、すべてのハードウェアにCEとLinuxの両方を提供している会社で数年間働いていたので、この方程式の両側にかなり精通しています。
これは、CEが毎回勝つことを意味しますか?いいえ、それはまったくお勧めしません。 Linuxショップで、Linuxの経験とコード資産がたくさんある場合は、使い果たしてCEに移行するのはばかげているでしょう。ただし、ゼロから導入する場合、CEのTCOは通常低くなります。 Win32/C#の経験を持つ開発者はより普及しており、その結果、より安価です。また、CEを使用すると、他のほとんどのディストリビューションよりもはるかに多くの「ボックス内」を取得できます。つまり、これらのことをまだ社内で行っていない場合は、市場投入までの時間が短縮されます。
Linux側については、少なくとも私が精通しているソフトウェアのカテゴリ(RFデータ収集機器)または産業用アプリと消費者向けアプリ)について説明します。
Windows CE(およびその関連ツール)IMHかなり最近のE)は、小さな画面で「Windowsエクスペリエンス」を作成することに強く偏っています。ユーザー入力モードは、マウスのようなアクションを強調します。ログオン、アプリケーションの選択などはすべて、標準のWindowsにできるだけ類似するように努めます。
ユーザーがリフトトラックを運転している場合、ピッキングカートに充填している場合、またはある場所から別の場所に資材を移動している場合は、問題があります。
そして、それは動くターゲットです-特に.NET側では。 Compact .NETランタイムは深刻な障害があり、重要なライブラリ(ネットワーク、データ処理、UIなど)は不完全であり、バージョンが以前のバージョンを非推奨にすることがよくあります。 。 CEはWindowsファミリの継子のようです(おそらく、ハードウェアインテグレータに販売する活発な競争があまりないためです)。
安定した行と列のLinuxコンソールは、ちっぽけな画面上の多くの(私の経験ではほとんどの)使用頻度の高いアプリにとって非常に便利なコンテキストです。
ただし、携帯電話やZuneでのゲームにはあまり適していません。
注意:
Ctackeはおそらくハードウェアインテグレーターの側に正確に話していると思います。私は、パイプのさらに下のプレーヤー、つまりソフトウェアインテグレーターとユーザーとより連携しています。
多くの場合、選択は具体的なデータではなく、主に認識と文化に基づいて行われます。また、最新のOSの複雑さ、カスタムハードウェアへの移植に関連するすべての問題、および未知の将来の要件を考慮すると、具体的なデータに基づいて選択することは困難です。アプリケーションの観点からも、プロジェクトの存続期間中に状況は変化します。要件は行き来します。特に可能であれば、思いもよらなかったことをしていることに気づきます。ユビキタスUSBおよびネットワークポートは、セルモデムサポートやプリンタサポートの追加など、多くの可能性を開きます。フラッシュベースのストレージにより、フィールド内のソフトウェアアップデートが標準の動作モードになります。そして最終的に、各ソリューションには長所と短所があります。すべての場合に最適な特効薬はありません。
組み込みLinuxの開発を検討するとき、私はよく氷山の例えを使用します。プロジェクトに参加しているのは、水面上の部分です。これらは、アプリケーションが相互作用する部分、カスタマイズする必要のあるドライバー、理解できる部分です。残りの90%は水中にあり、ここには大きな変動があります。ドライバーの品質の問題や、将来サポートしたいもののドライバーを見つけることができない場合、プロジェクトの既知の部分を簡単に圧倒する可能性があります。 WinCEとLinuxの両方のソリューションの経験が豊富な人はほとんどいないため、快適なもの(またはマネージャーが快適なもの)や私たちが経験したことを好む傾向があります。以下は、考慮すべきいくつかの側面についての考えです。
システムソフトウェア開発
この領域での質問には、CPUサポート、ドライバーの品質、フィールドソフトウェアの更新、ファイルシステムのサポート、ドライバーの可用性などが含まれます。過去2年間に発生した変更の1つは、CPUベンダーがLinuxを新しいチップに移植していることです。最初のOS。以前は、OSの移植は通常、MontaVistaなどのLinuxソフトウェア会社またはコミュニティの取り組みによって行われていました。その結果、Linuxカーネルは、いくつかの追加パッチを使用して、ほとんどの主流の組み込みCPUをサポートするようになりました。これは5年前の状況とは根本的に異なります。多くの人が同じソースコードを使用しているため、問題は修正され、多くの場合、主流のソースに戻されます。 WinCEを使用すると、BSP /ドライバーのサポートはリファレンス実装になる傾向があり、OEM /ユーザーはそれを利用して問題を修正します。これにより、修正が維持される傾向があります。
システムの観点から、将来のニーズに対する柔軟性を考慮することは非常に重要です。現在要件ではないからといって、将来要件にならないという意味ではありません。周辺機器のドライバーサポートを取得することはほぼ不可能であるか、それを実用化するには多すぎる努力である可能性があります。
ほとんどの人はビルドシステムについてほとんど考えていないか、「ツールに素敵なguiが巻かれていれば、それは簡単でなければならない」という考えをはるかに超えて見ることはありません。 OpenEmbeddedは、組み込みLinux製品を構築するための非常に人気のある方法であり、最近、MontaVistaのLinux 6製品のテクノロジーベースとして承認されており、一般に、新しいユーザーには「使いにくい」と見なされています。 WinCEビルドツールは表面上は単純に見えますが(水面から10%)、何かをカスタマイズしたり、ソフトウェアの更新などの複雑な機能を実装したりする必要がある場合にどうなるかという問題があります。プロダクショングレードのプロダクションシステムをビルドするには機能を使用するには、OSを理解し、オペレーティングシステムとビルドシステムの両方の詳細レベルで作業できるチームの誰かが必要です。 WinCEまたはEmbeddedLinuxの場合、これは通常、企業が社内で経験豊富な開発者を持っているか、システムソフトウェア開発の一部を行うために専門家を雇う必要があることを意味します。システムソフトウェアの開発は、アプリケーションの開発と同じではなく、一般的に、時間がない限り、経験のない人がやりたいことではありません。企業が最初のカップルプロジェクトに専門家の助けを借りて、その後、社内で後続のプロジェクトを行うことは非常に一般的です。考慮すべきもう1つの機能は、並列ビルドのサポートです。クアッドコアワークステーションが標準になりつつある今、フルビルドを8時間ではなく1.2時間で実行できるのは大したことですか?さまざまなリビジョン管理システムなど、さまざまなソースからソースコードをプルしてビルドする際のビルドシステムの柔軟性。
組み込みプロセッサはますます複雑になっています。 CPUを実行するだけではもはや十分ではありません。 TIのOMAP3cpuファミリを検討する場合は、次の質問をする必要があります。3Dアクセラレーションエンジンで使用できるライブラリはありますか。また、年間数百万ユニットをコミットせずに入手することもできますか。 DSPブリッジのサポートはありますか?これらすべての費用はいくらですか?私が関わった最近のプロジェクトでは、AtmelAT91SAM9260の基本的なWinCEBSPの価格は7000ドルでした。開発者の時間という点では、これはそれほど多くはありませんが、メンテナンス、オペレーティングシステムの新しいバージョンへのアップグレードなどの継続的なコストも考慮する必要があります。
アプリケーション開発
Embedded LinuxとWinCEはどちらも、さまざまなアプリケーションライブラリとプログラミング言語をサポートしています。 CとC++は十分にサポートされています。 WinCEの世界では、ほとんどのビジネスタイプのアプリケーションがC#に移行しています。 LinuxにはMonoがあり、.NETテクノロジーを広範囲にサポートし、組み込みLinuxシステムで非常にうまく動作します。組み込みLinuxで利用できるJava開発環境は多数あります。違いに遭遇する領域の1つは、グラフィックライブラリです。一般に、MicrosoftグラフィカルAPIはLinuxで十分にサポートされていないため、大規模な場合は頑固なWindowsGUIプログラマーであるアプリケーションチームなら、おそらくWinCEが理にかなっています。ただし、WindowsPCと組み込みLinuxデバイスの両方で実行されるGUIツールキットには多くのオプションがあります。GTK+、Qt、wxWidgetsなどの例があります。GimpはWindows上で実行されるGTK +アプリケーションの例であり、他にも多くのアプリケーションがあります。GTK+およびQtへのC#バインディングがあります。WinCEスペースで強力になっていると思われるもう1つの機能は、Windows Communication Foundation(WCF)です。繰り返しになりますが、必要な部分に応じて、WCFをMonoに移行するプロジェクトがあります。Pythonは非常に優れており、Python runs 200MHz ARMプロセッサで非常にうまくいきます。
WinCEはリアルタイムであり、Linuxはそうではないという認識がよくあります。 Linuxのリアルタイムサポートは、PREEMPTオプションを使用したストックカーネルでは適切であり、リアルタイムサポートは、比較的小さなリアルタイムパッチを追加することで優れています。 Linuxでは、ミリ秒未満のタイミングを簡単に実現できます。これは、リアルタイム機能がストックカーネルに統合されたことで、過去2年間で変化したものです。
開発フロー
生産的な環境では、ほとんどの高度な組み込みアプリケーションは、ターゲットハードウェアではなく、PC上で開発およびデバッグされます。ターゲットシステムでのリモートデバッグが適切に機能するセットアップでも、ワークステーションでのアプリケーションのデバッグはより適切に機能します。したがって、一方のソリューションに適切なオンターゲットデバッグがあり、もう一方のソリューションにはないという事実は、実際には関係ありません。データ中心のシステムの場合、実際のI/Oに接続せずにアプリケーションをテストできるシミュレーションモードが一般的です。 LinuxアプリケーションとWinCEアプリケーションの両方で、組み込みデバイスのアプリケーションプログラミングはPCのプログラミングに似ています。組み込みLinuxはこれをさらに一歩進めます。組み込みLinuxテクノロジーはデスクトップおよびサーバーLinuxテクノロジーと同じであるため、デスクトップ/サーバー用に開発されたほとんどすべて(システムソフトウェアを含む)が組み込みで無料で利用できます。これは、非常に完全なドライバーサポート(上記のUSBセルモデムとプリンターの例を参照)、堅牢なファイルシステムサポート、メモリ管理などを意味します。Linuxのオプションの幅は驚くべきものですが、これをネガティブな点と見なす人もいます。すべてが1か所から提供されるWindowsCEのような統合ソリューション。柔軟性が失われますが、場合によっては、トレードオフの価値があるかもしれません。 Openembeddedを使用して組み込みLinuxシステム用にビルドできるパッケージの数の例については、を参照してください。
GUIトレンド
携帯電話(iPhone、Palm Preなど)によって駆動される小さなディスプレイを備えた組み込みデバイスの傾向を考慮することが重要です。デスクトップシステムで一般的な標準のGUIウィジェット(ダイアログボックス、チェックボックス、プルダウンリストなど)は、最新の組み込みシステムではそれをカットしません。したがって、3D効果のサポート、およびタッチスクリーンデバイスで使用するように設計されたウィジェットライブラリを検討することが重要になります。 Clutterライブラリは、このタイプのサポートの例です。
リモートサポート
デバッグツールの問題に戻ると、ほとんどの人は、デバイスがラボのワークステーションの隣に設置されているシナリオで停止します。しかし、世界中でベータテストが行われているデバイスのトラブルシューティングが必要な場合はどうでしょうか。ここで、Gdbのようなコマンドラインデバッガーが長所であり、短所ではありません。また、ニュージーランドでセルモデムをサポートしていない場合、またはシェルアクセスとファイル転送用のsshなどの効率的な接続メカニズムがない場合、どのようにデバイスに接続しますか?
[〜#〜]要約[〜#〜]
高度なテクノロジーを選択することは簡単な作業ではなく、経験があってもそれを行うのはかなり困難です。したがって、適切な質問をし、さまざまな角度から決定を検討することが重要です。うまくいけば、この記事がその助けになるでしょう。
私はOEMボードのソフトウェアをカスタマイズするプロジェクトに携わってきましたが、Linuxの方が安いとは言えません。ボードを購入するときは、SDKも購入する必要があります。 Linux版でも支払う必要があります。一部のメーカーは、ボードにWindows CEとLinuxの両方のソリューションを提供しており、価格に違いはありません。 Windows CEの場合、Platform Builderも必要であり、ライセンスの料金を支払いますが、サポートなしで行く方が簡単です。
もう1つの重要な問題は、ユーザーインターフェイスまたはヘッドレスデバイスを構築しているかどうかです。 LCD画面を必要とし、人間との対話がWindows CEを使用する方がはるかに簡単なデバイスの場合。一方、ヘッドレスデバイスを構築している場合、特にネットワークの場合は、Linuxの方が適切なオプションです。プロトコルが関係しています。Linuxの実装はより信頼性が高く、調整が簡単だと思います。
Linuxでは、あなたは決してあなた自身ではありませんそしてあなたは許可を提供するために単一のエンティティに依存することは決してありません。多くのサポートオプションがあり、多くの競合するソースを通じて、システムの任意の部分のサポートオプションを自由に選択できます。
Windows CEでは、同意する必要のある複雑なライセンス契約に記載されているライセンスと制限を順守する必要があります。弁護士を呼んで。 Windows CEでは、OSサポートの独自のソースが1つだけあり、必要なものをサポートおよび提供するのに適していると判断された場合にのみ続行します。あなたは彼らの立場に同意しないかもしれませんが、彼らが規定することに屈する以外に頼ることはできません。増分コンポーネント、モジュール、開発キット、ライセンス、およびサポートのコストは、独自のプラットフォームに積み重なる傾向があります。長期的には、ベンダーがプラットフォームのサポートを望んでおらず、自分でプラットフォームをサポートおよび配布する権利がない場合はどうなりますか?ベンダーが新しいテクノロジーに移行し、移行する準備ができていなくても、ベンダーと一緒に移行することを望んでいる場合はどうなりますか? $$$
一般的なWindowsソリューションに関する私たちの経験では、時間の経過とともにコストが高くなる傾向があります。当初は最低のTCOと見なされていたものが、維持とサポートに支障をきたし、コストがかかるソリューションにすぐに引き寄せられます。ライセンスは時間の経過とともに再交渉する必要があり、多くの場合不要な新しいテクノロジーは、ビジネスニーズのためにプロバイダーの気まぐれで強制されます。その上、ライセンス契約は継続的に変更されています。弁護士を雇ってください。
Linuxを使用すると、必要に応じてソリューションを配布することに煩わされることなく、社内のサポートと専門知識を自由に提供できます。また、元のプロバイダーがサポートしたくないテクノロジーを引き続き使用およびサポートする自由もあります。ソースコードとそれを必要なもの(GPL、LGPL)で処理する権利を持つことは、ビジネス継続性とコストの抑制に関して強力な魅力であり、最新のテクノロジーやニーズに合ったテクノロジーへのアクセスを提供します。
RT Linux(より具体的には、RTパッチを適用したLinuxプリエンプティブカーネル)とWindowsCE)の両方で動作するネットワークドライバーを開発しました。私の経験はWindowsでした。 CEは、リアルタイム応答の点でより安定していました。フレームタイミングは、WindowsCEのジッタが少ないことも示しました。
RT Linuxでは、あらゆる種類の問題が発生しました。たとえば、ユーザーがマウスを動かしたとき、フレームが遅延していました。x-windowsの特定のバリアントは、割り込みを無効にします。また、コンソール画面でのみ安全だと感じます。VGAフレームバッファを有効にしている場合は、再び運命にあります。WindowsCEでの問題は、ジッタに関して1つだけでした。この問題は、USBコントローラが正しくないモードに設定されている場合に発生しました。 BIOSとWindowsでは、CEはポーリングに多くの時間を使用していました。
正直なところ、WindowsCEはより多くのサポートを提供していました。 Linuxでは、あなたはあなた自身です。考えられるすべてのメーリングリストを読んで、どのような問題が発生する可能性があるかを理解する必要があります。
部分的にカスタマイズされたOS
OSがオープンソースである(そしてあなたが専門知識を持っている)場合、達成するのははるかに簡単です。
Androidは、一部の組み込みシステムに適したオプションです(Linuxベースです)。
このシステムで開発できる専門家がたくさんいます。
JavaまたはCの多くのライブラリにアクセスできます。
しかし、それは多くのメモリとエネルギーを使用します。
有料/ライセンスソフトウェアで私たちが忘れがちなのは、ライセンスを処理する必要があるということです。時間とエネルギーがかかります!次に、正しく支払うかどうかを追跡する必要があります。それは異なるスキルを持つ多くの異なる人々を含み、決定に費用がかかります。
このコストは、オープンソース/フリーが有料ソフトウェアよりも高価であることを示す研究には含まれていないことがよくあります。
「フリーソフトウェア」を使用すると、ライセンスの処理がはるかに簡単になり、これらの問題の処理に費やす時間が短縮されます。個人的には、ソフトウェアの一部を変更するたびに、法務/資金調達チームとの不必要なコミュニケーションを避けることを好みます。