OSGiのバンドルとして構成された電子機器のデバイスドライバが前記OSGiの配下で起動したことを前記電子機器のOSに通知する処理を、前記電子機器が備える演算装置に実行させる、デバイスドライバ起動監視プログラムであって、前記演算装置に、前記OSGiのバンドルとして構成された全ての前記デバイスドライバが前記OSGiの配下で起動するまで待機するステップ、全ての前記デバイスドライバが前記OSGiの配下で起動すると、その旨を前記電子機器のOSに通知するステップ、を実行させ、前記デバイスドライバ起動監視プログラムは、前記デバイスドライバ以外の前記OSGiのバンドルとして構成されていることを特徴とするデバイスドライバ起動監視プログラム。請求項1記載のデバイスドライバ起動監視プログラムと、OSGiプラットフォームを実行するJavaVMと、前記デバイスドライバ起動監視プログラムと前記JavaVMを配下に有するOSと、前記デバイスドライバ起動監視プログラム、前記JavaVM、および前記OSを実行する演算装置と、を備えたことを特徴とする電子機器。バイナリコードで実装されたネイティブデバイスドライバと、前記電子機器に外部デバイスが接続されたとき、前記外部デバイスを前記電子機器のOSに認識させるためのデバイスドライバを選択する処理を、前記演算装置に実行させるデバイスドライバ選択プログラムと、を備え、前記デバイスドライバ選択プログラムは、前記演算装置に、前記外部デバイスに適合する前記ネイティブデバイスドライバを検索するネイティブ検索ステップ、前記ネイティブ検索ステップにおいて前記外部デバイスに適合するデバイスドライバが見つからず、かつ前記デバイスドライバ起動監視プログラムから前記OSに対して前記通知が既に届いている場合、前記OSGiのバンドルとして構成されたデバイスドライバのなかから前記外部デバイスに適合するデバイスドライバを検索するステップ、前記ネイティブ検索ステップにおいて前記外部デバイスに適合するデバイスドライバが見つからず、かつ前記デバイスドライバ起動監視プログラムから前記OSに対して前記通知が届いていない場合、前記通知を待機するステップ、を実行させることを特徴とする請求項2記載の電子機器。前記OSは、前記演算装置に、前記JavaVMが前記OSGiプラットフォームの配下で前記デバイスドライバ起動監視プログラムを起動するとき、前記OSまたは前記デバイスドライバ選択プログラムが有する関数の関数ポインタをコールバック先として登録する処理を実行させることを特徴とする請求項3記載の電子機器。前記ネイティブデバイスドライバと前記OSGiのバンドルとして構成されたデバイスドライバは、前記電子機器上の物理信号を制御するレイヤーよりも上位のレイヤーのデバイスドライバとして記述されていることを特徴とする請求項2から4のいずれか1項記載の電子機器。前記ネイティブデバイスドライバと前記OSGiのバンドルとして構成されたデバイスドライバは、USB規格におけるデバイスドライバレイヤーのデバイスドライバとして記述されていることを特徴とする請求項2から5のいずれか1項記載の電子機器。OSGiのバンドルは、OSGi配下で個別に起動され、起動完了するまでは外部から利用することができない。そのため、Javaによって実装されたデバイスドライバを、OSGi配下のバンドルとしてプラグインモジュール化した場合、全てのデバイスドライバが起動し終えるまでは、Javaによって実装されたデバイスドライバを利用することができない。また、デバイスドライバがOSGiバンドルとして実装されている場合、電子機器に外部デバイスが接続され、これに適したデバイスドライバを当該電子機器のOSが選択しようとしたときに、デバイスドライバではないものも含めた個々のOSGiバンドルが起動完了しているか否かを、OSからは知ることができない。そのため、Javaで実装されたデバイスドライバをOSが検索しようとしたとき、全てのデバイスドライバを検索し尽くしたのか、それとも起動はしていないが外部デバイスに適したデバイスドライバが未だ残っているのかを判断することができない。本発明は、上記のような課題を解決するためになされたものであり、OSGiのバンドルとして実装された全てのデバイスドライバをOSが確実に利用できるようにすることができる技術を提供することを目的とする。本発明に係るデバイスドライバ起動監視プログラムは、自身もOSGiバンドルとして構成されており、OSGiバンドルとして構成されたデバイスドライバがOSGi配下で全て起動し終えるまで待機し、起動し終えるとその旨を電子機器のOSに通知する。本発明に係るデバイスドライバ起動監視プログラムによれば、電子機器のOSは、OSGiバンドルとして構成されたデバイスドライバがOSGi配下で全て起動したことを知ることができる。これにより、OSは全てのデバイスドライバを確実に検索することができるので、有用なデバイスドライバが利用されないままになるような状況を回避することができる。<実施の形態1>図1は、本発明の実施形態1に係る電子機器100の機能ブロック図である。電子機器100は、組込ソフトウェアを実行する組込機器であり、CPUCentralProcessingUnit110、OS120、JavaVMVirtualMachine130、ネイティブデバイスドライバ140を備える。CPU110は、OS120とJavaVM130を実行する演算装置である。以下では記載の都合上、OS120などのプログラムを動作主体として説明する場合があるが、実際にこれらプログラムを実行するのはCPU110であることを付言しておく。OS120は電子機器100のOSであり、デバイスドライバ選択プログラム121を内部モジュールとして備える。デバイスドライバ選択プログラム121の動作については後述する。JavaVM130は、Java言語で実装されたソフトウェアを実行するJava仮想マシンである。ネイティブデバイスドライバ140は、バイナリコードによって実装されたデバイスドライバである。電子機器100は、OS120が起動するとき、OSGiプラットフォーム131を自動的に起動するように設定されている。JavaVM130は、その設定にしたがってOSGiプラットフォーム131を実行する。OSGiプラットフォーム131は、Javaスタンドアロンアプリケーションとして実装されている。以後JavaVM130は、OS120がシャットダウンされるまで、OSGiプラットフォーム131を実行し続ける。OSGiプラットフォーム131の配下には、OSGiバンドルとして実装されたバイトコードデバイスドライバ132が配置されている。OSGiプラットフォーム131は、バイトコードデバイスドライバ132をプラグイン形式で任意にロードし、またはアンロードすることができる。バイトコードデバイスドライバ132とネイティブデバイスドライバ140は、それぞれ複数種類設けてもよい。OSGiプラットフォーム131の配下には、バイトコードデバイスドライバ132の他に、デバイスドライバ起動監視プログラム133が配置されている。デバイスドライバ起動監視プログラム133も、OSGiバンドルとして実装されている。デバイスドライバ起動監視プログラム133の動作については後述する。図2は、電子機器100が起動するときの処理手順を示す図である。記載の都合上、構成要素の符号は省略した。以下、図2の各ステップについて説明する。図2:ステップ1電子機器100の電源がONするなどして電子機器100が起動すると、CPU110はOS120を起動する。図2:ステップ2OS120は、起動するときにOSGiプラットフォーム131を自動起動するように設定されている。OS120は、その設定にしたがって、JavaVM130を介してOSGiプラットフォーム131を起動する。図2:ステップ3OSGiプラットフォーム131は、配下のOSGiバンドルを順次起動する。ここではバイトコードデバイスドライバ132とデバイスドライバ起動監視プログラム133を起動する。図2:ステップ3:補足OSGiの仕様によれば、各OSGiバンドルのサービスリスナーを登録しておくことにより、デバイスドライバ起動監視プログラム133は、各OSGiバンドルが起動または終了しているか否かを把握することができる。あるいは、デバイスドライバ起動監視プログラム133が起動した後、デバイスドライバ起動監視プログラム133から各バイトコードデバイスドライバ132に対して、起動完了しているか否かを問い合わせるようにしてもよい。図2:ステップ4デバイスドライバ起動監視プログラム133は、全てのバイトコードデバイスドライバ132が起動完了すると、その旨をOS120に通知する。図2:ステップ4:補足その1本ステップにおける上記通知を実装する1手法としては、例えばOS120がJavaVM130を介してOSGiプラットフォーム131を起動するとき、本ステップにおける通知先として、コールバック関数の関数ポインタをOSGiプラットフォーム131に通知しておくことが考えられる。OSGiプラットフォーム131は、デバイスドライバ起動監視プログラム133を起動するとき、その関数ポインタをデバイスドライバ起動監視プログラム133に引き渡す。デバイスドライバ起動監視プログラム133は、本ステップにおいてそのコールバック関数を呼び出す。このコールバック関数は、OS120が備える関数でもよいし、デバイスドライバ選択プログラム121が備える関数でもよい。図2:ステップ4:補足その2デバイスドライバ起動監視プログラム133は、バイトコードデバイスドライバ132が全て起動した時点で本ステップを実行すればよく、バイトコードデバイスドライバ132でないOSGiバンドルが起動完了するまで待機する必要はない。図3は、電子機器100に外部デバイス200が接続されたときの動作手順を示す図である。記載の都合上、構成要素の符号は省略した。以下、図3の各ステップについて説明する。図3:ステップ1電子機器100の接続ポートに外部デバイス200が接続されると、CPU110はその旨を検出する。図3:ステップ2CPU110は、OS120に対し、外部デバイス200に適したデバイスドライバを選択するように指示する。OS120は、その指示にしたがって、デバイスドライバ選択プログラム121を起動する。図3:ステップ3デバイスドライバ選択プログラム121は、ネイティブデバイスドライバ140のなかに、外部デバイス200に適したデバイスドライバが存在するか否かを検索する。該当するデバイスドライバが存在すれば、そのデバイスドライバをOS120に提供し、OS120はそのデバイスドライバを用いて外部デバイス200を認識する。該当するデバイスドライバが存在しない場合は、ステップ4に進む。図3:ステップ4デバイスドライバ選択プログラム121は、バイトコードデバイスドライバ132のなかに、外部デバイス200に適したデバイスドライバが存在するか否かを検索するように、JavaVM130を介してOSGiプラットフォーム131へ依頼する。OSGiプラットフォーム131またはその配下の適当なOSGiバンドルは、バイトコードデバイスドライバ132のなかから該当するデバイスドライバを検索する。該当するデバイスドライバが存在すれば、そのデバイスドライバをOS120に提供し、OS120はそのデバイスドライバを用いて外部デバイス200を認識する。該当するデバイスドライバが存在しない場合は、適当なデバイスドライバが存在しない旨をOS120に回答する。図3:ステップ4:補足本ステップの時点において、OS120が図2のステップ4の通知を未だ受け取っていない場合は、バイトコードデバイスドライバ132が起動完了していないため、デバイスドライバ選択プログラム121は同通知を受け取るまで待機するようにしてもよい。これにより、デバイスドライバ選択プログラム121は、OSGiプラットフォーム131の配下にある全てのバイトコードデバイスドライバ132が利用可能な状態になるまで待機することになるので、全てのバイトコードデバイスドライバ132を確実に検索することができる。バイトコードデバイスドライバ132を検索する必要があまりない場合などには、待機せず本ステップを終了するようにしてもよい。以上、電子機器100に外部デバイス200が接続されたときの動作手順を説明した。なお、デバイスドライバ選択プログラム121は、OS120配下のプログラムモジュールとして実装してもよいし、OS120の一部として実装してもよい。<実施の形態1:まとめ>以上のように、本実施形態1に係るデバイスドライバ起動監視プログラム133は、OSGiバンドルとして実装されている全てのバイトコードデバイスドライバ132がOSGiプラットフォーム131の配下で起動し終えると、その旨をOS120に通知する。これにより、OS120は、全てのバイトコードデバイスドライバ132を確実に利用することができる。また、本実施形態1に係る電子機器100において、デバイスドライバ選択プログラム121は、外部デバイス200に適したデバイスドライバを検索するとき、全てのバイトコードデバイスドライバ132がOSGiプラットフォーム131の配下で起動し終えた旨の通知を受け取っていない場合は、同通知を受け取るまで待機する。これにより、上記効果を確実に発揮することができる。<実施の形態2>Javaバイトコードによって実装されているデバイスドライバは、物理層の制御に関してはより下層のデバイスドライバに委譲するのが通常である。したがって、実施形態1において、バイトコードデバイスドライバ132は、電子機器100および外部デバイス200の物理信号を制御するレイヤーよりも上位のデバイスドライバとして実装されていることが望ましい。ネイティブデバイスドライバ140もバイトコードデバイスドライバ132と同じレイヤーのデバイスドライバであるため、同様である。例えば、外部デバイス200としてUSB規格に準拠したデバイスを想定する。USB規格では、広義のデバイスドライバのレイヤーとして、バスドライバ、コアドライバ、狭義のデバイスドライバが規定されている。バイトコードデバイスドライバ132とネイティブデバイスドライバ140は、USB規格における狭義のデバイスドライバとして実装されていることが望ましい。