[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:87058] Re: Linux でint 15h


山崎です.

cyber205 さん, ありがとうございます.

>>>>> In [linux-users : No.87036] 
>>>>>	"CYBER205 _at_ d3.dion.ne.jp" <cyber205 _at_ d3.dion.ne.jp> wrote:
> > > [Linuxのユーザモードから直接int15hを]なぜ呼べないのか, 
> > > どうしたら呼べるのかについて情報がありましたら教えてください.
> > 
> >  何故直接呼べないかというと、DOS が real mode で動いている
> > のに対し、Linux は protected mode で動いているからです。そし
> > て BIOS は一般に real mode を想定して書かれています。
> 	:
> > 擬似的に real mode を用意してあげてから呼ぶ必要があります。
> >  この擬似的な環境を virtual 86 mode と言い、この用途のため
> > に wrapper として用意されている枠組みの例としては DPMI があ
> > ります。
> >  この DPMI と同じようなものを自分で作成してやることで、初め
> > て Linux から BIOS call が可能となります。

> 初期のBIOSコール(INT13 DiskBIOS等)はreal modeを前提にしたインタフェイス
> ですが、apmは比較的新しいBIOSコールなのでreal modeオンリーではありません。
> APMBIOSにはリアルモードで動く側(AX=5301H INT15)と、プロテクトモードで
> 動く側(16Bit:AX=5302H INT15,32Bit:AX=5303H INT15)からのインタフェイスがあり、

> Linuxは普通、APMBIOSのプロテクトモード側インタフェイスをアクセスします。
> # 確か、BIOSコールでインタフェイスをチェーン状に登録する…といった方式で
> # 管理していたような…。(私も、詳しいことは忘れてしまったんですが…)

apm_bios_call の lcall がよくわからなかったのですが,
この部分がプロテクトモードでアクセスということでしょうか.

Interrupt List を見直してみると確かに

INT 15 - Advanced Power Management v1.2 - GET/SET/DISABLE RESUME TIMER
	AX = 5311h
       :
Notes:	this function is supported via the INT 15, 16-bit protected mode, and
	  32-bit protected mode interfaces

とあってプロテクトモードでサポートされているようです.

しかし, プロテクトモードでのコネクションを張るにはリアルモードから
16Bit:AX=5302H INT15,32Bit:AX=5303H INT15 を呼ばないとけないので, 結局
問題は, カーネルを利用して, レジューム時刻をどうやって dx, si, di にセッ
トするかということになります.

> そういや、APMが出たばかりのBuggyなBIOSだとプロテクトモード側の
> インタフェイスがタコで動かないため、Linuxにはそれに対応する
> カーネルコンフィギュレーションとして、
> 「General setup -> Use real mode APM BIOS call to power off」
> なんていうメニューがありますね。こちらはDPMI的なことをしているかも。

CONFIG_APM_REAL_MODE_POWER_OFF を Y にしないと電源 OFF に
ならないとばかり思っていたのですが, BIOS の問題だったのですね.

> P.S
> この他ACPIや、PCIBIOSとかもプロテクトモードに対応しています。
> 詳しくはPhoenixのサイトでダウンロードできる規格文書(英文PDF版)だとか、
> AMDの486互換統合チップELAN SC400のマニュアル(日本語PDF版)
> なんかが参考になると思います。
> 確かACPIの資料ははIntelからダウンロードしたかな。

ACPI を入れてカーネル再構築してみましたが, 正確なメッセージは控えてい
ませんが, dmesg に「テーブルが見つからない」とあったので,
やはり, ACPI は対応していないと思います.

> ちょっと古い資料でよければ、PC/AT互換機、もしくはMSDOSマシンの、
> 割り込みとそれを利用した各種OSのAPI、I/Oポート、一部チップセットの
> 内部レジスタやRTC等周辺機器の情報までまとめあげた英文の凄い資料が
> simtelnetにありました。
> # Ralf BrownさんのInterrupt Listとか言ってたような気がする…。
> # 多分今ならWebからでも参照できるんじゃないかな。

http://www.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
    Interrupt List by Ralf Brown

http://www.microsoft.com/hwdev/download/busbios/apmv12.zip
http://www.microsoft.com/hwdev/download/busbios/apm12_ch.zip
http://www.microsoft.com/hwdev/download/busbios/APM12FAQ.rtf
    APM BIOS Interface Specification

はダウンロードしましたが,

> あと…、MITのサイトにもPC/ATの各種BIOSを利用したプログラミング手法を
> 解説した文書のアーカイブがあったと思います。

こちらは, まだ見つかっていません.


--
yamasaki <d60a0410 _at_ ip.media.kyoto-u.ac.jp>

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: