(57)【特許請求の範囲】
【請求項１】
電子機器に外部デバイスが接続されたとき、前記外部デバイスを前記電子機器のＯＳに認識させるためのデバイスドライバを選択する処理を、前記電子機器が備える演算装置に実行させるデバイスドライバ選択プログラムであって、
前記デバイスドライバ選択プログラムは、前記ＯＳの一部または前記ＯＳの内部モジュールとして実装されており、
前記電子機器は、前記デバイスドライバとして、
バイナリコードで実装されたネイティブデバイスドライバと、
実行環境に依存しないバイトコードで実装されたバイトコードデバイスドライバと、
を備えており、
前記デバイスドライバ選択プログラムは、前記演算装置に、
前記バイトコードデバイスドライバのうち、個別の前記外部デバイス毎に開発されているデバイスドライバを検索するバイトコード製品検索ステップ、
前記バイトコード製品検索ステップにおいて該当する前記バイトコードデバイスドライバが見つからなかった場合、前記ネイティブデバイスドライバのうち、前記外部デバイスの種別毎に開発されているデバイスドライバを検索するネイティブ種別検索ステップ、
を実行させ、
前記電子機器は、
実行環境に依存しないバイトコードで記述された常駐アプリケーションを常時実行しており、
前記バイトコードデバイスドライバは、
前記常駐アプリケーションの配下で実行されるバイトコードモジュールとして実装されており、
前記デバイスドライバ選択プログラムは、前記バイトコード製品検索ステップにおいて、前記演算装置に、
前記バイトコードデバイスドライバのうち、個別の前記外部デバイス毎に開発されているデバイスドライバを検索するように、前記常駐アプリケーションに対して依頼し、その結果を受け取るステップを実行させる
ことを特徴とするデバイスドライバ選択プログラム。
【請求項２】
前記演算装置に、
前記バイトコード製品検索ステップを実行させる前に、前記ネイティブデバイスドライバのうち、個別の前記外部デバイス毎に開発されているデバイスドライバを検索するネイティブ製品検索ステップを実行させ、
前記ネイティブ製品検索ステップにおいて該当する前記ネイティブデバイスドライバが見つからなかった場合、前記バイトコード製品検索ステップを実行させる
ことを特徴とする請求項１記載のデバイスドライバ選択プログラム。
【請求項３】
前記演算装置に、
前記ネイティブ種別検索ステップにおいて該当する前記ネイティブデバイスドライバが見つからなかった場合、
前記バイトコードデバイスドライバのうち、前記外部デバイスの種別毎に開発されているデバイスドライバを検索するステップを実行させる
ことを特徴とする請求項１または２記載のデバイスドライバ選択プログラム。
【請求項４】
前記ネイティブデバイスドライバと前記バイトコードデバイスドライバは、前記電子機器上の物理信号を制御するレイヤーよりも上位のレイヤーのデバイスドライバとして記述されている
ことを特徴とする請求項１から３のいずれか１項記載のデバイスドライバ選択プログラム。
【請求項５】
前記ネイティブデバイスドライバと前記バイトコードデバイスドライバは、ＵＳＢ規格におけるデバイスドライバレイヤーのデバイスドライバとして記述されている
ことを特徴とする請求項１から４のいずれか１項記載のデバイスドライバ選択プログラム。
【請求項６】
請求項１から５のいずれか１項記載のデバイスドライバ選択プログラムと、
前記ネイティブデバイスドライバと、
前記バイトコードデバイスドライバと、
前記デバイスドライバ選択プログラムを実行する演算装置と、
を備えたことを特徴とする電子機器。
【請求項７】
実行環境に依存しないバイトコードで記述された常駐アプリケーションを備え、
前記バイトコードデバイスドライバは、
前記常駐アプリケーションの配下で実行されるバイトコードモジュールとして構成されており、
前記演算装置は、前記常駐アプリケーションを常時実行する
ことを特徴とする請求項６記載の電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子機器に外部デバイスが接続されたとき、その外部デバイスを認識するための適切なデバイスドライバを選択する技術に関するものである。
【背景技術】
【０００２】
コンピュータや組込機器などの電子機器に外部デバイスを接続したとき、その外部デバイスを電子機器のＯＳ（オペレーティングシステム）に認識させるためには、デバイスドライバと呼ばれるプログラムモジュールが必要になる。このデバイスドライバをＪａｖａ（登録商標）言語によって実装する手法として、下記非特許文献１に記載されているものがある。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】ＪＳＲ８０  ＡＰＩ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ、ＵＲＬ：http://javax-usb.org/jsr80.pdf（２０１１年２月２１日取得）
【発明の概要】
【発明が解決しようとする課題】
【０００４】
外部デバイスが電子機器に接続されたとき、電子機器のＯＳは、インストール済のデバイスドライバのなかから、その外部デバイスに適したデバイスドライバを検索する。このとき、Ｊａｖａによって実装されたバイトコードデバイスドライバと、バイナリコードによって実装されたネイティブデバイスドライバとがともにインストール済である場合、ＯＳはまずバイナリコードで実装されたデバイスドライバのなかから適したものを検索し、見つからなければＪａｖａによって実装されたデバイスドライバを検索する。
【０００５】
また、デバイスドライバには、個々の外部デバイス毎に最適化して開発された製品毎デバイスドライバと、外部デバイスの大まかな区分（例えば、ＵＳＢデバイス、ＡＴＡデバイスなどの接続規格毎の区分、または記憶デバイス、ＣＤ−Ｒドライブなどのデバイス用途毎の区分など）毎に開発された種別毎デバイスドライバとがある。一般的には、製品毎デバイスドライバのほうが種別毎デバイスドライバよりも個別のデバイス毎に最適化されているため、ＯＳは、まず製品毎デバイスドライバのなかから最適なものを検索し、見つからなければ種別毎デバイスドライバを検索する。
【０００６】
したがって、ＯＳがデバイスドライバを検索する手順は、以下のようになる。
（手順１）ネイティブデバイスドライバのなかから、外部デバイスに適した製品毎デバイスドライバを検索する。
（手順２）手順１で適したデバイスドライバが見つからなかった場合、ネイティブデバイスドライバのなかから、外部デバイスに適した種別毎デバイスドライバを検索する。
（手順３）手順２で適したデバイスドライバが見つからなかった場合、バイトコードデバイスドライバのなかから、外部デバイスに適した製品毎デバイスドライバを検索する。
（手順４）手順３で適したデバイスドライバが見つからなかった場合、バイトコードデバイスドライバのなかから、外部デバイスに適した種別毎デバイスドライバを検索する。
【０００７】
この動作の結果、バイトコードデバイスドライバのなかに最適な製品毎デバイスドライバが存在していたとしても、ネイティブデバイスドライバのなかに外部デバイスと適合する種別毎デバイスドライバが存在していれば、そちらが優先的に選択されてしまう。
【０００８】
本発明は、上記のような課題を解決するためになされたものであり、バイトコードによって実装されたデバイスドライバを備える電子機器において、外部デバイスが当該電子機器に接続されたとき、最適なデバイスドライバを選択することができる技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明に係るデバイスドライバ選択プログラムは、電子機器に外部デバイスが接続されたとき、バイトコードデバイスドライバのうち、個別の外部デバイス毎に開発されている製品毎デバイスドライバを、バイナリコードで実装された種別毎デバイスドライバよりも先に検索する。外部デバイスに適したバイトコードデバイスドライバが見つからなかった場合は、バイナリコードで実装された種別毎デバイスドライバを検索する。
【発明の効果】
【００１０】
本発明に係るデバイスドライバ選択プログラムによれば、ネイティブデバイスドライバのうち外部デバイスに適した種別毎デバイスドライバが電子機器にインストール済である場合でも、バイトコードデバイスドライバとして実装された製品毎デバイスドライバを優先的に選択することができる。
【図面の簡単な説明】
【００１１】
【図１】実施形態１に係る電子機器１００の機能ブロック図である。
【図２】電子機器１００に外部デバイス２００が接続されたときの動作手順を示す図である。
【発明を実施するための形態】
【００１２】
＜実施の形態１＞
図１は、本発明の実施形態１に係る電子機器１００の機能ブロック図である。電子機器１００は、組込ソフトウェアを実行する組込機器であり、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１１０、ＯＳ１２０、ＪａｖａＶＭ（Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）１３０、ネイティブデバイスドライバ１４０を備える。
【００１３】
ＣＰＵ１１０は、ＯＳ１２０とＪａｖａＶＭ１３０を実行する演算装置である。以下では記載の都合上、ＯＳ１２０などのプログラムを動作主体として説明する場合があるが、実際にこれらプログラムを実行するのはＣＰＵ１１０であることを付言しておく。
【００１４】
ＯＳ１２０は電子機器１００のＯＳであり、デバイスドライバ選択プログラム１２１を内部モジュールとして備える。デバイスドライバ選択プログラム１２１については後述する。ＪａｖａＶＭ１３０は、Ｊａｖａ言語で実装されたソフトウェアを実行するＪａｖａ仮想マシンである。ネイティブデバイスドライバ１４０は、バイナリコードによって実装されたデバイスドライバである。
【００１５】
電子機器１００は、ＯＳ１２０が起動するとき、常駐Ｊａｖａプログラム１３１を自動的に起動するように設定されている。ＪａｖａＶＭ１３０は、その設定にしたがって常駐Ｊａｖａプログラム１３１を実行する。以後ＪａｖａＶＭ１３０は、ＯＳ１２０がシャットダウンされるまで、常駐Ｊａｖａプログラム１３１を実行し続ける。
【００１６】
常駐Ｊａｖａプログラム１３１の配下には、Ｊａｖａ言語によって実装されたバイトコードデバイスドライバ１３２が配置されている。常駐Ｊａｖａプログラム１３１は、バイトコードデバイスドライバ１３２をプラグイン形式で任意にロードし、またはアンロードすることができる。
【００１７】
バイトコードデバイスドライバ１３２とネイティブデバイスドライバ１４０は、それぞれ複数種類設けてもよい。また、バイトコードデバイスドライバ１３２とネイティブデバイスドライバ１４０のなかには、それぞれ上述の製品毎デバイスドライバと種別毎デバイスドライバが存在する。
【００１８】
図２は、電子機器１００に外部デバイス２００が接続されたときの動作手順を示す図である。記載の都合上、構成要素の符号は省略した。以下、図２の各ステップについて説明する。
【００１９】
（図２：ステップ（１））
電子機器１００の接続ポートに外部デバイス２００が接続されると、ＣＰＵ１１０はその旨を検出する。
【００２０】
（図２：ステップ（２））
ＣＰＵ１１０は、ＯＳ１２０に対し、外部デバイス２００に適したデバイスドライバを選択するように指示する。ＯＳ１２０は、その指示にしたがって、デバイスドライバ選択プログラム１２１を起動する。
【００２１】
（図２：ステップ（３））
デバイスドライバ選択プログラム１２１は、ネイティブデバイスドライバ１４０のなかに、外部デバイス２００に適した製品毎デバイスドライバが存在するか否かを検索する。該当する製品毎デバイスドライバが存在すれば、そのデバイスドライバをＯＳ１２０に提供し、ＯＳ１２０はそのデバイスドライバを用いて外部デバイス２００を認識する。該当するデバイスドライバが存在しない場合は、ステップ（４）に進む。
【００２２】
（図２：ステップ（４））
デバイスドライバ選択プログラム１２１は、バイトコードデバイスドライバ１３２のなかに、外部デバイス２００に適した製品毎デバイスドライバが存在するか否かを検索するように、ＪａｖａＶＭ１３０を介して常駐Ｊａｖａプログラム１３１へ依頼する。常駐Ｊａｖａプログラム１３１は、バイトコードデバイスドライバ１３２のなかから該当するデバイスドライバを検索する。該当する製品毎デバイスドライバが存在すれば、そのデバイスドライバをＯＳ１２０に提供し、ＯＳ１２０はそのデバイスドライバを用いて外部デバイス２００を認識する。該当するデバイスドライバが存在しない場合は、ステップ（５）に進む。
【００２３】
（図２：ステップ（５））
デバイスドライバ選択プログラム１２１は、ネイティブデバイスドライバ１４０のなかに、外部デバイス２００に適した種別毎デバイスドライバが存在するか否かを検索する。該当する種別毎デバイスドライバが存在すれば、そのデバイスドライバをＯＳ１２０に提供し、ＯＳ１２０はそのデバイスドライバを用いて外部デバイス２００を認識する。該当するデバイスドライバが存在しない場合は、ステップ（６）に進む。
【００２４】
（図２：ステップ（６））
デバイスドライバ選択プログラム１２１は、バイトコードデバイスドライバ１３２のなかに、外部デバイス２００に適した種別毎デバイスドライバが存在するか否かを検索するように、ＪａｖａＶＭ１３０を介して常駐Ｊａｖａプログラム１３１へ依頼する。常駐Ｊａｖａプログラム１３１は、バイトコードデバイスドライバ１３２のなかから該当するデバイスドライバを検索する。該当する種別毎デバイスドライバが存在すれば、そのデバイスドライバをＯＳ１２０に提供し、ＯＳ１２０はそのデバイスドライバを用いて外部デバイス２００を認識する。該当するデバイスドライバが存在しない場合は、適当なデバイスドライバが存在しない旨をＯＳ１２０に回答する。
【００２５】
（図２：ステップ（１）〜（６）：補足）
電子機器１００の接続ポートが複数ある場合は、外部デバイス２００を電子機器１００に複数接続することもできる。この場合、電子機器１００に接続された外部デバイス２００毎にデバイスドライバ選択プログラム１２１を起動してそれぞれの外部デバイス２００について上記ステップを実行してもよいし、単一のデバイスドライバ選択プログラム１２１が全ての外部デバイス２００について上記ステップを実行してもよい。
【００２６】
以上、電子機器１００に外部デバイス２００が接続されたときの動作手順を説明した。なお、デバイスドライバ選択プログラム１２１は、ＯＳ１２０配下のプログラムモジュールとして実装してもよいし、ＯＳ１２０の一部として実装してもよい。
【００２７】
＜実施の形態１：まとめ＞
以上のように、本実施形態１に係るデバイスドライバ選択プログラム１２１は、バイトコードデバイスドライバ１３２のうち外部デバイス２００の製品毎デバイスドライバを検索し、適したものが見つからなかった場合は、ネイティブデバイスドライバ１４０のなかから種別毎デバイスドライバを検索する。これにより、種別毎デバイスドライバよりも製品毎デバイスドライバを優先して選択することができる。
【００２８】
また、本実施形態１に係るデバイスドライバ選択プログラム１２１は、ネイティブデバイスドライバ１４０のうち外部デバイス２００の製品毎デバイスドライバを検索し、適したものが見つからなかった場合は、バイトコードデバイスドライバ１３２のなかから製品毎デバイスドライバを検索する。これにより、デバイスドライバの実装形態によらず、製品毎デバイスドライバを常に優先することができる。
【００２９】
また、本実施形態１に係る電子機器１００は、常駐Ｊａｖａプログラム１３１を常時実行し、その配下のバイトコードモジュールとして、バイトコードデバイスドライバ１３２を備えている。これにより、デバイスドライバ選択プログラム１２１がバイトコードデバイスドライバ１３２を検索するとき、その検索要求を受け取るインターフェースが常駐プログラムとしてあらかじめ用意されていることになる。すなわち、バイトコードデバイスドライバ１３２を検索するために逐一Ｊａｖａアプリケーションを起動する必要がなくなり、そのための処理負荷や起動時間を低減することができる。
【００３０】
＜実施の形態２＞
実施形態１では、常駐Ｊａｖａプログラム１３１およびその配下のバイトコードデバイスドライバ１３２がＪａｖａ言語によって実装されている例を説明したが、その他の実行環境に依存しないバイトコードを用いるプログラム言語を用いてこれらを実装することもできる。例えば、Ｍｉｃｒｏｓｏｆｔ（登録商標）社の．ＮＥＴなどがその１例として考えられる。
【００３１】
なお、バイトコードによって実装されているデバイスドライバは、物理層の制御に関してはより下層のデバイスドライバに委譲するのが通常である。したがって、バイトコードデバイスドライバ１３２は、電子機器１００および外部デバイス２００の物理信号を制御するレイヤーよりも上位のデバイスドライバとして実装されていることが望ましい。ネイティブデバイスドライバ１４０もバイトコードデバイスドライバ１３２と同じレイヤーのデバイスドライバであるため、同様である。
【００３２】
例えば、外部デバイス２００としてＵＳＢ規格に準拠したデバイスを想定する。ＵＳＢ規格では、（広義の）デバイスドライバのレイヤーとして、バスドライバ、コアドライバ、（狭義の）デバイスドライバが規定されている。バイトコードデバイスドライバ１３２とネイティブデバイスドライバ１４０は、ＵＳＢ規格における（狭義の）デバイスドライバとして実装されていることが望ましい。
【符号の説明】
【００３３】
１００：電子機器、１１０：ＣＰＵ、１２０：ＯＳ、１２１：デバイスドライバ選択プログラム、１３０：ＪａｖａＶＭ、１３１：常駐Ｊａｖａプログラム、１３２：バイトコードデバイスドライバ、１４０：ネイティブデバイスドライバ、２００：外部デバイス。
【図１】
0005613090.tif 000002
【図２】
0005613090.tif 000003