山崎です.
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>
Follow-Ups:
- [linux-users:87101] Re: int 15h(LinuxとAPM)CYBER205 _at_ D3.DION.NE.JP
- [linux-users:87366] Re: Linux でint 15hIchiya KAMIKI
- [linux-users:86917] Re: Linux でint 15hd60a0410
- [linux-users:86922] Re: Linux でint 15hTakashi SHIRAI
- [linux-users:87036] Re: Linux でint 15hCYBER205 _at_ d3.dion.ne.jp
- Prev by Subject: [linux-users:87057] Re: hosts.allow
- Next by Subject: [linux-users:87059] Re: 最小限のシステムインストール方法は?
- Previous by thread: [linux-users:87036] Re: Linux でint 15h
- Next by thread: [linux-users:87101] Re: int 15h(LinuxとAPM)
- Indexes:[Main][Thread]