2

組み込みアプリケーションで使用している Intel ベースの SBC を持っています。Fintek Super I/O チップに接続されたデジタル IO (DIO) ポートがあります。このポートの出力ラインのビットを設定して、他のハードウェアを制御できるようにしたいと考えています。

幸いなことに、製造元の BIOS には、これを行うための機能が付属しています。

AX=6F09h
bl=<bits>
int 15h

残念ながら、保護モードで 64 ビット Linux を実行しています。ユーザー空間プログラムから、または必要に応じてカーネルドライバーとして、その BIOS 割り込みを呼び出す方法はありますか?

代わりに、Fintek チップに直接レジスタを設定することもできますが、これには、チップのどのピンが DIO ヘッダーに接続されているかを正確に知る必要があり、もちろん、これはボードのリビジョンごとに異なります。

4

3 に答える 3

1

まず第一に、割り込みが存在するメモリを Linux が上書きしないようにする必要があります。

簡単で壊れない OS ランタイムの方法でリアル モードに移行することはできません。割り込み関数がメモリ内のどこにあるかを見つけ、ある種のエミュレータを使用してその 16 ビット マシン コードを解釈し、64 ビット ロング モード プロシージャを実行する必要があります。このトピックの詳細については、 OSDev フォーラムOSDev Wikiを検索してください。

(ヒント: 保護モードでの VESA の使用に関する質問を探してください)。

于 2012-02-14T20:22:26.040 に答える
1

お使いのディストリビューションには、おそらくlibx86のパッケージが含まれています。libx86 は、x86 では lrmi (DPMI の反対) を使用し、x86-64 では x86 エミュレーターを使用します。AFAIK vm86 モードは 64 ビット モードからは使用できないためです。

于 2012-02-14T22:53:12.633 に答える
0

以前にプロトタイプ用にブートローダーに挿入しましたが、引き継がれない可能性があります。「以前の場所」に基づいて、チップの場所を使用してハードウェアまたはフッツを修正します。

于 2012-02-16T05:19:49.760 に答える