web-dev-qa-db-ja.com

自分のBIOSを書く

私は夢中ではない、ただ車輪を再発明する:D
ブートローダー、マウスとキーボードのミニドライバー、ミニOSなどを作成しました。

私は常にDOS割り込みを避け、BIOSのみを使用して、単一のミニOSを進めようとしていますが、突然自分のBIOSを書くことにしました:)

伝説によると:
私は高レベルのプログラマであり、その後低レベルのプログラマでした。いつか私は機械語のプログラマーになります!

BIOSはアセンブリで書かれていますか?どうすればフラッシュできますか?メカニズムは何ですか?現在のBIOSの編集を開始できますか?

32
Ahmed Ghoneim

BIOSはアセンブリで作成できますが、そうする必要はありません。コンパイラの呼び出し規約と一致しないため、システムコールのパラメーターを取得する必要がある部分があります。

どのようにフラッシュしますか?マザーボードごとに異なりますが、オープンソースの仮想マシンから始めて、そのためのBIOSを作成します。または、BIOSを記述した仮想マシンを作成します。メカニズムはベンダーによって異なります。一般的に、DOSを起動します(DOSは死んでいません。PCの世界、特にマザーボード開発と組み込みシステムで非常に活発です)。実際のマザーボードをいじることはありません。これらの質問のすべてに対する答えがわからない場合は、その道をたどると多くのマザーボードをレンガにすることになります。

マザーボードのBIOSアップグレードを試して、リバースエンジニアリングを行うことができます(ただし、クリックスルー契約はおそらくないということですが)。あなたがそれを理解するなら、あなたはそれをロードすることができて、でハックすることができます。私はそこには行きません、あなたはそれを理解する前にあなたのシステムを破壊します。

ビオスを書くことは本当にあなたが何をしているのですか?かなり古い学校は、楽しみのために6502コードを書くようなものです。より有用で興味深い興味深い低レベルの問題が数多くあります。

Asmを書くことができれば、ライティングマシンのコードはそれほど難しくありませんが、楽しんでください。 x86は恐ろしいため、他のシステムとそのasmおよびマシンコードの学習(およびそれらのオペレーティングシステムの記述)に時間を費やす必要があります。 ARMは世界を支配し、BIOSに依存しません。非x86システムでビデオカードを取得するには、x86でx86で何かをいじる必要があると言われました。 BIOSは、x86 BIOSを実行せずにメインストリームビデオカードを起動する方法を見つけ出すことができます。エミュレータでBIOSを実行し、その動作を確認し、BIOSを実行せずにその電源オンinitを置き換えます...命令セットシミュレーターまたは逆アセンブラーの作成は、マシンコードの作成を超えた次のステップです。x86で1秒も無駄にしませんが、代替のリストを提案できます(または、作成したシミュレーターで遊ぶか、集めました)。

X86のBIOSを使用したい場合、最良の方法は、qemu、virtualboxなどの仮想マシンのBIOSを作成、置換、またはハックすることです。そのbiosを自分のものに置き換えると、おそらくディレクトリ内のファイルを置き換えるか、コマンドラインオプションを使用して代替biosを指定することになります。その経験が豊富な場合、レガシーBIOSを搭載したマザーボードがまだある場合は、プログラミングにハッキングすることができます(いくつかの種類のマザーボードを購入するときに、いくつかの種類のマザーボードを購入する必要があります)。 20ドルから200ドルで同じレベルの経験を積むことができる非常に多くの組み込みシステムがあるため、まともな回路図とドキュメントなしでPCマザーボードをハックすることは意味がありません。回路図とBIOSのリストが記録され、BIOSがソケットに接続されているオリジナルのPCを掘り下げることができます。そのため、BIOSが起動しない(マザーボードを破壊しない)場合は、BIOSを再プログラムまたは交換できるレンガではありませんチップ。おそらく、より多くのBIOSチップを再プログラムするための適切なハードウェアを見つけることはおそらく、元のPCが動作していることを見つけるのが難しいため、マイクロコントローラを使用して偽のBIOSとしての役割を果たしたいと考えています...たとえば、レガシーシステムコールの背後に最新のハードウェアを配置するなど、BIOSを改善/調整していただければ幸いです。

24
old_timer

IBM PC互換コンピューター用のBIOSを作成したい場合(これは現在のデスクトップPCの大部分です。ただし、CPU命令セットといくつかの異なるBUSインターフェースへの拡張機能は追加されています)、IBM PCIBM PC XT、およびIBM PC ATテクニカルリファレンスマニュアル。特にIBM PC ATマニュアル、それが事実上の標準です。

これらのマニュアルには、IBMがコンピューターで使用した完全なBIOSのプログラムリストがあり、アセンブリ言語になっています。それらを見つけるためにそれらのマニュアルを少し探す必要があるかもしれません(特にIBM PC AT one)。うまくいけば、それらのBIOSがあなたを始めさせます。

1
SeanRamey

BIOSは任意の言語で作成できますが、低レベルの言語ではより多くの制御が可能です。アセンブリとマシンコードはほぼ同じです。違いはマイクロコードインターフェースと入力内容です。マシンコードの場合は2文字のみを入力し、アセンブリは英数字を入力します。カスタムBIOSを探すのは、数時間ごとにコンピューターを起動する必要があり、それを行うBIOSが見つからなかったときに始まりました。

BIOSをフラッシュするには、製造元のガイドラインに従ってください。 BIOSがUEFIに置き換えられました(セキュリティを強化するため)。チェックアウト: https://www.pcworld.com/article/187437/how-to-update-your-bios.html

x86およびAMD64命令リファレンス: https://www.felixcloutier.com/x86/
x86命令の拡張機能: https://en.wikipedia.org/wiki/X86_instruction_listings
i386命令ref: https://css.csail.mit.edu/6.858/2014/readings/i386.pdf
x86アセンブリガイド: https://www.cs.virginia.edu/~evans/cs216/guides/x86.html
Intel命令セット参照: https://software.intel.com/sites/default/files/managed/a4/60/325383-sdm-vol-2abcd.pdf

1
Zimba

FWIW ModbinはDOSプログラムで、その名前が示唆するように、特に既存のBIOSコードに対する単純なqndのかなり極端な変更の両方の目的でBINイメージを変更します。

古いモボを入手できる場合(多くは捨てられたままでも動作します)、BIOSを試してみることをお勧めします。それは有益で楽しいです、もしあなたがそうであるように思えるなら:)別のメーカーによって作られたものの、時にはかなりの利点があるように、同じまたは類似の十分なチップセットを持っているモボからBIOSイメージをダウンロードしたことがありました元のモボメーカーがボールを落としたり腹を立てた後もBIOSの更新を取得し続けるといった単純なものだけでなく、機能やパフォーマンス指向のオプションや変更もあります。

これは「HOT Flashing」につながり、ソケット付きのBIOSチップを引き上げて、ピンがかろうじて接触して起動すると、そのピンを引っ張って悪いもの(多くの場合、私はfuxoredを持っているもの)を代わりに使用しながらフラッシュしますシステムをアクティブに保つキャッシュBIOS機能。オタクの説得力のある私たちにとって楽しいものであり、OS/2のデバイスドライバーを書く自信がありました。

1
Jmes Hanley

おそらくPCを実行させる以外に、BIOSをフラッシュする方法があります。しかし、それはいくつかのハードウェアを必要とします。あまり高価ではないはずです。

次のようなテクニックを試すことができます: http://hackaday.com/2010/11/18/build-your-own-soic-progamming-clip/

私が今日見たこの講演: https://conference.hitb.org/hitbsecconf2015ams/sessions/how-many-million-bioses-would-you-like-to-infect/

感染症を探しているわけではないかもしれませんが、より詳細に説明しましたが、BIOSに到達するためのテクニックがいくつか取り上げられており、プログラミングクリップもその1つです。

0
hallo