(57)【要約】  複数の記憶セクターを含む記憶装置内に格納されたプログラムコードを更新する方法を開示する。本方法は、更新された入力コードを、記憶装置の第１の組の記憶セクターを占める現在のプログラムコードバージョンを格納した記憶装置に格納される、更新されたプログラムコードバージョンに変換する工程を含み、ここで、更新されたプログラムコードバージョンは該記憶装置内に格納されると、第２の組の記憶セクターを占める。この変換工程は、現在のプログラムコードバージョンの表現を受信することと、現在のプログラムコードバージョンにより占められた第１の組の記憶セクターの対応する記憶セクターとは異なる、更新されたコードバージョンにより占められた第２の組の記憶セクターの記憶セクターの数を減少させるように適合された少なくとも一つの最適化工程を実行することと、をさらに含む。
2007524171.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶セクターを含む記憶装置内に格納されたプログラムコードを更新する方法であって、この方法は、
−更新された入力コードを、記憶装置の第１の組の記憶セクターを占める現在のプログラムコードバージョンを格納した記憶装置に格納される、更新されたプログラムコードバージョンに変換する工程であって、更新されたプログラムコードバージョンは記憶装置内に格納されると、第２の組の記憶セクターを占める、工程を含み、
変換工程は、
−現在のプログラムコードバージョンの表現を受信することと、
−現在のプログラムコードバージョンにより占められた第１の組の記憶セクターの対応する記憶セクターとは異なる、更新されたコードバージョンにより占められた第２の組の記憶セクターの記憶セクターの数を減少させるように適合された、少なくとも一つの最適化工程を実行することと、をさらに含む、
ことを特徴とする方法。
【請求項２】
現在のプログラムコードバージョンの表現は、第１の組の記憶セクターの現在のイメージと、第１の組の記憶セクターの現在のイメージのマップファイル記述の少なくとも一つを含む、請求項１に記載の方法。
【請求項３】
入力コードは多数のオブジェクトモジュールを含み、変換工程は多数のオブジェクトモジュールをリンクすることを含む、請求項１または２に記載の方法。
【請求項４】
入力コードは少なくとも一つのソースコードモジュールを含み、
変換工程は、
−ソースコードモジュールの少なくとも一つをコンパイルし、結果として多数のオブジェクトモジュールを生成することと、
−多数のオブジェクトモジュールをリンクすることと、を含み、
少なくとも一つの最適化工程を実行する工程は、
−リンク工程の間にフィードバックデータを生成することと、
−フィードバックデータに基づいてソースコードモジュールの少なくとも一つのサブセットを再コンパイルし、結果として多数の修正されたオブジェクトモジュールを生成することと、
−多数の修正されたオブジェクトモジュールに基づいてリンク工程を実行することと、を含む、
請求項１または２に記載の方法。
【請求項５】
最適化工程は、記憶装置内の前記オブジェクトモジュールのレイアウトを決定することを含む、請求項３または４に記載の方法。
【請求項６】
記憶装置内の前記オブジェクトモジュールのレイアウトを決定する工程は、
−対応する第１の現在のオブジェクトモジュールとは異なるサイズを有する第１の更新されたオブジェクトモジュールと、対応する第２の現在のオブジェクトモジュールに等しい第２の更新されたオブジェクトモジュールとを検知する工程であって、第２の更新されたオブジェクトモジュールは第１の更新されたオブジェクトモジュールの基準アドレスより大きな基準アドレスを有する、検知工程と、
−検知された第１の更新されたオブジェクトモジュールを、所定のパディングサイズの記憶コンテンツでパディングし、結果としてパディングされた第１の更新されたオブジェクトモジュールを生成する工程であって、パディングサイズは、第２の更新されたオブジェクトモジュールの基準アドレスを、対応する第２の現在のオブジェクトモジュールの基準アドレスに等しくさせるように選択された、工程とを含む、
請求項５に記載の方法。
【請求項７】
記憶装置内の前記オブジェクトモジュールのレイアウトを決定する工程は、
−対応する第１の現在のオブジェクトモジュールより大きい第１の更新されたオブジェクトモジュールを検知することと、
−第１の更新されたオブジェクトモジュールの所定の部分を異なる記憶セクターに移動し、結果として、縮小された第１の更新されたオブジェクトモジュールと第１の更新されたオブジェクトモジュールの移動された部分とを生成することと、
−縮小された第１の更新された記憶セクター内の第１の更新されたオブジェクトモジュールの移動された部分にリレーを挿入することと、を含む、
請求項５または６に記載の方法。
【請求項８】
変換工程は、少なくとも一つの最適化パラメーターにより最適化工程を制御することを含む、請求項１〜７のいずれか一項に記載の方法。
【請求項９】
少なくとも一つの最適化パラメーターは、最適化工程によりもたらされるサイズの最大許容増加を決定するパラメーターを含む、請求項８に記載の方法。
【請求項１０】
少なくとも一つの最適化パラメーターは、最適化工程により導入されるリレーの最大許容数を決定するパラメーターを含む、請求項８または９に記載の方法。
【請求項１１】
現在のプログラムコードバージョンと更新されたプログラムコードバージョン間の差分を表現するデルタファイルを生成する工程をさらに含む、請求項１〜１０のいずれか一項に記載の方法。
【請求項１２】
記憶装置はフラッシュメモリである、請求項１〜１１のいずれか一項に記載の方法。
【請求項１３】
複数の記憶セクターを含む記憶装置内に格納されたプログラムコードを更新するためのデータ処理システムであって、請求項１〜１２のいずれか一項に記載の方法の工程を実行するように適切にプログラムされたデータ処理システム。
【請求項１４】
データ処理システム上で実行されると、データ処理システムに請求項１〜１２のいずれか一項に記載の方法を実行させるように適合されたプログラムコード手段を含む、コンピュータプログラム製品。
【請求項１５】
コンピュータプログラム製品はリンカーモジュールを含む、請求項１４に記載のコンピュータプログラム製品。
【請求項１６】
携帯用無線通信装置の再プログラムのための、請求項１〜１２のいずれか一項に記載の方法の使用。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の記憶セクターを含む記憶装置内に格納されたプログラムコードの更新に関する。
【背景技術】
【０００２】
多くのモデム電子装置（例えば、組込み型の装置）は、フラッシュメモリ上に格納されたソフトウェアにより制御される。フラッシュメモリは、複数の再書込みを許容するので、電子装置では人気のある記憶装置である。しかしながら、その書込み操作は、一度には、セクター全体（いわゆるページ）に限定される。現在のフラッシュメモリの典型的なページサイズは６４ｋバイトである。
【０００３】
電子装置のフラッシュメモリ内に格納されたソフトウェアが、例えば、ソフトウェアに新しい特徴を追加するために、および／またはソフトウェアの現行版におけるエラーを修正するために更新されると、フラッシュメモリの記憶セクターの一部またはすべては、再書き込み、すなわち「再フラッシュ」される。一般的に、ソフトウェア更新をインストールするために必要とされる時間を最小化するためには、ソフトウェア更新中に再書き込みされるフラッシュのページ数を最小化することが望ましい。
【０００４】
特に、更新時間が重要関心事であるアプリケーションは、移動端末の無線による（ＯＴＡ：ｏｖｅｒ−ｔｈｅ−ａｉｒ）更新である。このようなアプリケーションにおいては、更新されるイメージ全体ではなく現在のイメージに対する変更のみを移動端末に配布することが知られている。この変更は一般的にはデルタファイルと呼ばれる。このようなシステムでは、移動端末上で実行中の更新エージェントは、受信された変更を現在のイメージに適用し、これにより現在のイメージは更新バージョンに変換される。更新処理中、端末は機能しないということは、このような更新システムの特有の問題である。従って、記憶装置を再フラッシュするために必要とされる時間と、従ってシステムのダウンタイムを低減することが望ましい。
【０００５】
しかしながら、上述のフラッシュメモリの制限のため、単一バイトの変更ですら、全ページの完全な書き換えを必要とするので、ソフトウェアのソースコードの小さな更新ですらフラッシュのページの大部分を更新させることがある。
【０００６】
米国公開特許出願第２００３／０１４２５５６号明細書では、フラッシュのセクターの変更または調整の必要性を可能な限り軽度に保つために、揮発性の情報または揮発性のソフトウエアコンポーネントが少なくともフラッシュメモリ装置のそれぞれのフラッシュメモリアドレス空間の端の近傍に格納される、フラッシュメモリのプログラミング方法を開示している。
【０００７】
しかしながら、上記従来技術の方法は、それぞれの情報コンポーネントを変更する可能性予測に関する情報を必要とする。従って、上記従来技術は、複数の記憶セクターを有する記憶装置においてプログラムコードを更新する際に必要とされる再書き込みの回数を、それぞれのソフトウエアコンポーネントにおける将来の変更の可能性予測に関する情報を必要とすること無く低減するという課題に対処していない。
【発明の開示】
【課題を解決するための手段】
【０００８】
上記および他の課題は、複数の記憶セクターを含む記憶装置内に格納されたプログラムコードを更新する方法であって、本方法は、
−更新された入力コードを、記憶装置の第１の組の記憶セクターを占める現在のプログラムコードバージョンを格納した該記憶装置に格納される、更新されたプログラムコードバージョンに変換する工程であって、更新されたプログラムコードバージョンは該記憶装置内に格納されると、第２の組の記憶セクターを占める、工程を含み、
上記変換工程は、
−現在のプログラムコードバージョンの表現（representation）を受信することと、
−現在のプログラムコードバージョンにより占められた第１の組の記憶セクターの対応する記憶セクターとは異なる、更新されたコードバージョンにより占められた第２の組の記憶セクターの記憶セクターの数を減少させるように適合された少なくとも一つの最適化工程を実行することと、をさらに含む、方法により解決される。
【０００９】
特に、現在のプログラムコードバージョンの表現を受信することと、現在のプログラムコードバージョンにより占められた第１の組の記憶セクターの対応する記憶セクターとは異なる、更新されたコードバージョンにより占められた第２の組の記憶セクターの記憶セクターの数を減少させるように適合された少なくとも一つの最適化工程を実行することにより、必要とされる再書き込み回数を低減する。
【００１０】
記憶装置内に格納された現在のプログラムコードバージョンは、通常、ソフトウェア更新を生成する処理には知られているので、上記最適化は、更新処理に対し容易に入手可能な情報に基づいている。特に、本処理は、現在インストールされているバージョンと今回の更新に関する情報に基づいているが、将来の更新の可能性に関する情報は一切必要としない。
【００１１】
好ましい実施態様では、現在のプログラムコードバージョンの表現は、第１の組の記憶セクターの現在のイメージ、および／または第１の組の記憶セクターの現在のイメージのマップファイル記述（map file description）を含む。従って、この表現は、記憶装置内のプログラムコード・コンポーネントのレイアウトに関する情報を含み、これにより、最適化処理は、両方のバージョン間の差分を低減するように、更新されるコンポーネントのレイアウトを適合することができる。
【００１２】
通常、コード生成システムは、ソースコードをコンパイルし、多数のオブジェクトコード・モジュールを生成するコンパイラーと、実行可能コードを生成するリンカーとを含む。リンカーは、ソフトウェア開発プロジェクトを構成する一組のオブジェクトコード・モジュール間の依存性を解決する。リンカーのタスクは、通常、記憶装置内のオブジェクトモジュールをレイアウトすること、すなわち対応するアドレス空間内の相異なるオブジェクトモジュールに相対アドレスを割り当てることを含む。従って、リンカーステージでは、メモリ空間内のコードのレイアウトに関する必要情報は入手可能である。オブジェクトモジュールは、通常、ハードウェア、および／またはプラットフォーム特有の、低レベルファイル形式のオブジェクトファィルとして表現される。オブジェクトファィルはコンパイラーにより生成され、リンカーへの入力となる。オブジェクトモジュールは、通常、再配置可能であり、未解決の参照を含む。
【００１３】
ここで、用語「記憶装置におけるコードのレイアウト」は、様々なオブジェクトモジュールのそれぞれの開始または基準アドレス、すなわち、プログラムコードにより占められたアドレス空間のそれぞれの相対アドレスを含む。
【００１４】
この結果、本発明の好ましい実施態様では、最適化処理はリンカーステージで実行される。従って、入力コードは多数のオブジェクトモジュールを含み、その変換工程は多数のオブジェクトモジュールをリンクすることを含む。好ましくは、最適化処理は、記憶装置内のオブジェクトモジュールのレイアウトを決定することを含む。
【００１５】
別の好ましい実施態様では、入力コードは少なくとも一つのソースコードモジュールを含み、その変換工程は、
−少なくとも一つのソースコードモジュールをコンパイルし、結果として多数のオブジェクトモジュールを生成することと、
−多数のオブジェクトモジュールをリンクすることと、を含み、
少なくとも一つの最適化工程を実行する工程は、
−リンク工程の間にフィードバックデータを生成することと、
−フィードバックデータに基づいてソースコードモジュールの少なくとも一つのサブセットを再コンパイルし、結果として多数の修正されたオブジェクトモジュールを生成することと、
−多数の修正されたオブジェクトモジュールに基づいてリンク工程を実行することと、を含む。
【００１６】
従って、この実施態様によれば、リンカーは、コンパイラーに、ソースコードの少なくとも一部を再コンパイルさせるコンパイラーステージへのフィードバックを生成する。このことは、リンカーが、結果として生じる一組のオブジェクトモジュールを制御し、これによってリンカーによるオブジェクトコード・モジュールを再配置する自由度が増すという利点を有する。
【００１７】
さらに、別の好ましい実施態様では、上記変換工程は、少なくとも一つの最適化パラメーターによって最適化処理を制御することをさらに含む。従って、最適化処理を制御するためのメカニズムが提供される。いくつかの実施態様では、最適化パラメーターは、最適化処理に対する一つまたは複数の制限を決定する。例えば、１つまたは複数の最適化パラメーターは、最適化処理により付加されることが許容されるパディングスペースの最大サイズのような、最適化処理によってもたらされるサイズの最大許容増加を決定してもよい。あるいは、またはさらに、少なくとも一つの最適化パラメーターは、最適化処理により導入されるリレー（relay）の最大許容数を決定するパラメーターを含んでもよい。
【００１８】
最適化処理について、必要な再書き込み回数の観点からの利点と、メモリサイズ、実行時間等の観点からのコストとの間のトレードオフを容易に制御できるということは、本発明の利点である。
【００１９】
従って、好ましい実施態様では、記憶装置内のオブジェクトモジュールのレイアウトを決定する工程は、
−対応する第１の現在のオブジェクトモジュールとは異なるサイズを有する第１の更新されたオブジェクトモジュールと、対応する第２の現在のオブジェクトモジュールに等しい第２の更新されたオブジェクトモジュールとを検知する工程であって、第２の更新されたオブジェクトモジュールは第１の更新されたオブジェクトモジュールの基準アドレスより大きな基準アドレスを有する、工程と、
−検知された第１の更新されたオブジェクトモジュールを、所定のパディングサイズの記憶コンテンツでパディングし、結果としてパディングされた第１の更新されたオブジェクトモジュールを生成する工程であって、該パディングサイズは第２の更新されたオブジェクトモジュールの基準アドレスを、対応する第２の現在のオブジェクトモジュールの基準アドレスに等しくさせるように選択された、工程と、を含む。
【００２０】
別の好ましい実施態様では、記憶装置内のオブジェクトモジュールのレイアウトを決定する工程は、
−対応する第１の現在のオブジェクトモジュールより大きい第１の更新されたオブジェクトモジュールを検知することと、
−第１の更新されたオブジェクトモジュールの所定の部分を異なる記憶セクターに移動し、結果として、縮小された第１の更新されたオブジェクトモジュールと第１の更新されたオブジェクトモジュールの移動された部分とを生成することと、
−縮小された第１の更新された記憶セクター内の、第１の更新されたオブジェクトモジュールの移動された部分にリレーを挿入することと、を含む。
【００２１】
さらに、別の好ましい実施態様では、上記方法は、現在のプログラムコードバージョンと更新されたプログラムコードバージョン間の差分を表現するデルタファイルを生成する工程を含む。従って、結果として生じるデルタファイルは、現在バージョンと更新バージョン間の差分、すなわち、当該装置が、装置内に格納された現在バージョンとデルタファイルとから更新バージョンを生成するために必要とされる情報を含む。当該装置にアップロードする必要のあるファイルのサイズは低減され、それによって、ソフトウェア更新を実行するのに必要な時間をさらに低減するということは、この実施態様の利点である。
【００２２】
さらに好ましい実施態様は、従属請求項において開示される。
【００２３】
上記方法および以下の特徴は、ソフトウェアで実施され得、そして、データ処理システム上、またはコンピュータ実行可能命令のようなプログラムコード手段の実行によりもたらされる他の処理手段上で実行され得るということに留意されたい。ここで、以下では、用語「処理手段」は、上記機能を実行するように好適に適合された任意の回路、および／または装置を含む。特に、用語「処理手段」は、汎用または専用のプログラム可能なマイクロプロセッサ、デジタル信号プロセサ（ＤＳＰ）、特定用途向けＩＣ（ＡＳＩＣ）、プログラム可能論理アレイ（ＰＬＡ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、専用電子回路等、またはその組み合わせを含む。
【００２４】
例えば、プログラムコード手段は、記憶媒体から、またはコンピュータネットワークを介した別のコンピュータから、ＲＡＭなどの記憶装置内にロードすることができる。あるいは、説明した特徴は、ソフトウェアの代わりにハードワイヤード回路により、またはソフトウェアと組み合わせて実施してもよい。
【００２５】
本発明は、上記方法を含む様々な方法で実施することができ、さらに以下の、それぞれが、最初に述べた方法に関連して説明した一つまたは複数の利益と利点をもたらし、それぞれが、最初に述べた方法に関連して説明した好ましい実施態様に対応する一つまたは複数の好ましい実施態様を有する、データ処理システムや製品手段（product means）とにおいて、実施することができる。
【００２６】
特に、本発明は、複数の記憶セクターを含む記憶装置内に格納されたプログラムコードを更新するためのデータ処理システムに関し、このデータ処理システムは、上記および以下の方法の工程を実行するように適切にプログラムされる。
【００２７】
本発明は、データ処理システム上で実行されると、該データ処理システムに上記および以下の方法を実行させるように適合されたプログラムコード手段を含むコンピュータプログラム製品にさらに関する。上記コンピュータプログラム製品は、プログラムコード手段を格納したコンピュータ読取り可能媒体として、具現化することができる。
【００２８】
本説明の目的のため、用語「電子装置」は、プログラムコードを格納するためのフラッシュメモリなどの記憶装置を含む任意の装置を含む。このような装置の例としては、携帯用無線通信装置と、他のハンドヘルド型または携帯用装置が挙げられる。用語「携帯用無線通信装置」は、携帯電話、ページャー、通信機（ｃｏｍｍｕｎｉｃａｔｏｒ）、すなわち、電子式オーガナイザ、高度自動機能電話（ｓｍａｒｔ  ｐｈｏｎｅ）、携帯情報端末（ＰＤＡ）、ハンドヘルドコンピュータなどの装置をすべて含む。
【００２９】
本発明の上記および他の側面は、添付図面を参照して以下に説明される実施形態から明らかとなる。
【発明を実施するための最良の形態】
【００３０】
図１に、移動端末などの電子装置内のソフトウェアを更新するためのシステムの実施形態のブロック図を概略的に示す。本システムは、移動端末１０１（例えば、移動電話等）、ソフトウェア更新システム１０２、および通信インタフェース１０３を含む。
【００３１】
ソフトウェア更新システム１０２は、通信ネットワークにアクセスするサーバーコンピュータを含んでよい。いくつかの実施形態では、サーバーコンピュータの機能は、複数のコンピュータ（例えばローカルエリアネットワーク、広域ネットワーク、インターネット等のコンピュータネットワークを介して接続されるコンピュータ）間に分散され得る。ソフトウェア更新システム１０２は、ソフトウェア更新システムが通信インタフェース１０３を介してデータを伝達できるようにするインタフェース回路１０４を含む。例えば、インタフェース回路は、シリアルポート、パラレルポート、短距離の無線通信インタフェース（例えば、赤外線ポート、ブルートゥーストランシーバ等）を含んでよい。インタフェース回路の別の例としては、ネットワークカード、ＤＳＬモデム、ゲートウエイコンピュータ等が挙げられる。
【００３２】
ソフトウェア更新システムは、演算処理装置１０５、例えば、ここに説明されるような更新プログラムコードの生成を含む更新処理を制御し実行するように適切にプログラムされたサーバーコンピュータのＣＰＵをさらに含む。本演算処理装置は、更新対象ソフトウェアの少なくとも一つの基本バージョンと更新バージョンのメモリイメージを格納したバージョン・データベース１０６をさらに含む。いくつかの実施形態では、バージョン・データベースは、追加情報、例えば、様々なグループの顧客に対する様々なモデルの移動端末用の、複数の基本バージョンおよび／または複数の更新バージョン、等をさらに含んでよい。
【００３３】
通信インタフェース１０３は、ソフトウェア更新システム１０２と移動端末１０１間のデータの伝達のための任意の適切な有線または無線通信インタフェースでよい。例えば、移動電話通信ネットワーク（例えば、ＧＳＭネットワーク、ＵＭＴＳネットワーク、ＧＰＲＳネットワーク等）を介して通信するように適合された移動電話の場合、ソフトウェア更新に関連する、ソフトウェア更新システムと移動端末との間の通信は、移動電話通信ネットワークを介して実行することができ、これにより移動端末において通信インタフェースを追加する必要が無くなる。移動端末とソフトウェア更新システムとの間の通信は、２つ以上の通信ネットワークを伴ってよいことがさらに理解される。例えば、移動式電話は、基地局と移動電話通信ネットワークとを介してゲートウエイシステムと通信を行ってもよく、今度は、このゲートウエイシステムが、インターネットを介しソフトウェア更新システムとの通信を提供する。
【００３４】
従って、移動端末１０１上でソフトウェア（例えば、移動端末のファームウェアまたはオペレーティングシステム）を更新するために、移動端末はソフトウェア更新システム１０２に接続する。あるいは、ソフトウェア更新システムは、更新ソフトウェアバージョンが利用可能になった場合に、移動端末に接続してもよい。ソフトウェア更新システムに接続されると、移動端末は、現在のソフトウェアバージョンに関する情報をソフトウェア更新システムに送信する。その通信は、適切な更新プロトコル（例えば、ＴＣＩ／ＩＰプロトコル上に構築されたプロトコル）を介して実行される。移動端末から受信された情報に基づき、ソフトウェア更新システムは、移動端末に対し、更新命令を含む個別の更新メッセージを生成する。いくつかの実施形態では、更新命令は、書き換え対象の記憶セクターのイメージを含む。デルタファイルを使用する差分式の更新システムでは、更新命令は、移動端末が、移動端末内に既に格納された既存のバージョンからおよび更新命令内に含まれる追加の情報から、更新ソフトウェアバージョンを生成することができるように生成される。
【００３５】
一実施態様では、この更新処理は、移動端末上で実行中の更新エージェントにより起動される。更新エージェントは、デルタファイルの受信と検証を制御する。次に、更新エージェントは、移動端末をネットワークから切断し、パッチモードで再ブートさせる。パッチモードでは、デルタファイル内の変更は、新しいメモリイメージが完成するまで、インクリメンタルに適用される。
【００３６】
デルタファイルの生成は、概略的には、以下の操作により例示され得る。
ｆｉｌｅｎｅｗ−ｆｉｌｅｂａｓｅ→Δｆｉｌｅ
【００３７】
次に、同様に、新バージョンの実際の生成は、以下の操作に従って移動端末により実行され得る。
ｆｉｌｅｂａｓｅ＋Δｆｉｌｅ→ｆｉｌｅｎｅｗ
【００３８】
移動端末上でデルタファイルを生成すること（上記記号式において「−」として表される）と、新バージョンを生成すること（上記記号式において「＋」操作として表される）の上記操作は、多少複雑な操作を含み得るということを理解されたい。
【００３９】
デルタファイルは、当該の場所で適用することができる。すなわち、変更は、移動端末により既存のイメージ上で行なわれるので付加的な記憶領域をほとんど必要としない。さらに、デルタファイルだけをロードすればよく、そして、通常、デルタファイルは、新バージョンよりかなり小さいので、ロード所要時間は上記方法により低減される。
【００４０】
コード生成処理の実施形態については、以下に、より詳細に説明する。
【００４１】
図２に、移動端末などの電子装置のブロック図を概略的に示す。移動端末１０１は、通信ブロック２１０、演算処理装置２１１、および記憶装置２１２を含む。
【００４２】
通信ブロック２１０は、移動電話通信ネットワークを介したデータの無線ベースの通信を可能にする回路、および／または装置を含む。従って、本説明の目的のためには、通信ブロック２１０は、データ信号を送信し受信するための受信機回路と送信機回路を含む。通信ブロックは、無線通信の技術分野では周知の適切な技術による、信号を適切に処理するための回路（例えば、変調、符号化、増幅等）をさらに含んでよい。
【００４３】
移動端末は、演算処理装置２１１、例えば適切にプログラムされたマイクロプロセッサをさらに含む。演算処理装置は、対応する更新命令を受信すると、移動端末内に格納されたソフトウェアのバージョンを判断し、格納されたソフトウェアのチェックサムを計算し、そしてソフトウェアの更新バージョンを生成するように適合されている。
【００４４】
記憶装置２１２は、所定バージョンのソフトウェア、および／または他のデータをその上に格納した。例えば、記憶装置２１２は、ロードされ演算処理装置２１０により実行されると移動端末の基本機能を実施する移動端末のファームウェアを含んでよい。ファームウェアは、アプリケーションソフトの実行を可能にするオペレーティングシステムをさらに含んでよい。従って、記憶装置２１２は、追加の機能を提供するアプリケーションソフトをさらに格納していてもよい。記憶装置２１２は、適切なアドレス空間を使用することによりアドレス指定され、これにより演算処理装置が記憶装置の選択された部分にアクセスできるようになる。いくつかの実施形態では、記憶装置２１２は、論理的または物理的に複数の記憶セクターに分割され得る。例えば、記憶装置２１２は、データを所定サイズのセクター単位で書き込めるようにしたフラッシュメモリを含んでよい。
【００４５】
以下では、記憶装置２１２は、Ｐ１、Ｐ２、Ｐ３、・・・、ＰＮで表される所定のサイズの多数のセクターに分割されていると仮定する。しかしながら、その代わりに、記憶装置の他の任意のアドレシングを使用してもよいことを理解されたい。ここに説明した更新処理は、例えば、移動式電話のフラッシュメモリの全イメージが更新される場合は全記憶装置２１２に適用され、あるいは、例えば、一つまたは複数のソフトウエアアプリケーションが更新される場合は記憶装置の所定の部分のみに適用され得ることを、さらに理解されたい。
【００４６】
図３に、ソフトウェア更新処理の実施形態のブロック図を示す。リンカーモジュール３０２は多数のオブジェクトファィル３０１を受信する。オブジェクトファィル３０１のそれぞれはコンパイラー（図示せず）によりコンパイルされるが、オブジェクトファィルの一部またはすべてが、お互いに別々にコンパイルされてもよい。リンカーモジュール３０２は、オブジェクトモジュールを実行可能な絶対ファイル３０５に合成する。リンカーモジュール３０２により実行されるタスクの一つは、単一の実行可能プログラム３０５を作成するために、別々にコンパイルされたオブジェクトモジュール間の相互参照と、最終アドレスの割り当てとを解決することである。従って、リンカーからの出力３０５は、フラッシュメモリに直接にロードすることができるファイルである。出力３０５は、また、ビルドファイルと呼ばれる。
【００４７】
さらにリンカーモジュール３０２は、前のビルドファイル３０３に関する情報を、例えば現在のビルドが格納されるフラッシュメモリ内の対応するアドレス空間のイメージの形式で受信する。別の実施形態では、リンカー３０２は、また、現在のビルドのメモリレイアウトのテキストファイル表現（いわゆるマップファイル）を生成してもよい。例えば、マップファイルは、機能一覧、それらに割り当てられたアドレス、その入力パラメーター等を含んでよい。このような実施形態では、前のビルドに関する情報３０３は、前のビルドの対応するマップファイルを含んでよい。さらに別の実施形態では、リンカーモジュールはマップファイルと前のビルドのメモリイメージの両方を受信する。
【００４８】
リンカーモジュール３０２は、新しいイメージが前のビルド３０３のメモリイメージに可能な限り類似するように、新しいビルド３０５のメモリイメージを生成するように適合される。従って、リンカーは、メモリイメージ間の差分を減少するために、多数の最適化工程を実行するように適合される。このような最適化工程の例としては、次のものが挙げられる。
−モジュールを、前のビルドにおけるそれらの場所に対して動かし回す必要性を無くすために、モジュール間に追加のパディングスペースを導入すること。これについては、図４に関連して例示する。
−オブジェクトモジュールを、それらの間の参照を有する２つ以上のサブモジュールに分割すること、すなわち、図５に関連して例示されるように、いわゆる中継を導入すること。
−上記の組み合わせ。
【００４９】
リンカーモジュール３０２は、最適化工程を制御するための一つまたは複数の最適化パラメーター３０４をさらに受信する。例えば、最適化パラメーターは、リンカーがどの最適化工程を実行すべきかを、決定してもよい。さらに、最適化パラメーターは、１つまたは複数の最適化工程に対し、多くの制限または境界条件を決定してもよい。従って、リンカーは、最適化パラメーターにより決定された多くの制限または境界条件の範囲内で、新しいビルドと前のビルドとの間の差分を低減するように（好ましくは最小化するように）構成してもよい。
【００５０】
最適化パラメーターの例としては、次のものが挙げられる。
−リンカーが導入することを許可された、許容パディングスペース上での最大限界。
−リンカーが導入することを許可された中継の最大数。
【００５１】
いくつかの実施形態では、一つまたは複数の上記最適化パラメーターは、所定のデフォルト値に前もって設定してもよいことを理解されたい。図４に、そのレイアウトがパディングスペースの導入によって最適化されるソフトウェア更新の前後のフラッシュメモリのメモリレイアウトを概略的に例示する。
【００５２】
図４ａに、フラッシュメモリのアドレス空間の一部の構成を例示する。アドレス空間４０１は、Ｐ１、Ｐ２、Ｐ３、Ｐ４、Ｐ５、Ｐ６、Ｐ７、Ｐ８で表される多数のページに分割される。ページは所定のサイズＳを有し、典型的な従来のフラッシュメモリでは、ページサイズは６４ｋバイトである。
【００５３】
図４ｂに、アドレス空間４０１に格納された、概して参照数字４０２により参照されるプログラムコードバージョンＶ１のメモリレイアウトの例を図示する。この例におけるプログラムコードバージョンは、Ａ、Ｂ、Ｃ、Ｄ、Ｅで指定された５つのオブジェクトモジュールを含む。オブジェクトモジュールは相異なるサイズを有しており、アドレス空間４０１では連続して配列される。このレイアウトは、モノリス（ｍｏｎｏｌｉｔｈ）とも呼ばれる。
【００５４】
図４ｃに、概して４０３として指定される、プログラムコードの更新バージョンＶ２を例示する。この例では、バージョンＶ１とバージョンＶ２間のただ一つの変更は、モジュールＡ’によるモジュールＡの置き換えであると仮定し、ここでは、モジュールＡ’は、Ａ’に必要とされる付加メモリ空間４０５によって図示されるように前のモジュールＡより大きいと仮定する。残りのモジュールＢ、Ｃ、Ｄ、Ｅは不変、すなわち、バージョンＶ１の対応する部分と同一であると仮定する。しかしながら、図４ｃにおいて参照数字４０６により図示されるように、最新バージョンＶ２を連続して配置すると、メモリページＰ１〜Ｐ７の全コンテンツを書き換える必要がある。
【００５５】
モジュールＡのコンテンツはＡ’に変更されたので、ページＰ１、Ｐ２、Ｐ３を書き換える必要があり、そしてモジュールＢ、Ｃ、Ｄ、Ｅの場所がバージョンＶ１とＶ２間で変更されたので、残りのページを書き換える必要がある。
【００５６】
図４ｄに、概して４０４で指定される、更新プログラムバージョンＶ２の最適化されたメモリレイアウトを図示する。図４ｄの例では、リンカーはモジュールＢをモノリスの端に移動した。さらに、リンカーは、モジュールＡ’とＣの間に未使用メモリ４０７のパディングスペースを挿入した。パディングスペース４０７のサイズは、バージョンＶ２のモジュールＣの先頭アドレスを前バージョンＶ１と同一にできるように決定される。その結果、モジュールＣ、Ｄ、Ｅのメモリイメージは、それらがモジュールＢのエンティティを参照しない、すなわち参照は全く変更されないと仮定すると、不変である。従って、メモリを、最適化された更新バージョンＶ２で更新して前バージョンＶ１を置き換えると（フラッシュメモリの当該ページを再フラッシュすることにより）、参照数字４０８により図示されるように、ページＰ１、Ｐ２、Ｐ３、Ｐ７、Ｐ８のみを再書き込みする必要がある。残りのページ、すなわちページＰ４、Ｐ５、Ｐ６は、再書き込みする必要はない。
【００５７】
Ａ’がＡより小さい状況では、レイアウトは、モジュールＢの基準アドレスが不変であることを保証する（すなわち、Ｂを移動することなく）、適切なパディングスペースを単に追加することにより最適化され得ることを理解されたい。
【００５８】
パディングスペースを追加することによる上記メモリレイアウトの最適化は、追加パディングスペースサイズに対応するメモリイメージサイズの増加を犠牲にして必要な再書き込み回数を減少させるということを、さらに理解されたい。上述のように、このトレードオフは、リンカーにより挿入を許可されたパディングスペースの最大サイズを決定する最適化パラメーターにより制御することができる。
【００５９】
モジュールＣ、Ｄ、Ｅの一つまたは複数がモジュールＢの機能への参照を含む場合、上記例におけるメモリモジュールＢの再配置は、これらモジュールＣ、Ｄ、Ｅの一つまたは複数における変更を引き起こし得ることはさらに注意を要する。このような参照は、モジュールＢの再アドレシングにより影響を受けるであろう。不変のモジュール内の他の機能がいずれも参照しないモジュールは、自由に移動できるが、一方、そうでないと、不変のモジュールにより参照されるモジュールの移動は、必要とされる再書き込み回数の観点からのコストを増加させる。従って、モジュールを移動するかどうか、および、どのモジュールを移動するか、を決定するために、リンカーは、オブジェクトモジュールの移動の全体の効果対コスト比を決定するように構成されることが好ましい。
【００６０】
従って、一実施態様では、メモリ内のオブジェクトモジュールのレイアウトの決定は、
−対応する第１の現在のオブジェクトモジュールとは異なるサイズを有する第１の更新されたオブジェクトモジュールと、対応する第２の現在のオブジェクトモジュールに等しい第２の更新されたオブジェクトモジュールとを検知する工程であって、第２の更新されたオブジェクトモジュールは第１の更新されたオブジェクトモジュールの基準アドレスより大きな基準アドレスを有する、検知工程と、
−検知された第１の更新されたオブジェクトモジュールを、所定のパディングサイズの記憶コンテンツでパディングし、結果としてパディングされた第１の更新されたオブジェクトモジュールを生成する工程であって、パディングサイズは第２の更新されたオブジェクトモジュールの基準アドレスを、対応する第２の現在のオブジェクトモジュールの基準アドレスに等しくさせるように選択された、工程とを含む。
【００６１】
図５に、レイアウトが、中継の導入によって最適化されるソフトウェア更新の前後のフラッシュメモリの記憶装置レイアウトを概略的に例示する。
【００６２】
図５ａに、フラッシュメモリのアドレス空間の一部の構成を図示する。アドレス空間５０１は、Ｐ１、Ｐ２、Ｐ３、Ｐ４、Ｐ５、Ｐ６、Ｐ７、Ｐ８で表される多数のページに分割される。ページは所定のサイズＳを有する。
【００６３】
図５ｂに、アドレス空間５０１に格納された、概して参照数字５０２により参照されるプログラムコードバージョンＶ１のメモリレイアウトの例を図示する。前の例のように、このプログラムコードバージョンは、Ａ、Ｂ、Ｃ、Ｄ、Ｅで指定された５つのオブジェクトモジュールを含む。オブジェクトモジュールは、相異なるサイズを有しており、アドレス空間５０１では連続して配列される。
【００６４】
図５ｃに、概して５０３で指定されるプログラムコードの更新バージョンＶ２を例示する。再び、バージョンＶ１とバージョンＶ２間のただ一つの変更は、モジュールＡがモジュールＡ’により置き換えられたと仮定し、ここでは、モジュールＡ’は、Ａ’に必要とされる付加メモリ空間５０５によって図示されるように前のモジュールＡより大きいと仮定する。残りのモジュールＢ、Ｃ、Ｄ、Ｅは不変、すなわちバージョンＶ１の対応する部分と同一であると仮定する。しかしながら、図５ｃにおいて参照数字５０６により図示されるように、更新バージョンＶ２を連続して配置すると、メモリページＰ１〜Ｐ７の全コンテンツを書き換える必要がある。モジュールＡのコンテンツはＡ’に変更したので、ページＰ１、Ｐ２、Ｐ３を書き換える必要があり、そしてモジュールＢ、Ｃ、Ｄ、Ｅの場所がバージョンＶ１とＶ２間で変更されたので、残りのページを書き換える必要がある。
【００６５】
図５ｄに、概して５０４で指定される更新されたプログラムバージョンＶ２の最適化されたメモリレイアウトを図示する。図５の例では、オブジェクトモジュールＡ’の一部はＡ’内からのみ参照される、すなわち他のモジュールのいかなるものからも参照されないと仮定する。Ａ’のこの部分はＡ２’で表わされる。Ａ１’で表わされるＡ’の残りの部分は、他のモジュールの一つまたは複数から参照される。従って、図５ｄに図示されるように、リンカーモジュールは、モジュールＡ’をＡ１’とＡ２’に分割し、モジュールＡ２’をモノリスの最後に移動し、それに応じてＡ１’における内部参照をＡ２’に変更することができる（すなわち、中継を導入することにより）。さらに、リンカーは、モジュールＢの先頭アドレスが前バージョンＶ１と比較して変わらないようにパディングスペース５０７を挿入する。その結果、モジュールＢ、Ｃ、Ｄ、Ｅのメモリイメージは不変である。従って、参照数字５０８により図示されるように、前バージョンＶ１を置き換えるために最適化された更新バージョンＶ２をアップロードする際に、ページＰ１、Ｐ２、Ｐ７、Ｐ８のみを再書き込みする必要がある。残りのページ、すなわちページＰ３、Ｐ４、Ｐ５、Ｐ６は、再書き込みする必要はない。
【００６６】
従って、この実施形態では、メモリ内のオブジェクトモジュールのレイアウトの決定は、
−対応する第１の現在のオブジェクトモジュールより大きい第１の更新されたオブジェクトモジュールを検知することと、
−第１の更新されたオブジェクトモジュールの所定の部分を異なる記憶セクターに移動し、その結果として、縮小された第１の更新されたオブジェクトモジュールと第１の更新されたオブジェクトモジュールの移動された部分とを生成することと、
−縮小された第１の更新された記憶セクター内の第１の更新されたオブジェクトモジュールの移動された部分に中継を挿入することと、を含む。
【００６７】
上記中継によるメモリレイアウトの最適化は、中継による実行時間の不利益を犠牲にして、必要な再書き込み回数を減少していることを理解されたい。上述のように、このトレードオフは、リンカーにより挿入を許可される中継の最大数を決定する最適化パラメーターにより制御することができる。
【００６８】
図５の例では、中継の導入がパディングスペースの挿入と組み合わせられていることに留意されたい。
【００６９】
他の実施形態では、モジュールを２つの分離されたモジュールに分割することは、リンカー自身ではなくコンパイラーにより実行されることがさらに理解される。リンカーがコンパイラーにフィードバック信号を送信するこのような実施形態は、次のように説明される。
【００７０】
図６に、ソフトウェア更新処理の別の実施形態のブロック図を示す。この実施形態は、図３に関連して説明した実施形態に類似しており、ここでは同様の参照番号は同様のコンポーネントを指す。図６の実施形態において、リンカー３０２は、対応する一組のソースファイル６０７からオブジェクトファィル３０１を生成したコンパイラー６０６へのフィードバック信号６０８をさらに生成する。フィードバック信号は、コンパイラーに、一つまたは複数のソースファイルを再コンパイルさせ、結果として、リンカーにより最適化されたメモリレイアウトの生成に対してより好適な修正オブジェクトファィルを生成する。例えば、図５に図示された状況では、リンカー３０２は、Ａ’の代わりにオブジェクトモジュールＡ１’とＡ２’を生成することをコンパイラー６０６に要求してもよい。一実施態様では、フィードバック信号６０８は、サブモジュールのそれぞれの中にどの機能を含むべきかについての情報を含むことすら可能である。
【００７１】
こうして、上記において、フラッシュメモリのプログラムコードを更新する際に必要とされる再書込み回数を減少するように構成されたリンカーが開示された。
【００７２】
本発明は、いくつかの個別要素を含むハードウェアによって、そして適切にプログラムされたコンピュータによって実施することができる。いくつかの手段を列挙する本装置の特許請求範囲において、これら手段のいくつかは、ここに説明されたような、ハードウェア（例えば、適切にプログラムされたマイクロプロセッサ、コンピュータ）の１つおよび同様なアイテム、および／または一つまたは複数の通信インタフェースにより具現化することができる。特定の手段が、相互に異なる従属請求項において記載された、あるいは種々の実施形態において説明されたという単なる事実は、これらの手段の組み合わせを、有利に使用することができないということを示すものではない。
【００７３】
本明細書に用いられた際、用語「含む／含むこと」は、記載された特徴、完全体、工程、または構成要素の存在を明示するために採用するが、一つまたは複数の他の特徴、完全体、工程、構成要素、またはそのグループの存在または追加を排除するものではないということを強調しなければならない。
【図面の簡単な説明】
【００７４】
【図１】移動端末内のソフトウェアを更新するためのシステムの実施形態のブロック図を概略的に示す。
【図２】本発明の実施形態による移動端末のブロック図を概略的に示す。
【図３】ソフトウェア更新処理の実施形態のブロック図を示す。
【図４】レイアウトがパディングスペースの導入によって最適化されるソフトウェア更新の前後のフラッシュメモリのメモリレイアウトを概略的に例示する。
【図５】レイアウトが中継の導入によって最適化されるソフトウェア更新の前後のフラッシュメモリのメモリレイアウトを概略的に例示する。
【図６】ソフトウェア更新処理の別の実施形態のブロック図を示す。
【図１】
2007524171.tif 000003
【図２】
2007524171.tif 000004
【図３】
2007524171.tif 000005
【図４】
2007524171.tif 000006
【図５】
2007524171.tif 000007
【図６】
2007524171.tif 000008
【手続補正書】
【提出日】平成18年10月25日(2006.10.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の記憶セクター（Ｐ１、Ｐ２、Ｐ３、Ｐ４、Ｐ５、Ｐ６、Ｐ７、Ｐ８）を含む記憶装置（２１２）内に格納されたプログラムコードを更新する方法であって、この方法は、少なくとも１つの更新されたソースコードモジュール（６０７）を、記憶装置の第１の組の記憶セクターを占める現在のプログラムコードバージョンを格納した記憶装置（２１２）内に格納される更新されたプログラムコードバージョン（３０５）に変換する工程（６０６、３０２）であって、更新されたプログラムコードバージョンは、記憶装置内に格納されると、第２の組の記憶セクターを占める、工程を含み、
この変換工程は、
−少なくとも一つのソースコードモジュールをコンパイルして（６０６）、結果として多数のオブジェクトモジュール（３０１）を生成することと、
−現在のプログラムコードバージョンの表現（３０３）を受信することと、
−現在のプログラムコードバージョンにより占められた第１の組の記憶セクターの対応する記憶セクターとは異なる、更新されたコードバージョンにより占められた第２の組の記憶セクターの記憶セクターの数を減少させるように適合された、少なくとも一つの最適化工程を実行すること（３０２）とをさらに含み、
少なくとも一つの最適化工程を実行する工程は、
−多数のオブジェクトモジュールをリンクするためのリンク工程（３０２）中にフィードバックデータ（６０８）を生成することと、
−フィードバックデータに基づいてソースコードモジュールの少なくとも一つのサブセットを再コンパイル（６０６）して、結果として多数の修正されたオブジェクトモジュールを生成することと、
−多数の修正されたオブジェクトモジュールに基づいてリンク工程（３０２）を実行することと、を含む、
ことを特徴とする方法。
【請求項２】
現在のプログラムコードバージョンの表現は、第１の組の記憶セクターの現在のイメージと、第１の組の記憶セクターの現在のイメージのマップファイル記述の少なくとも一つを含む、請求項１に記載の方法。
【請求項３】
最適化工程は、記憶装置内の前記オブジェクトモジュールのレイアウトを決定することを含む、請求項１または２に記載の方法。
【請求項４】
記憶装置内の前記オブジェクトモジュールのレイアウトを決定する工程は、
−対応する第１の現在のオブジェクトモジュールとは異なるサイズを有する第１の更新されたオブジェクトモジュールと、対応する第２の現在のオブジェクトモジュールに等しい第２の更新されたオブジェクトモジュールとを検知する工程であって、第２の更新されたオブジェクトモジュールは、第１の更新されたオブジェクトモジュールの基準アドレスより大きな基準アドレスを有する、工程と、
−検知された第１の更新されたオブジェクトモジュールを、所定のパディングサイズの所定の記憶コンテンツでパディングし、結果としてパディングされた第１の更新されたオブジェクトモジュールを生成する、工程であって、パディングサイズは、第２の更新されたオブジェクトモジュールの基準アドレスを、対応する第２の現在のオブジェクトモジュールの基準アドレスに等しくさせるように選択された、工程と、を含む、請求項３に記載の方法。
【請求項５】
記憶装置内の前記オブジェクトモジュールのレイアウトを決定する工程は、
−対応する第１の現在のオブジェクトモジュールより大きい第１の更新されたオブジェクトモジュールを検知することと、
−第１の更新されたオブジェクトモジュールの所定の部分を異なる記憶セクターに移動し、結果として、縮小された第１の更新されたオブジェクトモジュールと第１の更新されたオブジェクトモジュールの移動された部分とを生成することと、
−縮小された第１の更新された記憶セクター内の第１の更新されたオブジェクトモジュールの移動された部分に参照を挿入することと、を含む、
請求項３または請求項４に記載の方法。
【請求項６】
変換工程は、少なくとも一つの最適化パラメーター（３０４）により、最適化工程を制御することをさらに含む、請求項１〜５のいずれか一項に記載の方法。
【請求項７】
少なくとも一つの最適化パラメーターは、最適化工程によりもたらされるサイズの最大許容増加を決定するパラメーターを含む、請求項６に記載の方法。
【請求項８】
少なくとも一つの最適化パラメーターは、最適化工程により導入される参照の最大許容数を決定するパラメーターを含む、請求項６または７に記載の方法。
【請求項９】
現在のプログラムコードバージョンと更新されたプログラムコードバージョン間の差分を表現するデルタファイルを生成する工程をさらに含む、請求項１〜８のいずれか一項に記載の方法。
【請求項１０】
記憶装置はフラッシュメモリである、請求項１〜９のいずれか一項に記載の方法。
【請求項１１】
記憶装置は、携帯用無線通信装置（１０１）の記憶装置である、請求項１〜１０のいずれか一項に記載の方法。
【請求項１２】
複数の記憶セクターを含む記憶装置（２１２）内に格納されたプログラムコードを更新するためのデータ処理システム（１０２）であって、請求項１〜１１のいずれか一項に記載の方法の工程を実行するように適切にプログラムされたデータ処理システム。
【請求項１３】
データ処理システム（１０２）上で実行されると、該データ処理システムに請求項１〜１１のいずれか一項に記載の方法を実行させるように適合されたプログラムコード手段を含むコンピュータプログラム製品。
【請求項１４】
コンピュータプログラム製品はリンカーモジュールを含む、請求項１３に記載のコンピュータプログラム製品。
【国際調査報告】
2007524171.tif 000009
2007524171.tif 000010
2007524171.tif 000011