ファームウェアコードまたはデータですか?


29

誰かがファームウェアをデバイスに「フラッシュ」したと言うと、これが実際に何を意味するのか興味があります。

  1. ファームウェアはメモリに格納されているネイティブバイナリであり、デバイスのCPU(コンピューター上の他のEXEと同様)によって解釈できるものですか?または、ファームウェアは、デバイスにすでにハードコーディング/配線されている不変プログラムへの入力として機能する単なるデータですか?
  2. 後者の例がファームウェアでない場合、何と呼びますか?たとえば、デバイスにバイナリ(someapp.exe)があり、このバイナリを削除または変更できないとします。バイナリは、実行されると、メモリチップから入力を受け取ります。このチップにデータを「フラッシュ」することができます。したがって、その入力/構成にsomeapp.exe影響を与え、次回の実行時に影響を及ぼします。ファームウェアでない場合、これは何と呼ばれますか?

12
これは本当に良い質問です。「私のトースターは乾杯しません。そこにアルドゥイノを入れることはできますか?」質問。
Jason_L_Bens

17
さて、この質問にはなりコードは:良い、そうでない場合はそれで大きな欠陥こと、データ、およびデータをすることができ、コード-限りノイマン型/モデルに関しては。したがって、コード全体がデータとして扱われる可能性があるため(また、通常はそうであるため)、質問全体が無駄になっています。また、OP:en.wikipedia.org/wiki/Firmwareをチェックしてみませんか?このまさに質問に対する答えと、ファームウェアに関する他の多くのことに対する答えがあります-したがって、「12V電球を230Vソケットに接続できますか」という質問からのいい休憩です、それ私の本ではまだ標準以下です。 。
vaxquis

2
ここでの答えは「はい」だと確信しています。
コナーウルフ

7
マシンコードは、CPUの不変の配線への単なるデータ入力です。
user253751 14

2
本は言葉ですか文字ですか?
ニックT 14

回答:


27

このような定義ではよくあることですが、ほとんどの場合は同意しますが、ファームウェアとそうでないものとの間に明確な境界はありません。ファームウェアは

  • 永続的に保存されます(変更できる知識のある人を除き...)
  • 変更することを意図していない(...を除く)
  • 他のソフトウェアの助けを借りずにプロセッサ上で動作します(...を取得しますか?)

(ファームウェア)インタープリターによって解釈されるデータについて:これは、製品をより高価にするため、プロの設定では頻繁に行われません:同じ最終目標を達成するには、より多くのメモリ、CPUパワーなどが必要です。それはされしかし、時には、多くの場合、フラッシュでの基本的なインタプリタ、および(あまりまたはFlashで)EEPROMに保存されている(トークン化)の基本的なアプリケーションで、趣味の設定で使用します。たとえば、PICAXEおよびさまざまな基本スタンプを確認してください。

このような設定のIMOは、BasicインタープリターとBasicアプリケーションの両方をファームウェアと呼ぶ必要があります。


保管されたコードを解釈するファームウェアインタープリターの興味深い使用法(IMOもファームウェアと見なされるべきです)は、XBOX 360の起動です。この素晴らしい講演では、それについてある程度詳しく説明しています。


以下のMSaltersは、FPGAコード/構成データをファームウェアと見なすべきかどうか疑問に思っています。

最も重要な側面(生産プロセスの後半で変更可能な情報ですが、エンドユーザーが自由に変更することを意図していない情報)では、FPGAビットはファームウェアのように動作します。それは、それ定義の意味に従ってファームウェアであるかどうか疑問になります。重要な点は、ファームウェアのように記述、処理、管理できることです(そしてそうすべきです)。(それが歩いてアヒルのように鳴る場合、それはアヒルですか?)

定義が役に立たないときは気にしないでください。マイクロコードファームウェアですか?表現は重要ですか?コンテキストは重要ですか?IWMファームウェアのROMビットはありますか?


OPの質問に対するVaxquisのコメントは、彼がリンクしているWiki記事を読むように促しました。IMOに与えられたファームウェアの定義(永続的なメモリとプログラムコードとそこに保存されているデータ)は面倒です。IMOは、カーナビゲーションシステムに格納されているマップは、格納方法に関係なく、ファームウェアではなくデータです(wikiによれば、ファームウェアである必要があります)。また、iPhoneまたはAndroidスマートフォンのアプリケーションは、ファームウェアではなくアプリケーションです(wikiによると、ファームウェアであるべきです)。


FPGAプログラムがファームウェアとしてカウントされるかどうか疑問に思っています。直観的にはい、しかし、プロセッサ上では動作しません。それでも、これはコードとデータの中間にあるビットの古典的なケースです。
MSalters

TI 99/4コンピュータ(1979)には、GPLと呼ばれる言語のROMにインタープリターと、GPLで書かれたBASICインタープリターが含まれていました。GPLの重要な機能は、GROMチップ(主にシーケンシャルアクセス用に設計されており、ランダムアクセスROMよりも物理的に小さく安価にできる)に格納されたコードを実行できることでした。 -BASICスタンプのデザインに類似したデザインの市販のパソコン。
-supercat

14

ファームウェアは、フラッシュメモリなどの不揮発性メモリに保存されるプログラムコードです。この用語は、ほとんどの場合、組み込みシステムに関連して使用されます。プロセッサと同じチップ、または別のデバイスに配置できます。


@Leon Heller(+1)に感謝-上記の2番目の例には、入力データをチップ上の固定バイナリに「フラッシュ」するという名前がありますか?または、これは一般的に実践されていませんか?再度、感謝します!
HeineyBehinds

それは単なるデータです。揮発性または不揮発性メモリに保存できます。
レオン・ヘラー

#2に使用する用語は「ルックアップテーブル」です。私が考えることができる例は、数値制御発振器に使用される正弦関数値です。
kjgregory

1
それは、ルックアップテーブルとすることができ@KGregory、それは解釈プログラムすることができ、それは画像データとすることができます...
glglgl

@glglglは同意しました。それらはルックアップテーブルの形式と考えることができると私は主張するかもしれませんが、私たちは今ポイントの脇にいると思います。
kjgregory 14

9

マイクロプロセッサをさまざまな抽象化レベルで見るだけで、どちらのオプションも正しいと思います。不変のバイナリとして言及しているのはハードウェアそのものであり、その機能はかなり制限されています。命令アドレス0x0000のフェッチ、命令のデコード、供給されたアドレス/レジスタのフェッチ、実行、命令カウンタのインクリメント。それがマイクロプロセッサのパイプラインであり、変更することはできません。命令をメモリに保存することにより、マイクロコントローラの動作を制御します。その後、命令が順次読み出されます。基本的に、はい、ファームウェアは、抽象度が低い不変のプログラムの入力データにすぎません。ただし、通常、ファームウェアをマイクロプロセッサを制御する特別なプログラムと考える方が簡単です。概念的には、その方が簡単だからです。


この答えが大好きです、+ 1、データとコードを強調するためによくやったことは、結局同じことです。
バリティ14

少なくとも、フォンノイマンアーキテクチャでも同じです。別々のバスを手に入れたら、それらは異なるものであると主張し始めることができますが、それは結局のところほんの少しです。
Jason_L_Bens 14

8

実際は両方です。

ファームウェアの一例はPC BIOSです。BIOSの1つのセクションは実行可能ですが、BIOS自体の他の部分は実際にはデータです。具体的には、表示するテーブル内のBIOS ROMのさまざまな機能を列挙するために、技術の種類に関係なくに。多くの場合、データは、別のフラッシュメモリ、バッテリ、またはコンデンサでバックアップされたRAM、CMOS SRAM、または互換性のある別のメモリチップテクノロジーのいずれかに保存されます。

ファームウェアは、不変/不揮発性メモリに使用される一般的な用語であり、回路に電気的に問題がない限り、またはEEPROMまたはフラッシュの場合はプログラミングサイクルが止まっている限り、電源サイクルごとに存在し、アクセス可能ですROM。

定義により、ファームウェアは、システムまたは組み込みコンポーネントにインストールしたハードウェアを初期化し、テストし、オペレーティングシステムがコンポーネントを使用するために必要な低レベルのルーチン(BIOS関数呼び出しと呼ばれることもある)を提供する、最低レベルのアクセスですシステム内。昔、BIOSまたは基本入出力システムには、コモドール64や1970年代の他のパーソナルコンピューターなどの「BASIC」と呼ばれるプログラミング言語も含まれていました。もちろん、使用のためにBASICが組み込まれた古いコンピューターもありましたプロのコンピューター科学者によっても。エグゼクティブまたはプログラムROMの純粋なデータ形式であるキャラクターまたはシンボルROMを聞いたことがあり、システムがそのキャラクターROMに移動し、キャラクターをシーケンスで検索したり、チップ全体をRAMにダンプして作業したりする場合そこ。

デフォルトのPROM、EPROM、EEPROM、Flashプログラマーは、同様の形式である.hexまたは.binのサフィックスを使用してファームウェアをチップに書き込みます。これは、チップに送信するために使用しているアプリケーション、ファームウェアによって異なります。

また、ファームウェアblobファイルがあります。これらは実行時に読み込まれるライブラリおよびルーチンの形式の実行可能ファイルです。その良い例はワイヤレスハードウェアドライバーで、これらのカードのすべてのハードウェアを実行するのに十分なコードが含まれていますコンピューターシステム。唯一の違いは、カードとUSBベースのファームウェアが実際にそれらに保存されるのではなく、ハードディスクに保存され、メモリにロードされることです。基本的に、翻訳サービスのレイヤーおよびフィルターとして機能します。データとコードの両方です。

これの基本は、他のコンピューターと組み込みシステムのBIOSを実際に書くことです(たとえば、オペレーティングシステムの起動時に実際に読み込まれ、ランタイムファームウェアを含む低レベルのハードウェアドライバーの読み込みを開始するワイヤレスファームウェアなど) )。ファームウェアと呼ばれるのは、製造元から更新プログラムを入手し、その更新プログラムが古いものを上書きしない限り、ルーチンを変更しないためです。この場合、新しいものが更新されるまで新しいファームウェアとして機能し、そうでない場合は、オペレーティングシステムのロード時に使用するファームウェアになります。

私は同意します、永久的な解決策として技術的にチップ上になく、ファームウェアをアップするための特別なツールとアプリケーションを必要とするため、ファームウェアと呼ばれるべきではありません(古いBIOSの場合とフラッシュメモリの場合)。

他に質問がありましたら、お気軽にお問い合わせください。


6

ファームウェアは、ソフトウェアコードのように、何らかの開発環境で作成されたコードですが、CPUが理解できるように、マシンコードに要約されます。マイクロコントローラまたは他のチップのメモリをダンプすると、Cコードやプログラムの内容とはまったく異なることに気付くでしょう。

そのため、.EXEをプログラムしないでください。これは、ある種のOS環境で実行されるコンパイル済みプログラムです。通常、.hexまたは.elfをプログラミングします。プログラミングしているデバイスによって異なりますが、コンパイラは代わりにコンパイルするため、ファイルの種類を気にしないので問題はありません。マシンコードにコードダウンし、チップのオンチップフラッシュまたはそれが持っているストレージスキームに配置します。

ファームウェアは通常、環境条件をプログラムする必要があるという点で不変です。ファームウェアコードを変更してそのままにしておくことはできません。変更を加え、コンパイルし、デバイスを再フラッシュする必要があります。

  • 一般に、ソフトウェアコードは、オペレーティングシステム上で実行されるコードです。
  • ファームウェアコードは、チップのベアメタルで実行される情報です。ファームウェアは、実際のアプリケーションプログラムでも、簡単なオペレーティングシステムでもかまいません。リムーバブルストレージまたは組み込み環境のフラッシュRAMを介してソフトウェアをロードできます。このレベルはまだバイナリコードであるため、ずっと下に行くことができます。
  • 電圧で直接作業を開始すると、ハードウェアレベルに達しました。

2
「しかし、それはCPUが理解できるように、マシンコードに要約されます。」Cなどで書かれている限り、ソフトウェアコードも同様です。
glglgl

1
プロセッサが理解しているのは、はい、バイナリですが、まだアセンブリ言語でプログラムしている私たちにとっては、ニーモミック操作コード(業界ではオペコード)と呼ばれるものがあります。 ])。

0

ファームウェアは、ソフトウェアの世界とハードウェアの世界の中間にあるものを指定するために一般的に使用される一般的な用語です。

ハードウェアの変更は困難です。ソフトウェアは簡単に変更できます。ファームウェアはハードウェアほど変更するのは難しくありませんが、ソフトウェアより変更するのは困難です。

変更可能な実行可能コード、データ、または構成情報(FPGA / PLD / etcなど)について議論するために使用できます。


広義の言葉と定義では、それは真実です。ただし、これらのチップは実際にはコードでもデータでもありません。コンパイラは、完全なソリューションとして、またはシステムのさまざまな部分をつなぎ合わせるためにロジックを接着して、論理設計を作成します。物理的な74および54シリーズの論理ゲートとレジスタを使用してソリューションを作成する代わりに。アダム、これを持ってきてくれて本当にうれしいです。

0

内観からのファームウェアとは何かをさらに説明するため。

ファームウェアは、非常に特定のハードウェアで実行されるコードです。つまり、オペコードは、記述されているハードウェアに固有のものであり、チップまたはインターフェースのファミリーであるか、1つのアイテムのみを意味します。

基本的にファームウェアが行うことはこれです。

  1. 特定のプロセッサが引き受けて実行するための固定命令を備えています。これは「ブートストラップ」と呼ばれます。最もブート可能なコンピューターのBIOSにこれがあります。

  2. ファームウェアの指示を使用して、上記のハードウェアを初期化します。

  3. ジャンプテーブルをロード/アップします。

  4. 特定のデバイスのレジスタへのアクセスをアクセス可能にします。

  5. コールド(電源オフ状態)またはウォームスタート(通常の再起動またはリセットピンが使用された)後にBIOSが使用されたら、終了ルーチンに制御を渡します。

  6. ほとんどのBIOS(ファームウェア)は、特定のチップセットを念頭に置いて設計されており、それらのすべての機能を根絶し、コンピューターまたは組み込みデバイスの特定のバスラインに何かを付加できるデータを具体化します。

  7. ハードディスクは、それ自体が組み込みデバイスであり、BIOSもチップ上にファームウェアの形式を持つストレージソリューションの良い例です。

本質的に、すべてのファームウェアは、別のプロセッサが上記デバイスから機能を引き出すために行う一連の命令です。物理デバイスにロードされるのはソフトウェアであり、電力が失われると、デバイスが電力を回復するとそこに存在します。

技術的には、任意のプログラミング言語またはスクリプト言語を使用してバイナリファイルを作成できます。対象となるプロセッサの動作、実際のオペコード、内部レジスタ(目的は言うまでもありません)、バイナリおよび16進数システムの学習、および保存可能なアセンブラの作成方法を知る必要があります。アセンブリ言語のコード。それが完了したら、別のプログラムにタスクを実行してバイナリに変換し、それを.binまたは.hexファイルとして保存します。

Ada、C、C ++、D、およびその他のプログラミング言語がネイティブトークンである「トークン」を擬似オペコードに切り分けて機械語に変換する方法を知りたい場合。あなたが読むことをお勧めするいくつかの本があります、いくつかは非常に初歩的で、非常に特定のプロセッサーを中心にしていますが、学ぶのは良いことです。とりあえず一冊の本を差し上げます。あなたや、これを情報で読んでいる人をanyoneれさせたくないからです。

  1. Charles C. Fischer&Richard J. LeBlanc、Jr.による「C」によるコンパイラの作成
  2. このサイトにアクセスしてください。IBMPCにあるx86チップセットに基づいています。 http://www.laynetworks.com/assembly%20tutorials.htm

これは、最初の段階でのPCでのアセンブリ言語プログラミングの概要です。割り込み(ハードウェアとソフトウェアの割り込み)の処理やその他の多くのトピックについて説明し、BIOSが実際に行うこととその操作方法について詳しく説明します。

アセンブリ言語や機械語とは異なり、ハードウェアの詳細がわからない場合は、Ada、C、C ++、Dでさらに多くのことを回避できます。アセンブリ言語と機械語では、何をしているのかわからない場合、何か悪いことが起こるか、コードが機能しません。私は後者の方が好きで、仕事ではなく悪いものです。

注:上記の回答、フラッシュRAMについては、そのようなことはありません。フラッシュROMはありますがフラッシュRAMはありません。フラッシュROMには、ファームウェア、バッテリーまたはキャパシターバックアップのRAM、または設定したBIOSオプションのパラメーターを含む別のフラッシュROMがあります。

ファームウェアがフラッシュROMまたはRAMチップである場合、データメモリを保存または消去する方法に関するコードがあります(プログラムメモリ/ファームウェア自体に対して)。PCでBIOSパスワードが文字化けした場合、または覚えていない場合(または誰かがあなたを混乱させている場合)、ケースを開いて「CMOS CLR / CMOS CLEAR / BIOS RESET / BIOS RST」と呼ばれる2つのピンを見つけることができます。これらの2つのピンを一緒にショートさせると、メモリもクリアされます。その後は、2つのピンがまだショートしているときにリセットボタンを押すだけで済みます。これにより、パスワードがクリアされ、PC BIOSに完全にアクセスできるようになります(1990年代以降に新しいコンピューターを使用する場合)。

新しいPCには、ファームウェア用のフラッシュメモリがあり、バッテリーでバックアップされたSRAMがあります(DRAMチップのように常に更新する必要はありません。古い技術に基づいています)。


0

組み込みシステムに関しては、ファームウェアのフラッシュとは、フラッシュデバイスを使用してマイクロコントローラーのROMを消去し、新しいコードで書き換えたことを意味します。フラッシュされるこのファームウェアは16進数形式です。

OS関連の用語では、ROMでもフラッシュされますが、今回は更新が来たときにフラッシュするのはOSの責任です。


0

「歴史的」観点を使用することで、ファームウェアとは何かをより基本的に理解できると思います
最初は「ハードウェア」から始まります。特定の機能を提供/作成するには、チューブ、リレー、トランジスタ、およびICを使用できます。これらのコンポーネントを多数使用し、必要な機能を実行するデバイスを作成します。これは「ハードウェア」と見なされました。機能を変更したい(または必要な)場合は、ワイヤ、ソケットなどのはんだ付けを解除する必要があるためです。「ハード」でした。したがって、機能を実装するこの方法は、ハードウェアの使用として知られるようになりました。CPU、RAM、およびコードを使用して、関数を作成する別の方法となり、「ソフトウェア」として知られるようになりましたしかし、(主にメーカーから)できるだけ早く設計を完了する必要がありましたが、「最後の瞬間」の設計変更を可能な限り簡単で費用対効果の高いものにすることができます。 ROMを使用すると、「最初の出荷」までこの柔軟性が得られました。EEPROMは、「最初の出荷」後(フィールド内)でも変更できます。ROM およびPROMに必要/使用されるコードは、「ファームウェア」 」

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