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