ファームウェアでプログラムの実行はどのように行われますか?


9

ファームウェアドメインで作業している人から、オペレーティングシステム制御ファームウェア(USBドライブのファームウェアなど)がないと聞きました。whileループで実行されている単一のスレッドだけが外部コマンドを待機しており、これが割り込みが発生する開始点であり、その後にISRとハードウェアまで流れる制御が続きます。しかし、基本的に、ファームウェアコードを実行しているハードウェアのその部分は何ですか?CPUはありますか、それともデバイスに電源が供給されている限りトリガーされるASICベースのコードですか?通常のCPU-OSベースのシステムからファームウェアへのパラダイムシフトを理解できません。


可能であれば、誰かがファームウェアの例を挙げて、CPUの製造元とその他のハードウェアおよびソフトウェアの詳細を示すことができます。例としては、SDカード、USB、HDDコントローラーなどのファームウェアがあります
Abhijit K Rao

回答:


13

パラダイムシフトはありません。どちらの場合も、CPUがソフトウェア/ファームウェアを実行しています。

ファームウェアとソフトウェアは同じものです。唯一の違いは、保存方法です。ソフトウェアは通常、大容量記憶装置(ディスクドライブなど)に格納され、実行前に揮発性メモリ(DRAMなど)にロードされます。それを含むファイルを別のファイルに置き換えるだけで、ソフトウェアを簡単に変更できます。

ファームウェアは通常、多かれ少なかれ直接CPUに接続された不揮発性メモリ(例:FLASH)に保存されます。修正するのが難しく(したがって「ファーム」)、実行するために別のメモリに転送される場合と転送されない場合があります。

実際、「オペレーティングシステム」を備えたコンピュータの操作は、ファームウェアの説明と基本的に同じです。OS自体はソフトウェアの別の一部にすぎないことを覚えておいてください。おそらく、相互に依存するソフトウェアの膨大なコレクションです。最低レベルでは、CPUはまだ何らかのループに座って、処理が行われるのを待っています。そのループがOS内に埋め込まれているだけです。


9

OSを備えた「通常の」CPUでもファームウェアを実行する必要があります。通常、汎用PCではBIOSと呼ばれます。CPUのファームウェアは、CPUが周辺機器(ディスクドライブ、USBなど)に接続されているかどうかに関係なく、電源を入れたときに常に使用できるソフトウェアにすぎません。本格的なOSを使用している場合、ファームウェアはOSのコードを保持しているデバイス(ディスク、USBドライブなど)を特定し、コードをRAMにコピーして実行します。小さな組み込みデバイスの場合、さまざまなアプリケーションをロードしたり、さまざまなデバイスを接続したりすることはないため、完全なOSは必要ありません。したがって、小さなCPUは非常に単純なOSまたは「タスクスケジューラ」を使用するだけです。センサーの読み取り、ボタンが押されるのの待機、ディスプレイの更新など、さまざまなタスクがあります。非常に単純なアプリケーションの場合、CPUはすべてのタスクを実行するのに十分な時間があるため、各タスクを順番に実行するだけです。これは、「ラウンドロビン」アプローチとも呼ばれます。より洗練されたスケジューラは、タスクの優先度を考慮します。

基本的なポイントは、すべてのCPUには、電源がオンになったときに常に実行できるいくつかのコードが必要であることです。そのコードは通常、比較的小さな「読み取り専用」メモリまたはROMに格納されますが、最近のCPUは「ほとんど読み取り」のフラッシュROMにファームウェアを配置します。この方法で格納されるコードは、CPUの「ファームウェア」です。


6

あなたの質問にはいくつかの誤解があるようです。

ファームウェアは、固定形式の単なるソフトウェアであり、以前はプレーン(書き込みが1回またはマスクプログラムされた)ROMでしたが、現在はフラッシュ(再書き込み可能)ROMになっています。一部のシステムでは、このファームウェアが存在する唯一のソフトウェアです。他のシステム(通常のPCなど)では、その主な機能は他のソフトウェアをロードすることです。

アプリケーションは、OSの制御下で実行することも、OSなしで実行することもできます。後者の状況は、しばしば「ベアメタル」と呼ばれます。アプリケーションは、ハードウェア「メタル」との間で何も実行されません。ファイルシステムの処理やマルチスレッドのプロビジョニングなど、OSで実行されるwith-OSの状況にある機能は、ベアメタルシステムに引き続き存在できますが、アプリケーションにリンクされたライブラリの形式で存在できます。 。

ソフトウェアには、さまざまなアーキテクチャが多数あります。非常に単純な形式は、「入力の取得、処理の実行、出力の書き込み」ループです。より複雑な形式には、ポーリング、割り込み、またはマルチスレッドが含まれます。OS依存アプリケーションとベアメタルアプリケーションの両方で、これらのアーキテクチャをすべて使用できます。

これらの3つの問題は独立しています。たとえば、ファームウェアはベアメタルで実行でき、マルチスレッドアーキテクチャを使用できます。または、ファームウェアは、単純なget-do-writeループアーキテクチャを使用するフロッピー(申し訳ありませんが、フラッシュカード)からアプリケーションをロードするオペレーティングシステムです。


5

OSとCPUは異なる概念です。はい、CPUはマシンの中心にあるハードウェアの主要部分です。ファームウェアのメモリからファームウェアの命令をフェッチして実行します。(ちなみに、小さなシステムでも並列実行用に複数のCPUを搭載することは一般的です。そのため CPU についてのみ話すのは少し時代遅れです。)

ファームウェアは、不揮発性(またはおそらく読み取り専用の)メモリに格納されるソフトウェアです。このようなメモリ内にあるため、マシンの電源を入れたときにファームウェアを使用できます。マシンは、電源がオンになるとほぼ即座にファームウェアの実行を開始します。または、いくつかの小さなブートプログラム(それ自体のファームウェア)は、フラッシュなどの電子ストレージからより大きなファームウェアをプルしてRAMに入れ、実行することができます。最近のフラッシュストレージの使用は、アップグレード手順についての「新しいファームウェアのフラッシュ」というフレーズを耳にすることがあります。ファームウェアは、このように簡単にアップグレードできる必要はありません。集積回路チップ上にある場合があるため、デバイスを新しいファームウェアに更新するには、集積回路(「EPROMチップ」)をソケットから取り外し、新しいものに差し込む必要がある場合があります。PC BIOS ' この方法で更新されていたsと、他の無数のデバイス。これは本当に言葉の由来です。一部の人々は、プログラムを「ソフトウェア」と呼ぶことに不快でした。チップまたは回路基板を交換して交換する必要があり、ハードウェアアップデートのように見える場合です。したがって、「ファームウェア」は造語であり、ソフトウェアよりも変更が「難しい」ものです。

ファームウェアは、「完全な」オペレーティングシステムにすることができます。たとえば、トマトはワイヤレスルーター用のLinuxベースのファームウェアです。

http://www.polarcloud.com/tomato

ssh経由でTomatoにログインし、Linuxプロンプトを取得できます。したがって、これは高度なオペレーティングシステムであり、ファームウェアです。ただし、ルーターにハードディスクがあり、起動時に同じOSをそのディスクからロードする必要がある場合、正当にファームウェアと呼ばれることはありません。ファームウェアは、フラッシュメモリやEPROMチップなど、電源投入直後にプロセッサからアクセス可能な電子ストレージにある必要があります。

最近の多くのコンシューマデバイスは、アップグレード可能なファームウェアを備えています。たとえば、デジタルカメラを使用している場合は、そのWebサイトを見つけて、工場でインストールされたファームウェアに存在する可能性があるいくつかの問題を修正する新しいファームウェアバージョンが入手できないかどうかを確認する必要があります。比較的技術に詳しくないエンドユーザーでも、最近のファームウェアの更新は簡単です。前述のTomatoは、出荷時のファームウェアを置き換えるサードパーティのオープンソースファームウェアの例です。

「オペレーティングシステム」という言葉は、マシンのリソースを管理し、プログラムに適度に高レベルのサービスを提供する上である程度の高度で完全な制御プログラムを指します。ファイルシステム、ネットワークプロトコル、メモリ、プロセス管理などの機能、デバイスへの高レベルのアクセス、およびおそらくユーザーのいくつかのモデルとセキュリティ。これらのすべてがオペレーティングシステムに存在する必要はありません。通常、メモリ、プロセス管理、I / Oが重要です。制御プログラムが他のプログラムの実行を許可し、それらのプログラムに独自のリソースに関連付けるためのIDを与える場合、およびプログラムがプロセッサとメモリを管理し、I / Oを実行するためのサービスを提供する場合、その制御を呼び出す場合があります。オペレーティングシステムをプログラムします。

好奇心旺盛なので、ウィリアムスタリングスやヘネシーアンドパターソンによるものなど、コンピューターアーキテクチャに関するいくつかの教科書を本当に楽しんでいるかもしれません。


4

最も基本的なレベルでは、CPUは、自身の内部状態を変更したり、出力を生成したりする一連の命令を実行するステートマシンにすぎません。この概念を抽象化し、非常に高いレベルに洗練させれば、インテルから最新のデスクトップおよびモバイルプロセッサー製品を入手できます。しかし、基本的な原理はかなり単純です。約12のTTL集積回路を備えた非常に基本的なプロセッサを構築できます。1970年代初頭から中頃までのマイクロプロセッサは、デスクトップ計算機や信号機コントローラで使用するように設計されており、これよりもそれほど複雑ではありませんでした。 。明らかに、ムーアの法則はこれをまったく別のレベルに引き上げており、現代の高性能プロセッサは35年前の祖先とほとんど似ていません。

それでも、最先端よりはるかに複雑でないプロセッサ(通常はマイクロコントローラと呼ばれます)の巨大な市場はまだあります。これらは、たとえば、USBドライブにあるプロセッサの種類です。あなたの質問に対処するには-あなたが言及するデバイスの一部の機能がASICによって処理される可能性がありますが、同僚がスレッドや割り込みについて話している場合、これは通常、おそらくマイクロコントローラ上にCPUが関与していることを示しています。これらは、ALU、レジスタ、プログラムカウンタ、スタックなどを備えているという意味で、確かに本格的なコンピュータですが、非常に低消費電力で非常に安価であり、何百ものx86アーキテクチャ。

これらのデバイスに、コンテキスト切り替えの種類や概念のオペレーティングシステムが含まれている必要はありません(場合によっては可能です)。アプリケーションに必要なのは、プログラムの命令を1つずつ実行することだけです。もう1つ、そしてあなたが言うように、それは確かに非常に単純なプログラムかもしれません。


1

一部の許可を除いて、CPUはOSまたは他の種類のプログラムからの実行コードかどうかを認識しません。CPUにとっては、メモリからフェッチされた命令を実行するだけです。

オペレーティングシステムとは何かを忘れないでください。常にメモリにあり、複数のタスクを安全に処理およびスケジュールするプログラムです。独立したタスクを説明するために使用する用語は「プロセス」です。OSは、プロセスがリソース(ハードウェア、メモリなど)を安全に共有し、実行をスケジュールして優先順位を付けることを可能にします。また、プロセス間通信などの機能も提供します。これはすべて、複数の並行タスクをサポートする必要性から生じます。いくつかのアクセス許可レベルを除いて、CPUに対しては、命令OSを実行するか、OSを実行しないだけです。違いはわかりません。

マイクロコントローラーのファームウェアを作成する場合、通常、タスクを管理するためにメモリにこの追加プログラム(OS)が常にあるわけではありません。どうして?複数の同時タスクは必要ないため、組み込みシステムは通常、1つのアプリケーションだけを実行するように設計およびプログラムされています。これは、非常に柔軟で、あらゆる種類のアプリケーションを一度に実行できることが期待されるPCとは対照的です。

1つのプロセスが別のプロセスのメモリスペースを占有して破棄したり、1つのプロセスがすべてのCPU時間を消費したりする心配はなくなりました。これは、システム上で実行されている唯一のプログラムであるため、すべてのリソースにいつでもアクセスできる単一のプログラムを作成しているため、OSのような別のプログラムで管理する必要がないためです。繰り返しになりますが、CPUにとっては、メモリからフェッチされた命令を実行するだけであり、OSまたはOSの違いを区別できません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.