(57)【要約】【課題】エンディアン特性が異なるシステム間で共通的に使用することが可能であり、かつ冗長な負荷を省き最適化が可能であるデバイスドライバを作成できるようにする。【解決手段】ハードウェアのエンディアンに応じて処理を切替えてデバイスドライバを作成する場合に、前記エンディアンの変換をデバイスドライバ層で行う変換ステップと、前記エンディアンの相互変換を行うエンディアン変換ステップとを有し、前記デバイスドライバ層で利用するエンディアンの変換機能を、前記エンディアン変換ステップにて実行するようにする。【選択図】図１
2010061584.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアのエンディアンに応じて処理を切替えるデバイスドライバの作成方法であって、
前記エンディアンの変換をデバイスドライバ層で行う変換ステップと、
前記エンディアンの相互変換を行うエンディアン変換ステップとを有し、
前記デバイスドライバ層で利用するエンディアンの変換機能を、前記エンディアン変換ステップにて実行することを特徴とするデバイスドライバの作成方法。
【請求項２】
請求項１記載のデバイスドライバの作成方法の各ステップをコンピュータにて実施させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数システムで共通的に使用することが可能であるデバイスドライバの作成方法及びプログラムに関する。
【背景技術】
【０００２】
従来、デバイスドライバは、搭載されるシステムのハードウェア特性を考慮して構築する。そのため、あるハードウェア向けに作成したデバイスドライバを他のハードウェア上で駆動させることは切替えが困難であった。これに対し、例えば、特許文献１に記載の技術では、デバイスドライバはＤＤＩ（Device Driver Interface）に対してデータの読み書きを要求し、ＤＤＩがバス及びデバイスのエンディアンを考慮してエンディアン変換を行っている。また、ＵＮＩＸ（登録商標）等のＯＳ（Operation System）ではエンディアン変換関数ntohl（）等を用いている。これらの方法によりデバイスドライバは、搭載されるシステムのエンディアンを考慮せずに済むようになっている。
【０００３】
【特許文献１】特開平９−２１２４４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１に記載の技術では、ＤＤＩを介してハードウェアにアクセスするため、ＤＤＩによるエンディアンの判断処理が冗長な負荷となってしまう。また、ＰＣＩバス等を用いるシステムでは、ＰＣＩバス等のエンディアンと、ＣＰＵやＯＳのエンディアンとが異なる場合がある。さらに、ＵＮＩＸ等で用いられるntohl（）等は、扱うシステムのエンディアン特性が複雑になると、実装が煩雑になり、エンディアン特性が異なるシステム間でのデバイスドライバの流用が困難になってしまう。また、エンディアン変換処理が複数実施されて冗長な負荷となってしまう可能性がある。
【０００５】
本発明は前述の問題点に鑑み、エンディアン特性が異なるシステム間で共通的に使用することが可能であり、かつ冗長な負荷を省き最適化が可能であるデバイスドライバを作成できるようにすることを目的としている。
【課題を解決するための手段】
【０００６】
本発明のデバイスドライバの作成方法は、ハードウェアのエンディアンに応じて処理を切替えるデバイスドライバの作成方法であって、前記エンディアンの変換をデバイスドライバ層で行う変換ステップと、前記エンディアンの相互変換を行うエンディアン変換ステップとを有し、前記デバイスドライバ層で利用するエンディアンの変換機能を、前記エンディアン変換ステップにて実行することを特徴とする。
【０００７】
本発明のプログラムは、前記デバイスドライバの作成方法の各ステップをコンピュータにて実施させることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、エンディアン特性が異なるシステム間でのデバイスドライバの流用が可能となる。また、複雑なエンディアン特性をもつシステムにおいても、冗長なエンディアン変換処理を省き、処理を最適化することが可能となる。
【発明を実施するための最良の形態】
【０００９】
（第１の実施形態）
以下、本発明の実施形態について図面を参照しながら説明する。
図１は、本実施形態のデバイスドライバの代表的な階層構造を示す図である。
図１において、デバイスドライバ層１は、デバイスドライバヘッダ４と、デバイスドライバソース５とから構成される。そして、システム依存層２は、システム依存エンディアン変換ヘッダ７と、システム依存エンディアン変換ソース８とから構成される。さらに、ＭＰＵ（ＯＳ）層３は、基本形エンディアン変換ヘッダ１０と、基本形エンディアン変換ソース１１とから構成される。
【００１０】
また、デバイスドライバ層１とシステム依存層２とのインターフェースとして、システム依存エンディアン変換関数６が用いられている。さらに、システム依存層２とＭＰＵ（ＯＳ）層３とのインターフェースとして、基本形エンディアン変換関数９が用いられている。
【００１１】
デバイスドライバ層１は、エンディアン変換機能を利用するデバイスドライバモジュールを示し、夫々一意となるようなモジュール名をプリフィックスとするシステム依存エンディアン変換関数６を用いる。ここで、システム依存エンディアン変換関数６の内部処理に関しては実装せず、システム依存エンディアン変換ヘッダ７をインクルードする。
【００１２】
システム依存層２は、デバイスドライバ層１が利用するシステム依存エンディアン変換関数６の内容を構築システムに適用させる階層を示している。システムの構築者は、構築するシステムにおいて、システム依存エンディアン変換関数６をＭＰＵ（ＯＳ）層３が提供する基本形エンディアン変換関数９を用いてシステム依存エンディアン変換ヘッダ７とシステム依存エンディアン変換ソース８とに構築する。また、システム依存層２を構築する際は、基本形エンディアン変換ヘッダ１０をインクルードする。
【００１３】
ＭＰＵ（ＯＳ）層３は、構築システムのＭＰＵ（ＯＳ）が採用するエンディアンからビックエンディアン、リトルエンディアン夫々へ変換する基本形エンディアン変換関数９を提供する。そして、基本形エンディアン変換関数９は、基本形エンディアン変換ヘッダ１０と基本形エンディアン変換ソース１１とに構築する。
【００１４】
図２は、基本形エンディアン変換関数の一覧を示す図である。以降の説明では、複数種類のビット数に対応する表現でインターフェースの説明を行うが、１６ビット、３２ビット、６４ビット等の各ビット幅に対応した基本形エンディアン変換関数を用意する。
【００１５】
hostToBe（）２１は、引数で与えられる値をＭＰＵ（ＯＳ）の表現からビックエンディアンに変換する機能を持つ関数である。hostToLe（）２２は、引数で与えられる値をＭＰＵ（ＯＳ）の表現からリトルエンディアンへ変換する機能を持つ関数である。beToHost（）２３は、引数で与えられる値をビックエンディアンからＭＰＵ（ＯＳ）の表現に変換する機能を持つ関数である。leToHost（）２４は引数で与えられる値をリトルエンディアンからＭＰＵ（ＯＳ）の表現に変換する機能を持つ関数である。
【００１６】
なお、本実施形態ではＣ言語による記述を用いるが、開発システムによっては実行効率、開発効率等の目的でアセンブラやＣ＋＋など他の開発言語を用いることも可能である。また、デバイスドライバヘッダ４、システム依存エンディアン変換ソース８、基本形エンディアン変換ソース１１等は、開発システムに応じて省略が可能であるものとする。
【００１７】
次に、本実施形態のデバイスドライバの階層構造の一例を図３に示す。図３に示すシステムは、開発デバイスがリトルエンディアン、バス等のシステム依存部分がビックエンディアン、ＭＰＵ（ＯＳ）がビックエンディアンの特性を持つ。
【００１８】
図３において、デバイスドライバ層３１、システム依存層３２、及びＭＰＵ（ＯＳ）層３３の３層構造となっている。そして、デバイスドライバソース３４、システム依存エンディアン変換関数３５、システム依存エンディアン変換ヘッダ３６、基本形エンディアン変換関数３７、及び基本形エンディアン変換ヘッダ３８から構成される。
【００１９】
図４は、デバイスドライバソース３４の抜粋内容４１を示す図である。
図４において、「sys＿endian.h」は、システム依存エンディアン変換ヘッダ３６を示している。また、システム依存エンディアン変換関数３５として「usb＿leToHost32（）」を呼び出している。
【００２０】
図５は、システム依存エンディアン変換ヘッダ３６の内容５１を示す図である。
図５において、「convert＿endian.h」は、基本形エンディアン変換ヘッダ３８を表す。また、「usb＿leToHost32（）」を基本形エンディアン変換関数３７である「leToHost32（）」を用いて構築している。
【００２１】
図６は、基本形エンディアン変換ヘッダ３８の内容６１を示す図である。
図６においては、基本形エンディアン変換関数３７の実体を定義している。ここで、「CPU＿BIG＿ENDIAN」は、開発環境で定義するマクロであり、ＭＰＵがビックエンディアンの場合に「CPU＿BIG＿ENDIAN」のマクロを定義する。本実施形態では、ＭＰＵがビックエンディアンのため、「CPU＿BIG＿ENDIAN」のマクロが定義されているものとする。結果的に、「usb＿leToHost32（）」からバイトスワップ処理が発生する。
【００２２】
次に、図７のフローチャートを参照しながら、本実施形態の「usb＿leToHost32（）」が呼び出された後の関数置換の流れを説明する。  まず、「usb＿leToHost32」をシステム依存エンディアン変換ヘッダ３６で置換する（ステップＳ１Ａ）。その結果、「leToHost32」とする（ステップＳ２Ａ）。次に、「leToHost32（）」を基本形エンディアン変換ヘッダ３８で相互変換する（ステップＳ３Ａ）。その結果、「byteSwap32」とする（ステップＳ４Ａ）。よって、結果的にはバイトスワップ処理を行うことになる。
【００２３】
以上のように本実施形態によれば、デバイスドライバをデバイスドライバ層、システム依存層、ＭＰＵ（ＯＳ）層の３層構成とし、エンディアン特性が異なるシステム間でのデバイスドライバの流用が可能となる。また、複雑なエンディアン特性をもつシステムにおいても、冗長なエンディアン変換処理を省き、処理を最適化することが可能となる。
【００２４】
（第２の実施形態）
次に、第２の実施形態として、開発対象のデバイスは第１の実施形態と同じであるが、開発システムが異なる例について説明する。このシステムでは、開発デバイスがリトルエンディアン、バス等のシステム依存部分がビックエンディアン、ＭＰＵ（ＯＳ）がリトルエンディアンの特性を持つ。
【００２５】
図８は、本実施形態のデバイスドライバの階層構造の一例を示す図である。
図８において、デバイスドライバ層８１、システム依存層８２、及びＭＰＵ（ＯＳ）層８３の３層構造となっている。そして、デバイスドライバソース８４、システム依存エンディアン変換関数８５、システム依存エンディアン変換ヘッダ８６、基本形エンディアン変換関数８７、及び基本形エンディアン変換ヘッダ８８から構成されている。
【００２６】
ここで、本実施形態のデバイスドライバソース８４には、第１の実施形態のデバイスドライバソース３４がそのまま流用可能となる。そのため、デバイスドライバソース８４の抜粋内容については、図４を参照しながら説明を行う。
【００２７】
図４において、「sys＿endian.h」はシステム依存エンディアン変換ヘッダ８６を示している。また、システム依存エンディアン変換関数８５として「usb＿leToHost32」を呼び出している。
【００２８】
また、本実施形態のシステム依存エンディアン変換ヘッダ８６には、第１の実施形態のシステム依存エンディアン変換ヘッダ３６がそのまま流用可能となる。そのため、システム依存エンディアン変換ヘッダ８６の内容については、図５を参照しながら説明を行う。
【００２９】
図５において、「convert＿endian.h」は基本形エンディアン変換ヘッダ８８を表している。また、「usb＿leToHost32（）」を基本形エンディアン変換関数８７である「leToHost32（）」を用いて構築している。
【００３０】
さらに、本実施形態の基本形エンディアン変換ヘッダ８８には、第１の実施形態の基本形エンディアン変換ヘッダ３８がそのまま流用可能となる。そのため、基本形エンディアン変換ヘッダ８８の内容については、図６を参照しながら説明を行う。
【００３１】
図６においては、基本形エンディアン変換関数８７の実体を定義している。ここで、「CPU＿BIG＿ENDIAN」は開発環境で定義するマクロであり、ＭＰＵがビックエンディアンの場合に「CPU＿BIG＿ENDIAN」のマクロを定義する。本実施形態では、ＭＰＵがリトルエンディアンのため、「CPU＿BIG＿ENDIAN」のマクロは定義されていないものとする。結果的に、「usb＿leToHost32（）」からバイトスワップ処理は発生しない。
【００３２】
次に、図９のフローチャートを参照しながら、本実施形態の関数置換の流れを説明する。
まず、「usb＿leToHost32（）」をシステム依存エンディアン変換ヘッダ８６で置換する（ステップＳ１Ｂ）。その結果、「leToHost32（）」とする（ステップＳ２Ｂ）。次に、「leToHost32（）」を基本形エンディアン変換ヘッダ８８で置換する（ステップＳ３Ｂ）。その結果、無処理とする（ステップＳ４Ｂ）。このため、結果的にはバイトスワップ処理を行わないことになる。
【００３３】
以上のように本実施形態によれば、デバイスドライバをデバイスドライバ層、システム依存層、ＭＰＵ（ＯＳ）層の３層構成とし、エンディアン特性が異なるシステム間でのデバイスドライバの流用が可能となる。また、複雑なエンディアン特性をもつシステムにおいても、冗長なエンディアン変換処理を省き、処理を最適化することが可能となる。
【００３４】
（第３の実施形態）
次に、第３の実施形態として、開発対象のデバイスは第１及び第２の実施形態と同じであるが、開発システムが異なる他の例について説明する。このシステムでは、開発デバイスがリトルエンディアン、バス等のシステム依存部分が特殊エンディアン、ＭＰＵ（ＯＳ）がビックエンディアンの特性を持つ。
【００３５】
図１０は、本実施形態のデバイスドライバの階層構造の一例を示す図である。
図１０において、デバイスドライバ層１０１、システム依存層１０２及びＭＰＵ（ＯＳ）層１０３の３層構造となっている。そして、デバイスドライバソース１０４、システム依存エンディアン変換関数１０５、システム依存エンディアン変換ヘッダ１０６、及びシステム依存エンディアン変換ソース１０７を有する。さらに、基本形エンディアン変換関数１０８、及び基本形エンディアン変換ヘッダ１０９を有する。ここで、特殊エンディアンとは、基本形エンディアン変換関数１０８だけでは変換できない特殊なエンディアン変換が必要なものを指す。
【００３６】
図１１は、特殊エンディアンの変換前バイト配列１１１及び変換後バイト配列１１２を示す図である。ここで、本実施形態のデバイスドライバソース１０４には、第１の実施形態のデバイスドライバソース３４がそのまま流用可能となる。そのため、デバイスドライバソース１０４の抜粋内容については、図４を参照しながら説明を行う。
【００３７】
図４において、「sys＿endian.h」は、システム依存エンディアン変換ヘッダ１０６を示している。また、システム依存エンディアン変換関数１０５として「usb＿leToHost32（）」を呼び出している。
【００３８】
図１２は、システム依存エンディアン変換ヘッダ１０６の内容１２１を示す図である。
図１２において、「convert＿endian.h」は、基本形エンディアン変換ヘッダ１０９のことである。また、「usb＿leToHost32（）」を特殊エンディアン変換「specialLeToHost32（）」を用いて構築している。また、「specialLeToHost32（）」は、システム依存エンディアン変換ソース１０７にて実装する。
【００３９】
図１３は、そのシステム依存エンディアン変換ソース１０７にて実装されている実装例１３１をに示す図である。
図１３において、「xxxSwap（）」として特殊エンディアン変換を行った後、基本形エンディアン変換関数１０８である「leToHost32（）」を呼び出して整合性を取っている。
【００４０】
また、本実施形態の基本形エンディアン変換ヘッダ１０９には、第１の実施形態の基本形エンディアン変換ヘッダ３８がそのまま流用可能となる。そのため、基本形エンディアン変換ヘッダ１０９の内容については、図６を参照しながら説明を行う。
【００４１】
図６においては、基本形エンディアン変換関数１０８の実体を定義している。ここで、「CPU＿BIG＿ENDIAN」は、開発環境で定義するマクロであり、ＭＰＵがビックエンディアンの場合に「CPU＿BIG＿ENDIAN」のマクロを定義する。本実施形態では、ＭＰＵがビックエンディアンのため、「CPU＿BIG＿ENDIAN」のマクロが定義されているものとする。結果的に、「usb＿leToHost32（）」からバイトスワップ処理が発生する。
【００４２】
次に、図１４のフローチャートを参照しながら、本実施形態の関数置換の流れを説明する。
図１４において、「usb＿leToHost32（）」をシステム依存エンディアン変換ヘッダ１０６で置換する（ステップＳ１Ｃ）。その結果、「specialLeToHost32（）」とする（ステップＳ２Ｃ）。次に、「specialLeToHost32（）」内の「xxxSwap（）」を実行して特殊エンディアン変換を行う（ステップＳ３Ｃ）。
【００４３】
続いて、「leToHost32（）」を基本形エンディアン変換ヘッダ１０９で置換する（ステップＳ４Ｃ）。その結果、「byteSwap32（）」とする（ステップＳ５Ｃ）。このため、結果的にはバイトスワップ処理を行うことになる。
【００４４】
以上のように本実施形態によれば、デバイスドライバをデバイスドライバ層、システム依存層、ＭＰＵ（ＯＳ）層の３層構成とし、エンディアン特性が異なるシステム間でのデバイスドライバの流用が可能となる。また、複雑なエンディアン特性をもつシステムにおいても、冗長なエンディアン変換処理を省き、処理を最適化することが可能となる。
【００４５】
（本発明に係る他の実施形態）
前述した本発明の実施形態におけるデバイスドライバの作成方法の各ステップは、コンピュータのＲＡＭやＲＯＭなどに記憶されたプログラムが動作することによって実現できる。このプログラム及び前記プログラムを記録したコンピュータ読み取り可能な記録媒体は本発明に含まれる。
【００４６】
また、本発明は、例えば、システム、装置、方法、プログラムもしくは記録媒体等としての実施形態も可能であり、具体的には、複数の機器から構成されるシステムに適用してもよいし、また、一つの機器からなる装置に適用してもよい。
【００４７】
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラム（実施形態では図７、９、１４に示すフローチャートに対応したプログラム）を、システムまたは装置に直接、または遠隔から供給する場合も含む。そして、そのシステムまたは装置のコンピュータが前記供給されたプログラムコードを読み出して実行することによっても達成される場合を含む。
【００４８】
したがって、本発明の機能処理をコンピュータで実現するために、前記コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明は、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。
【００４９】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等の形態であってもよい。
【００５０】
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスクなどがある。さらに、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭ、ＤＶＤ（ＤＶＤ−ＲＯＭ、ＤＶＤ−Ｒ）などもある。
【００５１】
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続する方法がある。そして、前記ホームページから本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルをハードディスク等の記録媒体にダウンロードすることによっても供給できる。
【００５２】
また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるＷＷＷサーバも、本発明に含まれるものである。
【００５３】
また、その他の方法として、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記録媒体に格納してユーザに配布し、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせる。そして、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
【００５４】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される。さらに、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【００５５】
さらに、その他の方法として、まず記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。そして、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現される。
【図面の簡単な説明】
【００５６】
【図１】本発明の第１の実施形態のデバイスドライバの代表的な階層構造を示す図である。
【図２】基本形エンディアン変換関数の一覧表を示す図である。
【図３】本発明の第１の実施形態のデバイスドライバの階層構造の一例を示す図である。
【図４】本発明の第１の実施形態のデバイスドライバ層のソースコード（抜粋）の内容を示す図である。
【図５】本発明の第１の実施形態のシステム依存エンディアン変換ヘッダの内容を示す図である。
【図６】本発明の第１の実施形態の基本形エンディアン変換ヘッダの内容を示す図である。
【図７】本発明の第１の実施形態の関数置換の処理手順の一例を示すフローチャートである。
【図８】本発明の第２の実施形態のデバイスドライバの階層構造の一例を示す図である。
【図９】本発明の第２の実施形態の関数置換の処理手順の一例を示すフローチャートである。
【図１０】本発明の第３の実施形態のデバイスドライバの階層構造の一例を示す図である。
【図１１】本発明の第３の実施形態の特殊エンディアンを説明するための図である。
【図１２】本発明の第３の実施形態のシステム依存エンディアン変換ヘッダの内容を示す図である。
【図１３】本発明の第３の実施形態のシステム依存エンディアン変換ソース（抜粋）の内容を示す図である。
【図１４】本発明の第３の実施形態の関数置換の処理手順の一例を示すフローチャートである。
【符号の説明】
【００５７】
１  デバイスドライバ層
２  システム依存層
３  ＭＰＵ（ＯＳ）層
４  デバイスドライバヘッダ
５  デバイスドライバソース
６  システム依存エンディアン変換関数
７  システム依存エンディアン変換ヘッダ
８  システム依存エンディアン変換ソース
９  基本形エンディアン変換関数
１０  基本形エンディアン変換ヘッダ
１１  基本形エンディアン変換ソース
【図１】
2010061584.tif 000003
【図２】
2010061584.tif 000004
【図３】
2010061584.tif 000005
【図４】
2010061584.tif 000006
【図５】
2010061584.tif 000007
【図６】
2010061584.tif 000008
【図７】
2010061584.tif 000009
【図８】
2010061584.tif 000010
【図９】
2010061584.tif 000011
【図１０】
2010061584.tif 000012
【図１１】
2010061584.tif 000013
【図１２】
2010061584.tif 000014
【図１３】
2010061584.tif 000015
【図１４】
2010061584.tif 000016