(57)【要約】本発明は組み込みソフトウェア更新システムのシステムと方法、詳しくは、メーカーや販売店がソフトウェアバグやハードウェアの問題によって高コストの製品を回収することを回避することに関する。本発明は、遠隔操作によってソフトウェアのエラーを訂正しハードウェアの問題が製品に与える影響を抑制するエラー訂正システムと、ソフトウェアパッチを使用してデジタル機器内のソフトウェアモジュールを更新するソフトウェア更新システムとを提供する。本発明のソフトウェアシステムにより製造メーカーはソフトウェアパッチを使用中のデジタル機器に送信しソフトウェアのエラーの修正を行いハードウェアの問題による影響を抑制する。ソフトウェアパッチはデジタル機器のＮＶＭ又はＥＥＰＲＯＭ内のデータエリアが必要とするパラメーターを更新することができ、サービス提供者や製造メーカーがサービス項目の内容や製品の機能を修正する際に非常に役に立つ。
2004536405.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアパッチによってフィールドを修正するために、デジタル機器内で動作する組み込みソフトウェアを調整する方法であって、
ａ）所定の基準に基づいて、上記組み込みソフトウェア内に、当該組み込みソフトウェアのセクションを定義する複数の挿入位置を決定する工程と、
ｂ）上記複数の挿入位置毎に複数の更新処理ルーチンを設置する工程と、
ｃ）上記ソフトウェアパッチを使用するために、デジタル機器内にメモリーエリアを決定する工程と、
ｄ）上記複数の更新処理ルーチンとともに上記組み込みソフトウェアを上記デジタル機器の組み込みソフトウェアコードエリアにロードする工程とを備え、
上記更新処理ルーチンは、上記セクションにおいてソフトウェアパッチが存在する場合には、対応するセクションにおいて上記組み込みソフトウェアの実行を修正するために適応されること
を特徴とする組み込みソフトウェアを調整する方法。
【請求項２】
上記メモリーエリアは、上記組み込みソフトウェアコードエリア内にあること
を特徴とする請求項１記載の組み込みソフトウェアを調整する方法。
【請求項３】
上記メモリーエリアは、上記組み込みソフトウェアコードエリア外にあること
を特徴とする請求項１記載の組み込みソフトウェアを調整する方法。
【請求項４】
上記挿入位置を決定する工程は、
上記組み込みソフトウェアのプログラムソフトウェアの行数、
上記組み込みソフトウェアの機能ユニット、
上記組み込みソフトウェアの命令タイプ、
上記デジタル機器のソフトウェア設計方式、
上記デジタル機器のハードウェア設計方式、
上記組み込みソフトウェアの修正機構、
上記組み込みソフトウェアのエラー訂正機構
のうち、少なくとも１つに基づくこと
を特徴とする請求項１記載の組み込みソフトウェアを調整する方法。
【請求項５】
上記複数の更新処理ルーチンを設置する工程は、
ａ）上記組み込みソフトウェアを実行可能なマシンコードにコンパイルする前に、上記更新処理ルーチンを当該組み込みソフトウェア内に設置すること、
ｂ）上記組み込みソフトウェアを対応するアセンブリープログラムコードにコンパイルしてから、上記更新処理ルーチンを当該アセンブリープログラムコード内に設置し、当該アセンブリープログラムコードを実行可能なマシンコードにコンパイルすること、
ｃ）上記組み込みソフトウェアを対応するオブジェクトコードにコンパイルしてから、上記更新処理ルーチンを当該オブジェクトコード内に設置し、当該オブジェクトコードを実行可能なマシンコードにコンパイルすること、
ｄ）上記組み込みソフトウェアを実行可能マシンコードにコンパイルしてから、上記更新処理ルーチンを当該実行可能なマシンコード内に設置すること
のうち、少なくとも１つの方法に基づくこと
を特徴とする請求項１記載の組み込みソフトウェアを調整する方法。
【請求項６】
上記複数の更新処理ルーチンを設置する工程は、さらに、少なくとも１つの上記組み込みソフトウェアのプログラム命令を修正する工程を有すること
を特徴とする請求項１記載の組み込みソフトウェアを調整する方法。
【請求項７】
上記複数の更新処理ルーチンを設置する工程は、さらに、少なくとも１つの上記組み込みソフトウェアのプログラム命令を修正する工程を有すること
を特徴とする請求項５記載の組み込みソフトウェアを調整する方法。
【請求項８】
少なくとも１つの上記更新処理ルーチンは、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する位置に移して行い、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行すること
を特徴とする請求項１記載の組み込みソフトウェアを調整する方法。
【請求項９】
少なくとも１つの上記更新処理ルーチンは、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する位置に移して行い、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行すること
を特徴とする請求項４記載の組み込みソフトウェアを調整する方法。
【請求項１０】
少なくとも１つの上記更新処理ルーチンは、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在するか否かを検査し、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する位置に移して行い、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行すること
を特徴とする請求項１記載の組み込みソフトウェアを調整する方法。
【請求項１１】
少なくとも１つの上記更新処理ルーチンは、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチがあるか否かを検査し、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する位置に移して行い、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行すること
を特徴とする請求項４記載の組み込みソフトウェアを調整する方法。
【請求項１２】
上記組み込みソフトウェアの実行を上記ソフトウェアパッチが存在する位置に移して行う工程は、さらに、上記組み込みソフトウェアの実行をパッチコントロールルーチンが存在する第１の位置に移した後、当該パッチコントロールルーチンに基づいて、当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する第２の位置に移して、当該ソフトウェアパッチを実行すること
を特徴とする請求項８記載の組み込みソフトウェアを調整する方法。
【請求項１３】
上記組み込みソフトウェアの実行を上記ソフトウェアパッチが存在する位置に移して行う工程は、さらに、上記組み込みソフトウェアの実行をパッチコントロールルーチンが存在する第１の位置に移した後、当該パッチコントロールルーチンに基づいて、当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する第２の位置に移して、当該ソフトウェアパッチを実行すること
を特徴とする請求項１０記載の組み込みソフトウェアを調整する方法。
【請求項１４】
上記複数の更新処理ルーチンは、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する位置に移して行い、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行する第１のルーチンと、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在するか否かを検査し、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する位置に移して行い、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行する第２のルーチンと、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在するか否かを検査し、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行をパッチコントロールルーチンが存在する第１の位置に移して行ってから、当該パッチコントロールルーチンに基づいて当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する第２の位置に移して行い、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行する第３のルーチンと、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行をパッチコントロールルーチンが存在する第１の位置に移して行ってから、当該パッチコントロールルーチンに基づいて当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する第２の位置に移して行い、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行する第４のルーチンと
のうち、少なくとも１つを有すること
を特徴とする請求項１記載の組み込みソフトウェアを調整する方法。
【請求項１５】
ｅ）ソフトウェアパッチを生成して書き替えることによって所定の機能を提供する工程と、
ｆ）通信接続を介して上記ソフトウェアパッチを上記デジタル機器に送信する工程と、
ｇ）上記デジタル機器によって上記ソフトウェアパッチを受信する工程と、
ｈ）上記ソフトウェアパッチを上記メモリーエリアに書き込む工程とをさらに備えること
を特徴とする請求項１記載の組み込みソフトウェアを調整する方法。
【請求項１６】
ｅ）ソフトウェアパッチを生成して書き替えることによって所定の機能を提供する工程と、
ｆ）通信接続を介して上記ソフトウェアパッチを上記デジタル機器に送信する工程と、
ｇ）上記デジタル機器によって上記ソフトウェアパッチを受信する工程と、
ｈ）上記ソフトウェアパッチを上記メモリーエリアに書き込む工程とをさらに備えること
を特徴とする請求項８記載の組み込みソフトウェアを調整する方法。
【請求項１７】
ｅ）ソフトウェアパッチを生成して書き替えることによって所定の機能を提供する工程と、
ｆ）通信接続を介して上記ソフトウェアパッチを上記デジタル機器に送信する工程と、
ｇ）上記デジタル機器によって上記ソフトウェアパッチを受信する工程と、
ｈ）上記ソフトウェアパッチを上記メモリーエリアに書き込む工程とをさらに備えること
を特徴とする請求項１０記載の組み込みソフトウェアを調整する方法。
【請求項１８】
ｅ）ソフトウェアパッチを生成して書き替えることによって所定の機能を提供する工程と、
ｆ）通信接続を介して上記ソフトウェアパッチを上記デジタル機器に送信する工程と、
ｇ）上記デジタル機器によって上記ソフトウェアパッチを受信する工程と、
ｈ）上記ソフトウェアパッチを上記メモリーエリアに書き込む工程とをさらに備えること
を特徴とする請求項１２記載の組み込みソフトウェアを調整する方法。
【請求項１９】
上記ソフトウェアパッチを使用して上記組み込みソフトウェア内の上記更新処理ルーチンの少なくとも一部を上書きする工程をさらに備えること
を特徴とする請求項１５記載の組み込みソフトウェアを調整する方法。
【請求項２０】
上書きされる上記一部は、所定のジャンプオフセット（jump offset）であること
を特徴とする請求項１９記載の組み込みソフトウェアを調整する方法。
【請求項２１】
上記ソフトウェアパッチを生成する工程は、
当該ソフトウェアパッチを生成する機能と、
所定の暗号化アルゴリズムによって当該ソフトウェアパッチを暗号化する機能と
のうち、少なくとも１つの機能を有するパッチサーバーを使用する工程を有すること
を特徴とする請求項１５記載の組み込みソフトウェアを調整する方法。
【請求項２２】
上記ソフトウェアパッチを送信する工程は、
当該ソフトウェアパッチを送信する機能と、
上記デジタル機器からの少なくとも１つのメッセージを受信する機能と、
当該ソフトウェアパッチを再送信する機能と
のうち、少なくとも１つの機能を有するパッチサーバーを使用する工程を有すること
を特徴とする請求項１５記載の組み込みソフトウェアを調整する方法。
【請求項２３】
さらに、上記デジタル機器から少なくとも１つのメッセージを上記パッチサーバーに送信する工程は、
当該デジタル機器によって上記ソフトウェアパッチを受信した後と、
上記ソフトウェアパッチを上記メモリーエリアに書き込んだ後と
のいずれかのタイミングで実行されること
を特徴とする請求項２２記載の組み込みソフトウェアを調整する方法。
【請求項２４】
上記ソフトウェアパッチは、
製造識別コードと、
製品モデルナンバーと、
ソフトウェアバージョンナンバーと、
ソフトウェアセクション識別コードと、
パッチ識別コードと、
ＣＰＵ識別コードと、
ＭＡＣ層アドレスと、
パッチアドレス情報と、
上記組み込みソフトウェアを更新するパッチプログラムと、
パッチプログラムの変換関連情報と、
リセットフラグ情報と、
パッチの書き込みの後処理に使用される情報と、
デジタル機器を識別するために使用される情報と、
ユーザーを識別するために使用される情報と、
上記デジタル機器のデータエリアを更新するデータパラメーターと
のうち、少なくとも１つを含むこと
を特徴とする請求項１記載の組み込みソフトウェアを調整する方法。
【請求項２５】
ソフトウェアパッチによるフィールド修正のためにデジタル機器内の組み込みソフトウェアの動作を調整する方法であって、
ａ）所定の基準に基づいて、上記組み込みソフトウェア内で複数の挿入位置を決定し、少なくとも２つの上記挿入位置を上記組み込みソフトウェアの２つのセクションと定義する工程と、
ｂ）上記組み込みソフトウェア内に複数のパッチ操作エリアを設置する工程と、
ｃ）上記パッチ操作エリアを第２の内容に選択的に変更可能な第１の内容に設定する工程と、
ｄ）上記複数のパッチ操作エリアとともに上記組み込みソフトウェアを上記デジタル機器内にロードする工程とを備えること
を特徴とする組み込みソフトウェアの動作を調整する方法。
【請求項２６】
上記組み込みソフトウェア内に複数のパッチ操作エリアを設置する工程は、当該組み込みソフトウェアの上記挿入位置に上記パッチ処理エリアを設置する工程を有すること
を特徴とする請求項２５記載の組み込みソフトウェアの動作を調整する方法。
【請求項２７】
上記組み込みソフトウェアのコードエリア外の所定のメモリーエリアに少なくとも１つのパッチ操作エリアを設置する工程をさらに備えること
を特徴とする請求項２５記載の組み込みソフトウェアの動作を調整する方法。
【請求項２８】
上記組み込みソフトウェアのコードエリア外の所定のメモリーエリアに少なくとも１つのパッチ操作エリアを設置する工程をさらに備えること
を特徴とする請求項２６記載の組み込みソフトウェアの動作を調整する方法。
【請求項２９】
上記パッチ操作エリアを設置する工程は、上記組み込みソフトウェア内にプログラム命令を書き込むことによって当該組み込みソフトウェア内にメモリーエリアを確保して当該パッチ操作エリアとして使用する工程を有すること
を特徴とする請求項２５記載の組み込みソフトウェアの動作を調整する方法。
【請求項３０】
上記パッチ操作エリアを設置する工程は、上記組み込みソフトウェア内にプログラム命令を書き込むことによって当該組み込みソフトウェア内にメモリーエリアを確保して当該パッチ操作エリアとして使用する工程を有すること
を特徴とする請求項２６記載の組み込みソフトウェアの動作を調整する方法。
【請求項３１】
上記パッチ操作エリアを設置する工程は、上記組み込みソフトウェア内にプログラム命令を書き込むことによって当該組み込みソフトウェア内にメモリーエリアを確保して当該パッチ操作エリアとして使用する工程を有すること
を特徴とする請求項２７記載の組み込みソフトウェアの動作を調整する方法。
【請求項３２】
上記挿入位置を決定する工程は、
上記組み込みソフトウェアのプログラムソフトウェアの行数、
上記組み込みソフトウェアの機能ユニット、
上記組み込みソフトウェアの命令タイプ、
上記デジタル機器の所定のソフトウェア設計方式、
上記デジタル機器の所定のハードウェア設計方式、
上記組み込みソフトウェアの所定の修正機構、
上記組み込みソフトウェアの所定のエラー訂正機構
のうち、少なくとも１つに基づくこと
を特徴とする請求項２５記載の組み込みソフトウェアの動作を調整する方法。
【請求項３３】
上記パッチ操作エリアを設置する工程は、さらに、少なくとも１つの上記組み込みソフトウェアのプログラム命令を修正する工程を有すること
を特徴とする請求項２５記載の組み込みソフトウェアの動作を調整する方法。
【請求項３４】
上記パッチ操作エリアは、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する位置に移して行い、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行する第１の更新処理ルーチンと、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在するか否かを検査し、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する位置に移して行い、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行する第２の更新処理ルーチンと、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在するか否かを検査し、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行をパッチコントロールルーチンが存在する第１の位置に移して行ってから、当該パッチコントロールルーチンに基づいて当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する第２の位置に移して行い、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行する第３の更新処理ルーチンと、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、当該組み込みソフトウェアの実行をパッチコントロールルーチンが存在する第１の位置に移して行ってから、当該パッチコントロールルーチンに基づいて当該組み込みソフトウェアの実行を当該ソフトウェアパッチが存在する第２の位置に移して行い、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在しない場合には、当該組み込みソフトウェアの当該セクションを実行する第４の更新処理ルーチンと、
上記組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在するか否かを検査し、当該組み込みソフトウェアのセクションを更新するソフトウェアパッチが存在する場合には、対応するセクションを修正するために当該組み込みソフトウェアの実行を修正し、当該ソフトウェアパッチにジャンプして実行する第５の更新処理ルーチンと、
上記ソフトウェアパッチが存在する場合には、対応するセクションを修正するために当該組み込みソフトウェアの実行を修正し、当該ソフトウェアパッチが存在しない場合には、当該セクションにジャンプするジャンプ命令と、
上記ジャンプ命令によって他のジャンプオフセット値に選択的に変更可能なエリアであるジャンプオフセット値と、
上記ソフトウェアパッチにジャンプするように命令するルーチンであるパッチコントロールルーチンと、
上記組み込みソフトウェアの実行を修正するパッチプログラムと、
パッチ訂正ルーチンに選択的に変更可能なエリアであるパッチコントロールブロックと、
上記組み込みソフトウェアの実行を修正するために使用される所定の内容を設定する第１のメモリーエリアと、
上記組み込みソフトウェアの実行を修正するために使用されるパラメーターに変更可能な所定の内容を設定する第２のメモリーエリアと、
上記組み込みソフトウェアの実行を修正するために使用されるパラメーターに変更可能な所定の内容を設定する第３のメモリーエリアと
のうち、少なくとも１つを有すること
を特徴とする請求項２５記載の組み込みソフトウェアの動作を調整する方法。
【請求項３５】
上記パッチコントロールブロックは、上記組み込みソフトウェアの複数のセクションによってシェアされること
を特徴とする請求項３４記載の組み込みソフトウェアの動作を調整する方法。
【請求項３６】
上記複数のパッチ操作エリアを設置する工程のタイミングは、
ａ）上記組み込みソフトウェアを実行可能マシンコードにコンパイルする前に少なくとも１つの上記パッチ操作エリアを当該組み込みソフトウェア内に設置すること、
ｂ）上記組み込みソフトウェアを対応するアセンブリープログラムコードにコンパイルしてから、少なくとも１つの上記パッチ操作エリアを当該アセンブリープログラムコード内に設置し、その後当該アセンブリープログラムコードを実行可能マシンコードにコンパイルすること、
ｃ）上記組み込みソフトウェアを対応するオブジェクトコードにコンパイルしてから、少なくとも１つの上記パッチ操作エリアを当該オブジェクトコード内に設置し、その後当該オブジェクトコードを実行可能マシンコードにコンパイルすること、
ｄ）上記組み込みソフトウェアを実行可能マシンコードにコンパイルしてから、少なくとも１つの上記パッチ操作エリアを上記実行可能マシンコード内に設置すること
のうち、少なくとも１つの方法に基づくこと
を特徴とする請求項２５記載の組み込みソフトウェアの動作を調整する方法。
【請求項３７】
ｅ）ソフトウェアパッチを生成して書き替えることによって所定の機能を提供する工程と、
ｆ）通信接続を介して上記ソフトウェアパッチを上記デジタル機器に送信する工程と、
ｇ）上記デジタル機器によって上記ソフトウェアパッチを受信する工程と、
ｈ）上記ソフトウェアパッチを少なくとも１つの上記パッチ操作エリアに書き込む工程とをさらに備えること
を特徴とする請求項２５記載の組み込みソフトウェアの動作を調整する方法。
【請求項３８】
ｅ）ソフトウェアパッチを生成して書き替えることによって所定の機能を提供する工程と、
ｆ）通信接続を介して上記ソフトウェアパッチを上記デジタル機器に送信する工程と、
ｇ）上記デジタル機器によって上記ソフトウェアパッチを受信する工程と、
ｈ）上記ソフトウェアパッチを少なくとも１つの上記パッチ操作エリアに書き込む工程とをさらに備えること
を特徴とする請求項２７記載の組み込みソフトウェアの動作を調整する方法。
【請求項３９】
ｅ）ソフトウェアパッチを生成して書き替えることによって所定の機能を提供する工程と、
ｆ）通信接続を介して上記ソフトウェアパッチを上記デジタル機器に送信する工程と、
ｇ）上記デジタル機器によって上記ソフトウェアパッチを受信する工程と、
ｈ）上記ソフトウェアパッチを少なくとも１つの上記パッチ操作エリアに書き込む工程とをさらに備えること
を特徴とする請求項２８記載の組み込みソフトウェアの動作を調整する方法。
【請求項４０】
ｅ）ソフトウェアパッチを生成して書き替えることによって所定の機能を提供する工程と、
ｆ）通信接続を介して上記ソフトウェアパッチを上記デジタル機器に送信する工程と、
ｇ）上記デジタル機器によって上記ソフトウェアパッチを受信する工程と、
ｈ）上記ソフトウェアパッチを少なくとも１つの上記パッチ操作エリアに書き込む工程とをさらに備えること
を特徴とする請求項２９記載の組み込みソフトウェアの動作を調整する方法。
【請求項４１】
ｅ）ソフトウェアパッチを生成して書き替えることによって所定の機能を提供する工程と、
ｆ）通信接続を介して上記ソフトウェアパッチを上記デジタル機器に送信する工程と、
ｇ）上記デジタル機器によって上記ソフトウェアパッチを受信する工程と、
ｈ）上記ソフトウェアパッチを少なくとも１つの上記パッチ操作エリアに書き込む工程とをさらに備えること
を特徴とする請求項３４記載の組み込みソフトウェアの動作を調整する方法。
【請求項４２】
上記書き込む工程は、上記ソフトウェアパッチを使用して少なくとも１つのジャンプオフセットを変更する工程を有すること
を特徴とする請求項３７記載の組み込みソフトウェアの動作を調整する方法。
【請求項４３】
上記ソフトウェアパッチを生成する工程は、
当該ソフトウェアパッチを生成する機能と、
所定の暗号化アルゴリズムによって当該ソフトウェアパッチを暗号化する機能と
のうち、少なくとも１つの機能を有するパッチサーバーを使用する工程を有すること
を特徴とする請求項３７記載の組み込みソフトウェアの動作を調整する方法。
【請求項４４】
上記ソフトウェアパッチを送信する工程は、
当該ソフトウェアパッチを送信する機能と、
上記デジタル機器からの少なくとも１つのメッセージを受信する機能と、
当該ソフトウェアパッチを再送信する機能と
のうち、少なくとも１つの機能を有するパッチサーバーを使用する工程を有すること
を特徴とする請求項３７記載の組み込みソフトウェアの動作を調整する方法。
【請求項４５】
上記送信する工程は、ＣＤＭＡ標準で定義されるデータ・バースト・メッセージ（Data Burst Message）を使用して上記ソフトウェアパッチを送信する工程を有すること
を特徴とする請求項３７記載の組み込みソフトウェアの動作を調整する方法。
【請求項４６】
さらに、上記デジタル機器から少なくとも１つのメッセージを上記パッチサーバーに送信する工程は、
当該デジタル機器によって上記ソフトウェアパッチを受信した後と、
上記ソフトウェアパッチを上記パッチ操作エリアに書き込んだ後と
のいずれかのタイミングで実行されること
を特徴とする請求項４４記載の組み込みソフトウェアの動作を調整する方法。
【請求項４７】
上記ソフトウェアパッチは、
製造識別コードと、
製品モデルナンバーと、
ソフトウェアバージョンナンバーと、
ソフトウェアセクション識別コードと、
パッチ識別コードと、
ＣＰＵ識別コードと、
ＭＡＣ層アドレスと、
パッチアドレス情報と、
上記組み込みソフトウェアを更新するパッチプログラムと、
パッチプログラムの変換関連情報と、
リセットフラグ情報と、
パッチの書き込みの後処理に使用される情報と、
デジタル機器を識別するために使用される情報と、
ユーザーを識別するために使用される情報と、
上記デジタル機器のデータエリアを更新するデータパラメーターと
のうち、少なくとも１つを有すること
を特徴とする請求項３７記載の組み込みソフトウェアの動作を調整する方法。
【請求項４８】
上記デジタル機器によって上記ソフトウェアパッチの少なくとも１項目を変換する工程は、さらに、
上記ソフトウェアパッチを上記パッチ操作エリアに書き込む前に、上記少なくとも１項目を第１のソフトウェア言語フォーマットから第２のソフトウェア言語フォーマットに変更する工程と、
上記ソフトウェアパッチを実行する前に、上記少なくとも１項目を第１のソフトウェア言語フォーマットから第２のソフトウェア言語フォーマットに変更する工程と、
上記ソフトウェアパッチを上記パッチ操作エリアに書き込む前に、上記少なくとも１項目を第１のデータフォーマットから第２のデータフォーマットに変更する工程と、
上記ソフトウェアパッチを実行する前に、上記少なくとも１項目を第１のデータフォーマットから第２のデータフォーマットに変更する工程と
のうち、いずれか１つを有すること
を特徴とする請求項３７記載の組み込みソフトウェアの動作を調整する方法。
【請求項４９】
上記ソフトウェアパッチを上記パッチ操作エリアに書き込む工程は、データをフラッシュメモリーに書き込む少なくとも１つのフラッシュ書き込みルーチンによって実現されること
を特徴とする請求項３７記載の組み込みソフトウェアの動作を調整する方法。
【請求項５０】
上記ソフトウェアパッチの上記書き込み工程は、さらに、フラッシュ書き込みの前に、上記フラッシュ書き込みルーチンをＲＡＭメモリーに移す工程を有すること
を特徴とする請求項４９記載の組み込みソフトウェアの動作を調整する方法。
【請求項５１】
フラッシュメモリー及び不揮発性メモリー（non-volatile memory；ＮＶＭ）を有する組み込みソフトウェアによって実行されるデジタル機器を修正する方法であって、
ａ）フラッシュメモリーの内容を更新する少なくとも１つのパッチプログラムと不揮発性メモリーの内容を更新する少なくとも１つのデータパラメーターとからなるソフトウェアパッチを生成する工程と、
ｂ）無線通信接続を介して上記ソフトウェアパッチを上記デジタル機器に送信する工程と、
ｃ）上記デジタル機器よって上記ソフトウェアパッチを受信する工程と、
ｄ）上記ソフトウェアパッチを上記デジタル機器内に書き込む工程とを備えること
を特徴とする組み込みソフトウェアによって実行されるデジタル機器を修正する方法。
【請求項５２】
上記書き込み工程は、
既存のデータを上書きすることによって上記少なくとも１つのデータパラメーターを上記不揮発性メモリーに書き込む工程と、
上記少なくとも１つのパッチプログラム片を上記フラッシュメモリーに書き込む工程と
のうち、少なくとも１つの工程を有すること
を特徴とする請求項５１記載の組み込みソフトウェアによって実行されるデジタル機器を修正する方法。
【請求項５３】
上記ソフトウェアパッチの識別情報を上記組み込みソフトウェアのパッチコントロールテーブルに書き込む工程と、
上記ソフトウェアパッチのパッチコントロール情報を上記組み込みソフトウェアのパッチコントロールテーブルに書き込む工程と
のうち、少なくとも１つの工程をさらに備えること
を特徴とする請求項５２記載の組み込みソフトウェアによって実行されるデジタル機器を修正する方法。
【請求項５４】
デジタル機器内の組み込みソフトウェアを更新する命令を備えるコンピュータ読み取り可能な記録媒体であって、
上記組み込みソフトウェアを実行する命令と、
上記組み込みソフトウェアのセクションの使用するパッチプログラムが存在するか否かを決定する命令と、
上記パッチプログラムが上記セクションに使用される場合に、上記組み込みソフトウェアが当該セクションの実行を当該パッチプログラムに移す命令と、
上記パッチプログラムの実行後、上記組み込みソフトウェアの所定の位置から実行する命令とを備えること
を特徴とするコンピュータ読み取り可能な記録媒体。
【請求項５５】
上記組み込みソフトウェアは、パッチプログラムがあるか否かを判定する複数のルーチンが設置されること
を特徴とする請求項５４記載のコンピュータ読み取り可能な記録媒体。
【請求項５６】
上記所定の位置は、更新の必要があるプログラム部分の末端であること
を特徴とする請求項５４記載のコンピュータ読み取り可能な記録媒体。
【請求項５７】
通信接続を介してパッチプログラムを受信する命令と、
上記パッチプログラムを上記デジタル機器内に書き込む命令とをさらに備えること
を特徴とする請求項５５記載のコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
出願関連事項
本特許出願は、２００１年７月１６日に出願された出願番号６０／３０５，７０４「組み込みソフトウェアパッチシステム（Embedded Software Patch System)」、及び２００２年２月８日に出願された出願番号６０／３５４，９１５「組み込みソフトウェアパッチシステム」の優先権を主張するものである。先の出願は、恰も完全にここに述べられるかのように、本特許の出願範囲は、上述した２件の出願を参照し、その内容が本出願に組み入れられている。
【０００２】
本発明の技術分野
本発明は、組み込みソフトウェアオペレーティングシステムを備えたデジタル電子機器に関し、詳しくは、デジタル機器の販売前又は販売後に、ソフトウェアパッチを使用して当該製品中の組み込みソフトウェアの更新、訂正、修正、アップグレードを行うシステム及び方法に関する。
【背景技術】
【０００３】
背景技術
デジタル科学技術の発展と革新は、人々の生活、仕事、娯楽を大いに変化させた。日増しにコンパクト化するコンピュータ、携帯電話機、携帯情報端末機（ＰＤＡ）、ポケットベル、ＰＣＭＣＩＡ無線モデムカード、その他の一般標準又はＩ／Ｏコネクタを用いた無線モデムカードは、科学技術が人々にとって不可欠となってきていることの最良の例である。このようなデジタル科学技術は、人々の仕事をより効率的及び生産的にするとともに、家族との関係を維持し、より多くの情報と娯楽とを得るのに役立っている。
【０００４】
携帯電話機、ＰＤＡ、セットトップボックス（set-top boxes）等のデジタル機器の技術は、大規模な組み込みソフトウェアシステムに基づいている。このようなデジタル機器の組み込みソフトウェアシステムは、いずれも、通常何万行ものソースコードを有する。このような組み込みソフトウェアにソフトウェアバグが存在することは避けられず、やがてこのようなエラーによってデジタル機器の機能不全が生じる。バグによっては致命的で、メーカーは、製品の回収を余儀なくされる。製品の回収による経済的な損失のため、メーカーによっては、一部特定のマーケットへの進出を避けるか、製品の品質及び信頼性が改善されるまで待機する決定をする。勿論、メーカーが決定を下す際には、このような方法で生じるメーカーの業界関係のトラブル、消費者の信頼喪失も、重要な考察すべき要素である。
【０００５】
デジタル機器の研究と製造の絶え間ない改善にもかかわらず、プロセス内での欠陥は、避けられない。また、デジタル機器が発展し複雑化するにつれて、ソフトウェア、ハードウェア、材料、生産上の機能不全や欠陥が生じやすい。メーカーは、多くの予防措置を利用でき、製品販売前に、欠陥を減らしたり検査したりすることができる。しかしながら、一旦このような製品が市場に流入してから、これらのデジタル機器を修理しようとすれば、製品回収のトラブルとなる可能性がある。少量の製品に欠陥が生じた場合には、販売店は、消費者に修理や交換のサービスを提供できるが、このような不便が稀であったり、又は販売店が修理期間内に自主的に代用製品を提供したりする場合にのみ、消費者は、このような不便に耐えることができる。
【０００６】
製品に多くの欠陥が現れ、多くの製品に波及した場合には、販売店は、消費者に修理や交換のサービスを提供する可能性がある。しかしながら、このような膨大な数量に対しては、販売店は、こうした欠陥製品を修理、交換するのに十分な資金がない可能性がある。販売店は、修理期間内に代用製品を提供することができるが、予め十分な代用品の在庫があってはじめて消費者の臨時使用に提供することができる。このような臨時使用方法では、販売店は通常の方法で製品を販売して利益を得ることができないため、関連の在庫収入の喪失を引き起こす可能性がある。
【０００７】
この他、仮にデジタル機器が市場に投入されたとしても、場合によっては、メーカーによる当該製品の改善、強化、アップグレードの必要があるため、当該製品の組み込みソフトウェアの変更が必要となる可能性がある。重大な変更として、メーカーは、新バージョンの製品の発行を決定する可能性がある。こうした決定は、多大なコストがかかるが、必要なことである。小規模の変更については、メーカーは、早めに新バージョンを発行するか、又は多くの小規模の変更が重なってから再発行するかの選択に直面する。製品の発行が早すぎたり、不適当な時期に発行したりすると、会社の資金を無駄にすることになるが、変更が比較的多くなってから再発行すれば、消費者のクレームを受ける危険性がある。
【０００８】
そのため、このような組み込みソフトウェアシステムを備えるデジタル製品の回収を低減することは望ましい。
【０００９】
また、このような組み込みソフトウェアシステムを備えるデジタル製品の中間的な販売を低減することも望ましい。
【００１０】
さらに、修理、修繕、更新、アップグレード、強化の方法により、このようなデジタル機器の販売回数を低減することも望ましい。
【発明の開示】
【００１１】
本発明の概要
本発明は、組み込みソフトウェア更新システムのシステムと方法に関するものであり、詳しくは、メーカーや販売店がソフトウェアバグ（bugs）やハードウェアの問題によって高コストの製品を回収することを回避することに関するものである。本発明は、遠隔操作（remotely）によってソフトウェアのエラーを訂正し、ハードウェアの問題が製品に与える影響を最小限に抑制するエラー訂正システム（error correction system）と、ソフトウェアパッチ（software patches）を使用してデジタル機器内のソフトウェアモジュールを更新するソフトウェア更新システムとを提供する。本発明におけるソフトウェアシステムにより、製造メーカーは、ソフトウェアパッチを使用中のデジタル機器に送信し、ソフトウェアのエラーの修正を行い、ハードウェアの問題による影響を最小限に抑制する。また、当該ソフトウェアパッチは、デジタル機器の不揮発性メモリー（Non Volatile Memory；ＮＶＭ）又はＥＥＰＲＯＭ（電気的消去再書き込み可能ＲＯＭ、Electrically Erasable Programmable Read-Only Memory）内のデータエリアが必要とするパラメーターを更新することができ、サービス提供者や製造メーカーが、サービス項目の内容や製品の機能を修正する際に非常に役に立つ。
【００１２】
本発明のソフトウェア更新システムは、従来のソフトウェアアップグレード／更新システムにはない長所がある。本発明のソフトウェア更新システムは、比較的小さなメモリースペースにより、バグを修復したり、キーモジュールを更新するためのソフトウェアパッチを保存したりする。この長所は、小さく且つ携帯可能なデジタル機器にとってさらに顕著となり、従来のソフトウェアアップグレード／更新システムのように、膨大なメモリースペースを要してアプリケーションデータを収容し、新バージョンのソフトウェアのアップグレードを行うことがない。
【００１３】
本発明のソフトウェア更新システムにおける各パッチの大きさは、一般的に小さいため、限りあるネットワーク資源を利用してパッチデータの送信を行う。これに対して、従来のソフトウェアアップグレード／更新システムは、大量のアプリケーションソフトウェアのデータを送信して新バージョンのソフトウェアの更新を行うのに、広いチャンネル幅や大量のネット資源を要する。
【００１４】
デジタル科学技術の日々の進歩により、新しい標準、規格、サービス項目のアップグレードの必要性も日毎さらに頻繁となってきている。この種のアップグレードは、通常新しい先進機能を支援するために新しいデジタルハードウェアを必要とする。本発明のソフトウェアパッチシステムのもう１つの目的は、簡単且つ経済的な方法でソフトウェアのアップグレードを行い、これによってハードウェアの変更回数を最小限に抑制することである。さらに、本発明のソフトウェア更新システムは、例えばＪａｖａ（登録商標）バーチャルマシンやＢＲＥＷ（登録商標）（Binary Runtime Environment for Wireless)のようなアプリケーションプログラムのダウンロードを支援するオペレーティングシステム内に潜在した問題を修復することができる。
【００１５】
また、本発明は、デジタル機器内の組み込みソフトウェアを複数のセクションに分割し、必要なセクションに対してのみ更新を行う。本発明において採用する方法は、ネットワーク通信に必要となる資源を最良に利用するため、全てのシステムを更新する従来のアプローチと比較して優れている。
【００１６】
ＣＰＵ、ＭＣＵ、ＤＳＰのハードウェア設計を行う場合には、本発明に基づいてソフトウェアセクションを実行する前にソフトウェア更新情報が存在するか否かを検査するメカニズムを加えると、ＣＰＵ／ＭＣＵ／ＤＳＰは、組み込みソフトウェアを実行する際に、自動的にソフトウェア更新情報を検査し、更新コードの存在するアドレスにジャンプするように設計することができる。
【発明を実施するための最良の形態】
【００１７】
望ましい具体例についての詳細な記述
１．本発明は、デジタル機器内の組み込みソフトウェア（embedded software）更新システムの方法とシステムに関するものである。以下の詳細な説明における多くの特定の詳細は、本発明を十分に理解できるようにとのものである。しかしながら、本分野の一般技術水準を有する者にとっては、明らかにこのような特定の詳細説明は要することなく本発明を実施することができる。また、従来の構造と技術内容に関しては、本発明の内容について不必要に不明瞭とするのを避けるため、以下では詳細に説明しない。以下の内容で使用している数字の見出しは、各テーマや参照上都合がよいように設けたにすぎない。なお、ここでいう「組み込みソフトウェア」とは、デジタル機器を運用するために、Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒやその他のソフトウェアプログラム言語、若しくはあらゆるＣＰＵ／マイクロプロセッサやＤＳＰ（Digital Signal Processor）を使用した実行可能マシンコードによって記述されたソフトウェアである。
【００１８】
２．  システム構造
まず、システム構造の観点から、本発明のソフトウェア更新システムについて説明する。図１は、従来のマイクロプロセッサシステムの概略図である。従来のデジタル機器におけるマイクロプロセッサシステムは、ＣＰＵ（Central Processing Unit）１００と、ＲＡＭ（Random Access Memory）１１０と、フラッシュ（FLASH）／ＲＯＭメモリー１１５と、いくつかの周辺装置１２０とを備える。フラッシュ／ＲＯＭメモリー１１５内のソフトウェアプログラムは、実行される際には、ＣＰＵ１００によって読み取られる。フラッシュは、電力持続型不揮発性メモリー（nonvolatile memory）であり、上書きや再書き込み（reprogrammed）が可能であるが、ブロック（blocks）を単位とする必要がある。ＲＯＭは、「読み出し専用メモリー（Read Only Memory）」を指す。
【００１９】
図１に示すマイクロプロセッサシステムと同様に、図２に示すように、従来のデジタル機器内のＤＳＰシステムは、ＤＳＰコア２３０と、ＲＡＭ２４０と、フラッシュ／ＲＯＭメモリー２４５と、いくつかの周辺装置２５０とを備える。フラッシュ／ＲＯＭメモリー２４５内のソフトウェアプログラムは、実行される際には、ＤＳＰコア２３０によって読み取られる。
【００２０】
デジタル携帯電話機のような典型的なデジタル機器は、通常マイクロプロセッサシステムを備え、また、ＤＳＰシステムを備えるかもしれない。本発明のソフトウェア更新システムは、デジタル機器のマイクロプロセッサシステム及び／又はＤＳＰシステム内の組み込みソフトウェア内に常駐するように形成される。本発明の１つの実施例に関するソフトウェア更新システムは、デジタル機器内に実装される場合には、パッチ受信用のソフトウェアモジュール３０２と、パッチ書き込み用のソフトウェアモジュール３０４と、パッチデータベース３１０と、パッチ訂正処理器（patch correction handler）３２０とを備えるように形成される。図３は、デジタル機器内のソフトウェア更新システム構造例の概略図である。
【００２１】
図３に示すように、パッチ受信モジュール３０２は、ソフトウェアパッチを受信する。パッチ受信モジュールは、有線接続又は無線接続によるデータ受信機能と、データ検出機能及び／又はデータセキュリティチェック機能とを採用している。パッチ受信モジュール３０２は、正確にパッチを受信した後、このパッチデータをパッチ書き込み（patch programming）モジュール３０４に供給する。パッチ書き込みモジュール３０４は、パッチデータをパッチデータベース３１０に書き込む。パッチ書き込みモジュールは、データをフラッシュ、ＮＶＭ、ＥＥＰＲＯＭメモリー、及び／又はその他のメモリーに書き込むことができるプログラムを有する。パッチデータベース３１０は、パッチデータを保存するフラッシュメモリー内のメモリーエリア及び／又は他のタイプのメモリーである。パッチ訂正処理器３２０は、元のエラーのあるプログラムではなく、パッチプログラムを使用するようにする。パッチ訂正処理器は、ソフトウェア実行の際に、元のエラーのあるソフトウェアコードエリアからパッチプログラムエリアにジャンプ（jump）する機能を有する。
【００２２】
３．  ソフトウェア更新技術
３．１  ソフトウェアの複数のソフトウェアセクション化
本発明の１つの実施例に関連したソフトウェア更新システムの長所を利用するため、組み込みソフトウェアをデジタル機器に実装する前に、まず組み込みソフトウェア内に複数の位置を決定し、以後ソフトウェア更新の開始地点とする。このような位置は、アドレスの小から大の順に基づいて配列され、Ｌ１，Ｌ２，・・・，Ｌｎを用いて表される。ｎは、このような位置の総数を表す。
【００２３】
２つの連続位置間の組み込みソフトウェアの部分（例えばＬ１とＬ２との間）を組み込みソフトウェアのソフトウェアセクション（例えばＳ１）と定義する。このようにして、組み込みソフトウェアは、効果的に複数のソフトウェアセクションに分割され、アドレスの小から大の順に基づいてＳ１，Ｓ２，・・・，Ｓｎと配列される。ｎは、ソフトウェアセクションの総数を表す。注意点は、最後のセクションＳｎはＬｎから始まってこの組み込みソフトウェアの終了地点まで続くことである。
【００２４】
他のソフトウェアと同様に、組み込みソフトウェアは、度々更新や修正が必要である。例えば、ソフトウェアセクションＳ２内のプログラムコードを更新する必要がある場合には、位置Ｌ２からソフトウェアセクションＳ２内の組み込みソフトウェアの代わりに対応するソフトウェアパッチを直接実行することによって更新する。こうして、Ｓ２内のプログラムコードの代わりにこのソフトウェアパッチが実行時に使用される。状況によっては、更新される必要のあるプログラムコードがＳ２に存在する場合でも、その他の位置（例えばＬ１）から更新し始めた方が便利である。すなわち、状況によっては、ソフトウェアパッチまでの組み込みソフトウェアの実行は、目的のセクションより早く始めるのが望ましい。
【００２５】
ソフトウェアセクションのサイズは、必ずしも一定ではなく、各セクションの異なった要求に基づいて異なり、あるセクションから他のセクションまで可変となり得る。位置Ｌ１，Ｌ２，・・・，Ｌｎを決定し、組み込みソフトウェアセクションをＳ１，Ｓ２，・・・，Ｓｎに分割する方式は、ソフトウェア機能（software functions）の限界、プログラムの行数、ＣＰＵ／ＤＳＰの命令のタイプ、ソフトウェアの設計方式、ハードウェアの設計方式、ソフトウェア修正の要求、エラー訂正の要求等、本発明の分野に熟練する者の認識する方式に基づくであろう。
【００２６】
各位置Ｌ１，Ｌ２，・・・，Ｌｎにおいて、更新処理ルーチンが設置され、ソフトウェアの更新を処理する。図４は、ソフトウェアセクション分割と更新処理ルーチンの配置とを示す概略図である。組み込みソフトウェア４００を調整するために、当該ソフトウェア４００の全てのセクション４０１，４０２，４０３の開始地点に更新処理ルーチン４０４，４０５，４０６が設置される。
【００２７】
更新処理ルーチンは、ソフトウェア更新処理を担当するソフトウェアルーチンである。ソフトウェアセクション（例えばＳ２）内にあるプログラムコードを更新するソフトウェアパッチが存在する場合には、位置Ｌ２における更新処理ルーチンによってＣＰＵ／ＤＳＰの実行がソフトウェアパッチの開始アドレスに移され、そのセクションのパッチプログラムが実行される。このプロセスは、詳細は図６にて説明するが、パッチの開始アドレスにジャンプする前に、パッチコントロールルーチン（Patch-Control-Routine）の使用に関与する。セクションＳ２を更新するパッチが存在しない場合には、位置Ｌ２における更新処理ルーチンは、ＣＰＵ／ＤＳＰに現存するＳ２のプログラムの実行を命令する。すなわち、この更新処理ルーチンは、システムの正常実行に影響しないように設計される。
【００２８】
更新処理ルーチンの内容は、場所によって異なるか、全て同じ設計内容である。
【００２９】
３．２  ソフトウェアセクションに基づいたソフトウェア更新
図５は、ソフトウェアセクションに基づいたソフトウェア更新の設計例を示すものである。ソフトウェアセクションＫ５１０を更新するソフトウェアパッチが存在する場合には、セクションＫ内の更新処理ルーチン５０５は、ソフトウェアの実行時にＣＰＵ／ＤＳＰの実行アドレスをパッチプログラム５０７の開始アドレス５０２にジャンプ５０６してソフトウェアセクションＫを更新する。このようにして、セクションＫ内の元のプログラムに代わってパッチプログラム５０７が実行される。このパッチプログラム５０７を実行後、ＣＰＵ／ＤＳＰのＩＰ（Instruction Pointer）は、予め決定された元のソフトウェア内の位置にジャンプ５０８するように指示される。この位置は、通常ソフトウェアセクション５１０内で更新される必要のあるプログラムコードのすぐ後ろである。このようにして、セクション５１０内の全てのバグは、パッチプログラム５０７の実行によって回避（bypassed）される。
【００３０】
図６は、ソフトウェアセクションに基づいたソフトウェア更新の設計例と実施例を示すものである。ソフトウェアセクションＫ６１０を更新するソフトウェアパッチが存在する場合には、ソフトウェアセクションＫ内の更新処理ルーチン６０５は、ＣＰＵ／ＤＳＰに対してパッチコントロールルーチン６０９へジャンプ６０６するように命令する。パッチコントロールルーチン６０９は、一般のパッチプログラム実行をコントロールすることができるソフトウェアルーチンであり、例えばパッチプログラム実行の準備工程及び／又は「パッチコントロールテーブル（Patch-Control-Table）（以下に説明する）」内のパッチ現状態及びシステムパラメーターに基づいて、パッチプログラム６０７の開始アドレス６０２を決定する。このパッチコントロールルーチン６０９は、ＣＰＵ／ＤＳＰに対してセクションＫ６１０のパッチプログラム６０７の開始アドレスへジャンプ６１１するように命令する。このようにして、パッチプログラム６０７は、セクションＫ６１０内の元のプログラムに取って代わり実行される。このパッチプログラムを実行後、ＣＰＵ／ＤＳＰのＩＰは、元のプログラム内の予め決定された位置にジャンプ６０８するように命令される。この位置は、通常更新される必要のあるプログラムコードのすぐ後ろである。
【００３１】
上述したパッチコントロールテーブルは、パッチの受信、メモリーへの書き込み、パッチ信号操作（patch signaling process）をコントロールする情報のリストである。この情報のリストは、デジタル機器に既に書き込まれたパッチの識別コード、及び／又はこれらのパッチによって更新されたセクションの識別コードからなる。また、新しいパッチを保存するためのパッチプログラムエリア内のバイト数のようなパッチデータベースの情報も含む。また、その他、パッチの受信やパッチの書き込み、パッチの信号操作をコントロールする情報も有する。このパッチコントロールテーブルは、パッチコントロールルーチン内かデジタル機器のメモリー６００内のその他の場所に保存される。
【００３２】
パッチコントロールルーチン６０９のような中間工程を使用すると長所があることは、本分野の熟練者が認めるところとなっている。すなわち、ソフトウェアのパッチは、図５に示すパッチプログラム５０７の開始アドレス５０２に直接ジャンプするのではなく、この中間のパッチコントロールルーチンを介してＣＰＵ／ＤＳＰのＩＰに対して、図６に示すパッチプログラム６０７の開始アドレス６０２にジャンプするように命令する。既に更新用のパッチがあるセクションに対して新しいパッチが必要な場合には、既存のパッチに対応するセクション識別コード（section identifier）をパッチコントロールルーチン６０９が担当するパッチコントロールテーブルから削除（例えば０に設定）するが、新しいパッチが元のセクション識別コードと新しい異なったパッチ識別コード（Patch Identifier）及び／又はパッチ開始アドレスとともになって、パッチコントロールテーブル中に書き込まれる。このようにして、パッチコントロールルーチン６０９は、パッチコントロールテーブルの内容から対応した新しいパッチプログラムの開始アドレスを決定し、ＣＰＵ／ＤＳＰのＩＰに対して、この新しいパッチプログラムにジャンプするように命令する。
【００３３】
パッチプログラムコードを保存するメモリーエリアは、組み込みソフトウェアプログラムコードの外部に設置することができるし、また、ソフトウェアプログラムコードの内部にも設置することができる。例えば、フラッシュメモリー内のメモリーエリアは、ソフトウェアプログラム内で１６進数"０ｘＦＦ"のバイトによって充填されるデータエリア、若しくはデータバッファー（data buffer）として確保され、このメモリーエリアは、組み込みソフトウェアコードエリア内に設置され、これらの１６進数"０ｘＦＦ"をパッチプログラムコードに変更若しくは上書きすることにより、パッチプログラムコードを保存することができる。
【００３４】
３．３  更新処理ルーチンの設計
以下、更新処理ルーチンの設計及び実装に関連する方法について説明する。
【００３５】
３．３．１  パッチ検査ルーチン（Patch-Checking-Routine）を使用した更新処理ルーチンの設計
パッチフラグ（patch flag）又はパッチ検査ルーチンを使用することは、更新処理ルーチンの設計及び実装例である。このような方法により、各ソフトウェアセクションは、対応するパッチフラグ及び／又はパッチ検査ルーチンを有し、このセクションを更新するためにパッチがパッチエリアに存在するか否かを示す。
【００３６】
パッチエリアにセクションに対応するパッチが書き込まれていない場合には、更新処理ルーチンが以下のようなプログラム作成言語を用いて表示される。これは、直接Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒやその他のソフトウェアプログラム言語、若しくはＣＰＵ／マイクロプロセッサ及びＤＳＰの実行可能マシンコードに訳すことができる。
【００３７】
【数１】
2004536405.tif 000003
【００３８】
上述したように、以上のプログラムにおいてパッチ検査ルーチンが使用される。このパッチ検査ルーチンは、パッチエリアにこの組み込みソフトウェアのセクションを更新するパッチが存在するか否かを検査する。また、パッチフラグ又は一部のシステムパラメーターを検査するか、ソフトウェア機能を利用してこのセクションを更新するパッチの存在を検査する。
【００３９】
パッチ訂正ルーチン（Patch-Correction-Routine）は、ＣＰＵ／マクロプロセッサ又はＤＳＰに対して、元のセクションコードではなく、パッチプログラムコードを使用するように命令するソフトウェアルーチンである。例えばパッチプログラムへジャンプする前に、一部のパラメーターを保存したり一部のパラメーターや機能を設定したりする等の準備を行う必要がある場合には、パッチ訂正ルーチンは、前置き操作（pre-process）を実行する。また、パッチ訂正ルーチンは、ＣＰＵ／マクロプロセッサ又はＤＳＰのＩＰに対して、図５に示すパッチプログラムの開始アドレスの方向や、図６に示すパッチコントロールルーチンの方向命令を有する。パッチコントロールルーチンを使用する長所に関しては、既に３．２節において説明した。
【００４０】
３．３．２  Ｊｕｍｐ／Ｂｒａｎｃｈ命令を使用した更新処理ルーチンの設計
もう１つの更新処理ルーチンの設計及び実装例は、ＪＵＭＰ（若しくはＡＲＭ（登録商標）語法中のＢＲＡＮＣＨ）コマンド、又は類似したＣＰＵ／ＤＳＰ命令を使用する。注意すべきことは、コンピュータのプログラム設計では周知の概念であるＪＵＭＰは、本出願において一般用語として使用され、ＣＰＵ／ＤＳＰの実行を１つの位置からもう１つの位置へと導くことを意味するということである。
【００４１】
パッチエリアにソフトウェアセクションを更新するための対応するパッチが存在しない場合には、更新処理ルーチンは、直接Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒ、及び他のプログラム言語に訳されるか、又はＣＰＵ／マイクロプロセッサとＤＳＰの実行可能マシンコードに訳されて表示されるプログラム作成言語を用いて以下のように表示される。
【００４２】
【数２】
2004536405.tif 000004
【００４３】
パッチエリアにソフトウェアセクションを更新するための対応するパッチが存在しない場合には、更新処理ルーチンの第１の命令は、このセクションのソースコードの開始アドレスであるＬａｂｅｌ＿Ｏまでジャンプすることである。
【００４４】
パッチエリアにソフトウェアセクションを更新するための対応するパッチが存在する場合には、更新処理ルーチンの第１の命令が変更され、ＣＰＵ／ＤＳＰのＩＰをＬａｂｅｌ＿ＯではなくＬａｂｅｌ＿Ｐへジャンプするように指示する。この更新処理ルーチンは、直接Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒ、及び他のプログラム言語に直接訳されるか、又はＣＰＵ／マイクロプロセッサとＤＳＰの実行可能マシンコードに訳されるプログラム作成言語を使用して以下のように表示される。
【００４５】
【数３】
2004536405.tif 000005
【００４６】
この状況下で、ＣＰＵ／マイクロプロセッサ又はＤＳＰのＩＰは、パッチ訂正ルーチンの方向に命令される。パッチ訂正ルーチンの設計方法については、既に３．３．１節において説明した。注意すべきことは、フラッシュメモリー内の内容は、"１"から"０"への変更のみで、"０"から"１"への変更は許可されていない。よって、ジャンプのオフセット（offset）の初期値は、１６進数"０ｘＦＦＦ"に設定されており、パッチの書き込みを実行する際にオフセットを減らすことができる。
【００４７】
３．３．３  Ｄｉｒｅｃｔ  Ｊｕｍｐ／Ｂｒａｎｃｈ命令を使用した更新処理ルーチンの設計
以下、もう１つの本発明の実施例に関連した更新処理ルーチンの設計及び実装例について説明する。パッチエリアにソフトウェアセクションを更新するための対応するパッチが存在しない場合には、更新処理ルーチンは、直接Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒ、及び他のプログラム言語に訳されるか、又はＣＰＵ／マイクロプロセッサ及びＤＳＰの実行可能マシンコードに訳されるプログラム作成言語を用いて以下のように表示される。
【００４８】
【数４】
2004536405.tif 000006
【００４９】
パッチエリアにソフトウェアセクションを更新するための対応するパッチが存在しない場合には、更新処理ルーチンの唯一の命令である第１の命令は、そのセクションのソースコードの開始アドレスであるＬａｂｅｌ＿Ｏにジャンプすることである。
【００５０】
パッチエリアにソフトウェアセクションを更新するための対応するパッチが存在する場合には、更新処理ルーチンの唯一の第１の命令は変更され、ＣＰＵ／ＤＳＰの実行は、パッチ訂正ルーチンの開始アドレス又はパッチプログラムの開始アドレスへと導かれる。この更新処理ルーチンは、直接Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒ、及び他のプログラム言語に訳されるか、又はＣＰＵ／マイクロプロセッサ及びＤＳＰの実行可能マシンコードに訳されるプログラム作成言語を用いて以下のように表示される。
【００５１】
【数５】
2004536405.tif 000007
【００５２】
パッチ訂正ルーチンの設計方法については、既に３．３．１節において説明した。
【００５３】
以下、特に３２ビットの命令セットを使用するＡＲＭモードに対して、ＡＲＭ（登録商標）（Advanced RISC Machines）  ＣＰＵアセンブリーコードを使用する例について説明する。
【００５４】
【数６】
2004536405.tif 000008
【００５５】
この例において、ＡＲＭ  ＣＰＵのＢｒａｎｃｈ命令"Ｂ"は、更新処理ルーチンとして使用される。ＡＲＭ  ＣＰＵのＢｒａｎｃｈ命令"Ｂ"は、次の行までジャンプするため、そのオフセット値は、"０ｘＦＦＦＦＦＦ"となる。フラッシュメモリーのプログラミング（programming）の際、フラッシュメモリー内の１つのビット値は、"１"から"０"に変更され、このオフセット値"０ｘＦＦＦＦＦＦ"は、容易に他の２４ビット値に変更される。
【００５６】
このセクションを更新するパッチが受信されたら、パッチプログラムがパッチプログラムエリアに書き込まれる。この"Ｂ"命令のオフセット値も、元々Ｌａｂｅｌ＿Ｏに対応した"０ｘＦＦＦＦＦＦ"からパッチプログラムの開始アドレスに対応するオフセット値に変更される。
【００５７】
【数７】
2004536405.tif 000009
【００５８】
３．４  パッチ操作エリアに基づいたソフトウェア更新
本節では、ソフトウェアプログラム内のパッチ操作に関するパッチ操作エリア（Patch-Operation-Area）を設置又は確保する技術を紹介する。パッチ操作エリアは、パッチ機能を操作するメモリーエリア又はデータエリアブロック（block of data）である。例えば、パッチ操作エリアは、上述した更新処理ルーチンを保存するメモリーエリア、ＣＰＵ／ＤＳＰのＩＰをパッチプログラム開始アドレスにジャンプさせるＪＵＭＰコマンドを保存するメモリーエリア、パッチコントロールルーチンを保存するメモリーエリア、パッチプログラムを保存するメモリーエリアである。
【００５９】
３．１節と同様に、まず、小から大の順にＬ１，Ｌ２，・・・，Ｌｎの１組のアドレスの位置を決定する。このようにして、この組み込みソフトウェアは、効果的にＳ１，Ｓ２，・・・，Ｓｎのような複数のソフトウェアセクションに分割される。パッチ操作エリアは、Ｌ１，Ｌ２，・・・，Ｌｎの全ての位置、若しくは小部分か大部分の位置に設置又は確保される。また、一部のパッチ操作エリアも、組み込みソフトウェアの最末端又は組み込み式ソフトウェアコードの範囲外のメモリーエリアに挿入若しくは確保される。
【００６０】
１つの実施方式は、元の組み込みソフトウェア内にメモリーを直接確保し、このようなメモリーエリアを組み込みソフトウェア更新用のパッチ操作エリアとして使用する。このような状況下において、上述した「設置」という言葉は、組み込みソフトウェアのある命令を使用してメモリーエリアを「確保」するという意味がより近い。
【００６１】
パッチ操作エリアが定義され、これが更新処理ルーチンとされる際に、前節に示すように、組み込みソフトウェアの各ソフトウェアセクション内に設置される。
【００６２】
以下、パッチ操作エリアをアセンブリーコードプログラム内に設置／確保する方法について一例を挙げて説明する。アセンブリーコードプログラムでは、通常アセンブリーコードの命令内のあるデータエリアに宣言し、このようなデータエリアを利用してある固定パラメーター又はブロックデータを収容することができる。この特徴に基づいて、ソフトウェアプログラム内の特定のデータエリアに宣言し、データエリアをソフトウェアパッチ操作に専用に利用することができる。デジタル機器において、ソフトウェアプログラムを保存するのにフラッシュメモリーが使用されている場合には、特定のデータエリアも1６進数"０ｘＦＦ"で満たされていることが宣言される。このようにして、以後、パッチプロセスは、容易にこれらの１６進数"０ｘＦＦ"を、パッチ訂正ルーチン、パッチコントロールツーチンのプログラムコード、ソフトウェアセクションを更新したりエラーを修復したりするプログラムコードのようなパッチプログラムコードに変更することができる。これは、従来のフラッシュメモリーの内容が"１"から０"にのみ変更可能で、"０"から"１"には変更できないという事実に基づく。また、パッチ操作エリア内のパッチ操作専用の特定のプログラムコードを定義することができる。
【００６３】
ＣＰＵがパッチプログラムエリアにセクションを更新するパッチが存在するソフトウェアセクションを実行する際には、ＣＰＵの命令ＩＰが図５のパッチプログラム開始アドレス５０２及び図６のパッチ開始アドレス６０２のようなパッチプログラム開始アドレスに導かれる。しかしながら、アセンブリーコードのｊｕｍｐ／ｂｒａｎｃｈ命令は、通常最大のジャンプ範囲がある。例えば、１つのＡＲＭ  ＣＰＵがＴＨＵＭＢモードにある場合には、アセンブリーコード"Ｂ"の最大ｂｒａｎｃｈ範囲は、僅か±２０４８バイトである。ＣＰＵのＩＰがｊｕｍｐ／ｂｒａｎｃｈアセンブリーコードによってパッチ開始アドレスに移動されない場合には、複数のｊｕｍｐ／ｂｒａｎｃｈコードが長距離ジャンプを行う。例えば、ＡＲＭ  ＣＰＵがＴＨＵＭＢモードにある場合には、±２０４８バイトよりも長いｊｕｍｐ／ｂｒａｎｃｈには、ｂｒａｎｃｈアセンブリーコード"Ｂ"及びＬｏｎｇ  Ｂｒａｎｃｈ  ｗｉｔｈ  Ｌｉｎｋアセンブリーコード"ＢＬ"を使用することができる。これら複数のｊｕｍｐ／ｂｒａｎｃｈに対してパッチ操作エリアを確保する必要がある。以下、ｊｕｍｐ／ｂｒａｎｃｈに対するパッチ操作エリアを設置する際に、メモリー空間を節約する技術について説明する。
【００６４】
まず、全てのソフトウェアセクションにｊｕｍｐ／ｂｒａｎｃｈコマンドを挿入する。例えば、ＡＲＭ  ＣＰＵがＴＨＵＭＢモードにある場合には、最大ｊｕｍｐ／ｂｒａｎｃｈ範囲が±２０４８バイトであるｊｕｍｐ／ｂｒａｎｃｈアセンブリーコード"Ｂ"を挿入する。このｊｕｍｐ／ｂｒａｎｃｈコマンドのオフセットを設定して、次のコマンドにジャンプするようにする。このようにして、ＣＰＵの操作の結果は、このｊｕｍｐ／ｂｒａｎｃｈコマンドのないソースコードと同様である。この方法については、既に３．３．３節において説明した。
【００６５】
パッチ操作エリアは、パッチコントロールブロックエリアを備える。パッチコントロールブロックの機能は、パッチコントロールルーチンと同様で、第２のｊｕｍｐ／ｂｒａｎｃｈコマンドを有する。フラッシュメモリーを使用する場合には、パッチコントロールブロックは、１６進数"０ｘＦＦ"によって満たされていると宣言される。このようにして、パッチプロセスのフラッシュプログラミングは、このような１６進数"０ｘＦＦ"を第２のｊｕｍｐ／ｂｒａｎｃｈコードのようなプログラムコードに容易に変更することができる。複数のソフトウェアセクションは、１つのパッチコントロールブロックをシェアする。
【００６６】
図７は、パッチコントロールブロックのパッチプログラムエリアへのジャンプの実施例である。短距離のジャンプ７０６により、このプログラムの実行がソフトウェアセクション７１０からパッチコントロールルーチンとして動作するパッチコントロールブロック７０９に移る。第２のジャンプ７１１によってプログラムの実行をパッチプログラム７０７のパッチ開始アドレス７０２まで移す。パッチプログラム７０７を実行して、ソフトウェアセクション７１０の最末端にジャンプして戻る。
【００６７】
以下のプログラム作成言語によるプログラムの例は、４つのソフトウェアセクション（セクションＡ、セクションＢ、セクションＣ、セクションＤ）のシェアするパッチコントロールブロックを示す。この例において、セクションＡのパッチ操作エリアは、更新処理ルーチン"Ｊｕｍｐ  ｔｏ  Ｌａｂｅｌ＿Ｏ＿Ａ"として定義され、セクションＢのパッチ操作エリアは、更新処理ルーチン"Ｊｕｍｐ  ｔｏ  Ｌａｂｅｌ＿Ｏ＿Ｂ"として定義され、セクションＣのパッチ操作エリアは、パッチコントロールブロック及び更新処理ルーチン"Ｊｕｍｐ  ｔｏ  Ｌａｂｅｌ＿Ｏ＿Ｃ"として使用される１６進数"０ｘＦＦ"で満たされたＮバイトのデータブロックエリアとして定義され、セクションＤのパッチ操作エリアは、更新処理ルーチン"Ｊｕｍｐ  ｔｏ  Ｌａｂｅｌ＿Ｏ＿Ｄ"として定義される。
【００６８】
【数８】
2004536405.tif 000010
【００６９】
ソフトウェアパッチを受信すると、パッチプロセスがフラッシュプログラミングプロセスを起動し、対応するソフトウェアセクション内のｊｕｍｐ／ｂｒａｎｃｈコマンドのオフセットを変更し、また、対応するパッチコントロールブロック内でバイトを"０ｘＦＦ"から第２のｊｕｍｐ／ｂｒａｎｃｈコマンドに変更するか、３．３．１節で述べたパッチ訂正ルーチンとして作用するＤＳＰ／ＣＰＵ命令コードに変更する。例えば、ソフトウェアセクションＡを更新するためにパッチを受信する場合には、パッチコントロールブロック内の最初の数バイトは、セクションＡのパッチ訂正ルーチンの命令に変更される。ソフトウェアセクションＤを更新するためにパッチを受信する場合には、パッチコントロールブロック内の次に続く数バイトは、セクションＤのパッチ訂正ルーチンの命令に変更される。このようなパッチ訂正ルーチンは、ＣＰＵ／ＤＳＰのＩＰをパッチプログラムの開始アドレスへと導く。
【００７０】
【数９】
2004536405.tif 000011
【００７１】
以下、パッチコントロールブロックのサイズを小さくする技術を紹介する。フラッシュメモリーのスペースを節約すること、メモリーの使用スペースを制限することが重要な情況下では、できるだけフラッシュメモリーの使用を控えることが必要となる。パッチ操作時のフラッシュメモリーの使用を控える１つの方法として、パッチコントロールブロックのサイズを小さくする方法がある。上述した実施例において、パッチコントロールブロックは、セクションＡ、セクションＢ、セクションＣ、セクションＤの４つのソフトウェアセクションによってシェアされている。しかしながら、この４つのセクションが同時に対応するパッチを有する確率が非常に低い場合には、パッチコントロールブロックのサイズは、３つ又は２つのみのソフトウェアセクションを扱うのに必要なスペースのみを有するように設計される。
【００７２】
３．５  パッチ操作ルーチン設置の際のソフトウェアコンパイル
元の組み込みソフトウェア内に更新処理ルーチン又はパッチ操作エリアを設置後、ソフトウェアコンパイルを行う際に、一部複雑な状況が出現する可能性がある。
【００７３】
以下、ソフトウェアコンパイル時にプログラム言語配列（program word alignment）の問題を回避する技術を紹介する。上述したように、各ソフトウェアセクションには、更新処理ルーチンが設置されており、パッチエリアにセクションを更新するパッチがあるか否かを検査する。また、アセンブリーコード間のメモリースペースの複数のブロックを、第２のｊｕｍｐ／ｂｒａｎｃｈコマンドを含むようにパッチ操作エリアに使われるパラメーターデータエリアとして宣言することにより、プログラムコードでパッチコントロールブロックを配置することができる。しかしながら、コード挿入は、ソフトウェアコンパイル時に複雑な状況を引き起こす可能性がある。例えば、ソフトウェアコンパイル中、ＣＰＵがプログラム言語の並列を要求する可能性がある。また、例えば、ＡＲＭ  ＣＰＵがＴＨＵＭＢモードにある場合に、アセンブリーコードＬＤＲは、４バイトで割り切れるオフセットアドレス（offset address）を必要とする可能性がある。よって、ｊｕｍｐ／ｂｒａｎｃｈコマンド及びパッチコントロールブロックを挿入してパッチ操作を行う際に、挿入したバイトを調整してＬＤＲのオフセットアドレスが４バイトで割り切れるようにする必要がある。すなわち、パッチ操作のために挿入されたバイトを調整することにより、ソフトウェアコンパイル時に言語配列をする必要がなくなる。
【００７４】
以下、ソフトウェアコンパイル時にオフセットが許容範囲を超過することを防止する技術を紹介する。例えば、ＡＲＭ  ＣＰＵがＴＨＵＭＢモードにある際に、アセンブリーコードＬＤＲを用いて、オフセット２０４８バイト未満のデータをＬＤＲコードからロードする。パッチ操作のためにＬＤＲとオフセットアドレスとの間に挿入されたコードがロードされる必要のあるデータを有する場合には、ＬＤＲコードのオフセット値が２０４８バイト以上となる可能性があり、よってコンパイルの問題が生じる。この種の問題を防止する技術は、このようなロードされる必要のあるデータをアセンブリーコード（例えばＬＤＲコード）に比較的近い位置に移動することにより、オフセット値を２０４８バイト未満にすることである。すなわち、このようなあるアセンブリーコード（例えばＬＤＲコード）を用いてロードされる必要のあるデータをこのようなアセンブリーコード（例えばＬＤＲコード）に比較的近い位置へ移動させるかコピーすることにより、ソフトウェアコンパイル時にアセンブリーコードがオフセット値の範囲を超過する問題を防止することができる。
【００７５】
同様に、パッチプロセスに関連したバイトを組み込みソフトウェアに設置してから、元のプログラムコード（例えばＡＲＭアセンブリーコードのＢコマンド）のオフセットが範囲を超過する。すなわち、Ｂコマンドがジャンプしようとする目標位置が遠すぎる可能性がある。Ｂと目標位置との間に、もう１つのｊｕｍｐ／ｂｒａｎｃｈコマンドを挿入すると、ソフトウェアコンパイル時の目標位置が範囲を超過する問題を防止することができる。すなわち、長距離のジャンプは、２回に分割するということである。
【００７６】
３．６  新しいパッチによるパッチプログラムの更新
デジタル機器が受信したパッチをプログラムの書き込みに成功すると、新しいパッチがソフトウェアセクション内の元のプログラムコードに取って代わって使用される。しかしながら、既に書き込まれたパッチプログラムには、依然として問題を起こしたり、パッチプログラムを一定期間後に再び更新する必要が出てきたりする可能性がある。以下に、パッチプログラムの更新技術について説明、紹介する。
【００７７】
デジタル機器内に書き込まれたパッチを更新するため、新しいパッチプログラムを作成してこれを更新する。この機能を支援するため、パッチプログラムを設計する際に、後の新しいパッチのパッチ操作のためのコードスペースを確保するか、上述したソフトウェアセクションの更新方式と類似した更新処理ルーチンをパッチプログラム内に挿入するべきである。よって、ＣＰＵ／ＤＳＰが更新を行う新しいパッチを有する元のパッチのソフトウェアセクションを実行すると、ＣＰＵ／ＤＳＰのＩＰは、更新処理ルーチンによって元のパッチプログラムではなく新しいパッチプログラムを使用するように指示される。
【００７８】
ソフトウェアプログラムのソフトウェアセクションを更新するパッチの設計に関する本出願の示す全ての技術は、他の既存のパッチを更新するためのパッチを設計するのに応用することができる。
【００７９】
３．７  コンパイラ最適化処理（compiler optimization process）による影響の防止
組み込みソフトウェアは、Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒやその他の言語を用いて記述される。ソフトウェアプログラムがアセンブリーコードではなく、Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）、又はその他のプログラム言語で記述されている場合には、当該プログラムは、ソフトウェアコンパイルツールを使用してアセンブリーコードに変換することができる。ソフトウェアコンパイルツールは、ソフトウェアプログラムにおいて最適化処理を行い、Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）、若しくはその他のプログラム言語で記述されたプログラムをオブジェクトコード又はアセンブリーコードに変換するコンパイルプロセスにおいて、元のプログラムを変更／最適化することがある。最適化処理によって一部のプログラムコードが消失することがある。よって、Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）によって更新処理ルーチンを直接プログラムに設置する場合には、更新処理ルーチンは、コンパイラの最適化プロセスにおいて変更又は消去されることがある。しかしながら、一般的にコンパイル後アセンブリーコードをオブジェクトコードに変換する段階において、コードの最適化は行われない。また、ソフトウェアリンクツール（software linker tools）を使用してオブジェクトコードを最後の実行可能マシンコードにリンクする段階においても、コード最適化の作業は行われない。
【００８０】
Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）及び他のプログラム言語を用いて記述されるソフトウェアプログラムは、以下の２種類の方式でコンパイルすることができる。
【００８１】
コンパイル方法１：ソフトウェアコンパイルツールを使用してＣ／Ｃ＋＋／Ｊａｖａ（登録商標）プログラム言語によって記述されたプログラムコードをオブジェクトコードに変換する（最適化プロセスを併用することもある）。その後、ソフトウェアリンクツール（software linker tools）によってオブジェクトコードをリンクして実行可能マシンコードを生成する。
【００８２】
コンパイル方法２：ソフトウェアコンパイルツールを使用してＣ／Ｃ＋＋／Ｊａｖａ（登録商標）プログラム言語によって記述されたプログラムコードをアセンブリーコードに変換する（最適化プロセスを併用することもある）。その後、ソフトウェアアセンブリーツール（software assembler tools）によってアセンブリーコードをオブジェクトコードに変換する。最後にソフトウェアリンクツールによってオブジェクトコードをリンクして実行可能マシンコードを生成する。
【００８３】
通常、コンパイル方法１によって生成される最後の実行可能マシンコードとコンパイル方法２によって生成される最後の実行可能マシンコードは、同様である。ソフトウェアプログラムが直接アセンブリーコードで記述されている場合には、ソフトウェアアセンブリーツールを利用して当該プログラムをオブジェクトコードに変換することができる。その後、ソフトウェアリンクツールによってオブジェクトコードをリンクして実行可能マシンコードを生成する。
【００８４】
ここで、コンパイル方法２を利用して更新処理ルーチンとパッチ操作エリアをソフトウェアプログラムに設置する技術について説明する。コンパイル方法２において、ソフトウェアコンパイルツールを利用してＣ／Ｃ＋＋／Ｊａｖａ（登録商標）プログラム言語で記述されたプログラムコードをアセンブリーコードに変換した（最適化プロセスを併用することもある）後、更新処理ルーチン、パッチコントロールルーチン、及びパッチ操作エリアは、アセンブリーコード中に挿入される。アセンブリーコードをオブジェクトコードに変換し、オブジェクトコードをリンクして実行可能マシンコードを生成するコンパイルプロセスにおけるソフトウェアコードの変更及び最適化が行われないため、パッチルーチン及びパッチプログラムスペースは、影響を受けない。
【００８５】
もう１つの方法は、Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）プログラム言語で記述されたプログラムコードをオブジェクトコードに変換した後、更新処理ルーチン、パッチコントロールルーチン、又はパッチ操作エリアをオブジェクトコードに挿入する方法である。その後、ソフトウェアリンクツールを使用してオブジェクトコードをリンクし実行可能マシンコードを生成する。
【００８６】
３．８  ソフトウェアツールによるパッチ操作ルーチンの設置
本発明は、さらにデジタル機器（例えば携帯電話機）の組み込みソフトウェア内に上述した更新処理ルーチン及びパッチ操作エリアを設置又は挿入する方法を提供する。デジタル機器は、生産ライン上で製造が完成するため、市場投入される前に、予め組み込みソフトウェアに書き込みされ、操作可能の状態にしておく必要がある。デジタル機器に組み込みソフトウェアがプログラムされる前に、更新処理ルーチン及び／又はパッチ操作エリアは、デジタル機器の組み込みソフトウェア内に設置されることが望ましい。
【００８７】
効果的にデジタル機器の組み込みソフトウェア内に更新処理ルーチン及びパッチ操作エリアを設置するために、本発明は、さらに自動設置を行う設置ツールを提供する。
【００８８】
設置ツールの実際的応用は、設置プロセスを組み込みソフトウェアのコンパイルプロセスと統合することである。例えば、ソースコードのコンパイルを行う前に、設置ツールが自動的に起動して設置作業を終える。このようにして、ソフトウェア開発者は、本来の仕事であるコードの開発作業のみを考慮すればよく、設置処理について関与又は懸念する必要がない。
【００８９】
例えば、設置プロセスの応用は、Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）コードではなく、アセンブリーコード上で実行することができる。このような状況下、Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）コードは、まず、対応するアセンブリーコードにコンパイルされ、その後設置プロセスが、生成したアセンブリーコードに作用し、更新処理ルーチンとパッチ操作エリアとを挿入する。その後、アセンブリーコードがさらにオブジェクトコードにコンパイルされる。このようにして、Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）コードのコンパイルにおけるいかなる最適化処理も更新処理ルーチン及びパッチ操作エリアに影響しない。
【００９０】
関連分野の技術の熟練者は、本発明の内容に基づいて、容易に自己の設置ツールを研究開発できるであろうが、以下に２つの設置ソフトウェアツールの例を紹介する。
【００９１】
［実施例Ａ］
Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒやその他のプログラム言語、又はＣＰＵ／マイクロプロセッサ及びＤＳＰの実行可能マシンコードによって記述されたソフトウェアコードのＮ行（若しくはバイト）（所定の数字）に対して、設置ツールは、更新処理ルーチン及び／又はパッチ操作エリアのブロックをソフトウェアコードに挿入する。また、設置ツールは、必要時に、対応するセクション識別コードに基づいて、更新処理ルーチン内のパラメーターとラベル（ｌａｂｅｌｓ）とを変更することができる。設置処理は、直接組み込みソフトウェアのソースコードを含む元のファイル内で行われる。
【００９２】
［実施例Ｂ］
ある応用においては、デジタル機器内の組み込みソフトウェアには、組み込みソフトウェアのソースコードを有するファイルが複数存在する。各ファイルに対して、設置ツールは、元のファイルと同じソフトウェアコードを有するもう１つのファイル（すなわち、当該ファイルのコピー）を生成する。更新処理ルーチン及び／又はパッチ操作エリアを元のファイルではなく、コピーファイルに挿入する。すなわち、生成されたファイル内における、Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒやその他のプログラム言語、又はＣＰＵ／マイクロプロセッサ及びＤＳＰの実行可能マシンコードによって記述されたソフトウェアコードの全てのＮ行（若しくはバイト）（予め決められた数字）に対して、設置ツールは、更新処理ルーチン及び／又はパッチ操作エリアのブロックをソフトウェアコードに挿入する。また、設置ツールは、必要時に、対応するセクション識別コードに基づいて、更新処理ルーチン内のパラメーターとラベル（ｌａｂｅｌｓ）とを変更することができる。
【００９３】
４．  パッチの送受信
４．１  パッチデータの送信
まず、パッチサーバー（patch server）からデジタル機器へのソフトウェアパッチの送信方法について説明する。図８は、特定の通信層（layer）を使用してパッチを送信する実施例を示す。実際の応用によっては、システムの設計方式と需要の違いに基づき、パッチデータ送信のコントロールするため３層のうちの１層又は２層のみを有する。その他の応用としては、回路データ（circuit data）送信やパケットデータ（packet data）送信のような、データ送信チャンネル（data transmission channels）又は送信パス（transmission path）を利用する。また、さらにその他の応用として、音や映像の送信チャンネルを使用したり、パッチデータをこれらのチャンネルや送信パスに保存したりして、パッチデータをデジタル機器に送信する。
【００９４】
この分野の技術の熟練者にとって、パッチサーバーとは、無線接続や有線接続のような既存の通信設備やチャンネルを介すことを理想として複数のデジタル機器へソフトウェアパッチデータを分配若しくは送信できるシステムであろう。パッチサーバーは、動作時に各レベルで自動化される。図３に示すように、送信時、デジタル機器は、パッチ受信モジュール３０２を介してパッチデータを受信する。
【００９５】
パッチデータ送信プロセス中又は送信後、デジタル機器は、確認のため信号（又はメッセージ）をパッチサーバーに送信する。もう１つの例として、デジタル機器は、信号（又はメッセージ）をパッチサーバーではなくパッチ回答メッセージ収集器（Patch-Reply-Message-Collector）に送信する。その後、このパッチ回答メッセージ収集器は、対応する信号とデータとをパッチサーバーに送信する。このパッチ回答メッセージ収集器は、デジタル機器からの回答メッセージを収集する受信器であり、パッチサーバーと異なる位置に設置される。
【００９６】
ＴＩＡ／ＥＩＡ−９５及びＣＤＭＡ２０００標準に基づくＣＤＭＡ技術を使用したデジタル携帯電話機に対して、パッチデータの送信にデータ・バースト・メッセージ（Data Burst Messages）が使用される。データ・バースト・メッセージの使用例は、ＴＩＡ／ＥＩＡ−６３７標準に基づくＳＭＳメッセージの使用である。以下、ＳＭＳメッセージを使用してパッチデータを送信する実施例について説明するが、データ送信分野の熟練者は、その他の信号やメッセージを使用して独自の送信方法を設計することができる。ＳＭＳメッセージ送信の通信層（ＴＩＡ／ＥＩＡ−６３７）は、ＳＭＳメッセージをパッチ送信の低層としたエラー検出（error detection）のプロセスを既に有しているため、デジタル機器は、ほぼエラーなしのパッチデータパケットを受信できる。
【００９７】
図８に示すように、本発明に基づいて実施するパッチ送信のリンク層（Link Layer）８２０の実施例について説明する。リンク層８２０の役割は、送信エラーを検出し、間違ったデータを再送信することにより、確実にパッチ信号メッセージ８００及びパッチデータ８１０を送信することである。エラー検出は、ＣＲＣ（Cyclic Redundancy Codes）、チェックサム（checksum）等、容易にこの分野の技術に熟練した者に実行される技術に基づいている。リンク層８２０もセキュリティーチェック（security check）機能を有する。例えば、パッチデータを送信する前に、パッチサーバーは、暗号化アルゴリズム（encryption algorithm）を使用してパッチデータに対して暗号化を行った後、当該パッチデータをデジタル機器に送信する。デジタル機器がパッチを受信する際には、デジタル機器は、このパッチデータに対して暗号化アルゴリズムを施して受信したパッチデータとの関連性を検査する。
【００９８】
ＳＭＳメッセージを使用する実施例において、ＳＭＳメッセージの運ぶパッチデータパケット（patch data packet）が受信されると、このＳＭＳメッセージは、暗号解読モジュールに送信され、ＣＲＣ検査及びメッセージ暗号解読プロセスが行われ、このパッチデータパケットの正確性を検査する。
【００９９】
デジタル機器がパッチデータを正確に受信できない場合には、パッチサーバーは、パッチデータをこのデジタル機器に再送信すべきである。例えば、パッチデータの再送信（retransmission）は、時間を基礎にしたメカニズムに基づいており、パッチサーバーは、パッチデータ送信を支援するタイマーを有する。パッチサーバーがパッチをデジタル機器に送信するとタイマーが起動する。パッチサーバーがタイマー終了時までにデジタル機器から送信される対応の回答メッセージ（例えばパッチステータス報告）を受信していない場合には、パッチサーバーは、パッチデータパケットをデジタル機器に再送信する。パッチサーバーが予め決められた回数パッチデータを再送信した後、デジタル機器から送信される回答メッセージが受信されないような特殊な状況下では、サーバーは、一時再送信の作業を停止する。この分野の技術の熟練者は、本発明を理解してその他のタイマー方式を利用してパッチデータの送信と再送信とを行うことができる。
【０１００】
上述したＳＭＳメッセージを使用する実施例におけるパッチステータス報告（Patch Status Report）というパッチ信号メッセージとは、デジタル機器からパッチサーバーに送信されるメッセージであり、当該デジタル機器の現在のパッチのステータス情報を有する。デジタル機器がエラーのないパッチデータを受信すると、デジタル機器は、以下の状況下で逆方向（reverse）のＳＭＳメッセージを利用してパッチステータス報告をパッチサーバーに送信する。
（ａ）受信したパッチデータが書き込み（programmed）に成功したことをデジタル機器が確認したこと、又は
（ｂ）デジタル機器がパッチの書き込みに成功したこと
【０１０１】
４．２  パッチデータの構成
図９に示すように、パッチデータ９４０の構成についてさらに説明する。パッチデータ９４０を複数のパッチデータパケットに分割し、１つのパッチデータパケットが１つのリレー層（relay layer）８２０のメッセージ（message）によって運ばれるのが望ましい。
【０１０２】
ＳＭＳメッセージを使用する実施例において、１つのパッチデータパケットは、１つのＳＭＳメッセージによって運ばれる。一般的なＳＭＳメッセージとパッチＳＭＳメッセージとを区別するために、パッチサーバーは、パッチ送信前にパッチＳＭＳメッセージ中のユーザーデータ（User Data）の始めの"ｋ"字（"ｋ"は予め決められた数であり、０から始まる全ての正数）をＫ文字のマジックワード（K-character Magic-word）にセットする。当該マジックワードに続いてパッチデータパケットがＳＭＳメッセージ内に挿入される。
【０１０３】
図９は、パッチデータとパッチデータパケットとの間の関係を示す。パッチデータパケット９５０は、パケットオーバーヘッドフィールド（packet overhead field）９４５とペイロードデータフィールド（payload data field）９４７に大別される。パケットオーバーヘッドフィールド９４５の設計例には、以下のデータが含まれる。
（ａ）パッチ識別コード
（ｂ）現在(current)のパケットナンバー
（ｃ）最後のパケットナンバー
【０１０４】
この分野の熟練者は、本発明の内容に関連して、その他の方式を用いてパケットオーバーヘッドの他の設計方法を容易に実行することができる。
【０１０５】
パッチデータパケット９５０内のペイロード（payload）データ９４７，９５５，９６５は、全部若しくは一部のパッチデータ９４０を有する。
【０１０６】
パッチデータパケット９５０は、パッチサーバーによって送信される前に、予め暗号化アルゴリズムによって暗号化される。パッチサーバーは、静的及び／又は動的キー（keys）を利用して、ソフトウェアパッチデータの暗号化を行う。前者は、ディレクトリーナンバー（directory number）、ＥＳＮ及びＴＭＳＩ臨時識別コードのようなＣＰＵ識別コード、ＭＡＣ層、その他電子通信サービス関連のパラメーターであり、後者は、位置、時間、ユーザーファイルデータを基礎とした変更可能なキーである。
【０１０７】
４．３  パッチデータの処理（Patch Data Processing）
パッチデータパケット９５０を含むメッセージを受信後、デジタル機器は、このメッセージにパッチデータパケットが本当に含まれているか否かを検査する。また、デジタル機器は、この受信したメッセージに対して、エラー検出及び／又はデータの暗号解読を行う。必要なパッチデータパケットの受信に成功したら、このデジタル機器は、パケット内のペイロードデータ９４７，９５５，９６５から対応するパッチデータを作成する。
【０１０８】
ＳＭＳメッセージを使用する実施例において、デジタル機器が１つのＳＭＳメッセージを受信する場合には、デジタル機器は、メッセージ内の始めのｋ文字がマジックワードと一致しているかを検査する。一致していない場合には、このＳＭＳメッセージは、パッチデータパケットではなく、一般のＳＭＳメッセージとして扱われる。
【０１０９】
一致している場合には、デジタル機器は、このメッセージデータに対して暗号解読を行い、このメッセージデータの正確性を検査する。暗号解読プロセスがこのメッセージデータが正確であるものと判断した場合には、このメッセージデータは、パッチデータパケットとして扱われ、このデータを一時緩衝エリアに保存する。一致していない場合には、このＳＭＳメッセージは、一般のＳＭＳメッセージとして扱われる。
【０１１０】
パッチデータ識別コード情報（すなわち、パッチデータパケット内の現有パッチナンバー及び最後のパッチナンバー）に基づいて必要なパッチデータパケットを全て受信した後、このデジタル機器は、これらのパケットから対応するパッチデータを作成する。
【０１１１】
パッチデータ９４０は、以下のパラメーター項目を有する。例えば、
（ａ）受信したパッチデータがデジタル機器用であるかどうかを確認する。例えば、
・ＥＳＮ（Electronically Serial Number)
・ＭＩＮ（Mobile Identification Number）又はＩＭＳＩ（International Mobile Station Identity）
・製造識別コード（Manufacture Identifier）
・製品モデルナンバー（Product model number）
・ソフトウェアバージョンナンバー（Software version number）
・ＣＰＵ識別コード（CPU Identifier）
・ＭＡＣ（Medium Access Control）層アドレス
・その他デジタル機器を識別するパラメーター
・その他ユーザーを識別するパラメーター
【０１１２】
（ｂ）パッチデータ書き込み（patch programming）に必要な項目は、例えば以下の通りである。
・一部のパッチデータは、フラッシュメモリーに書き込まれ、及び／又は一部のパッチデータは、ＮＶＭ（Non Volatile Memory）メモリー及び／又はＥＥＰＲＯＭ（Electrically Erasable Programmable Read-Only Memory）に書き込まれることを示すコントロール情報
・メモリーアドレス、セクション設置情報、その他デジタル機器内のフラッシュ／ＮＶＭ／ＥＥＰＲＯＭメモリーのアドレス情報であるパッチデータのアドレス情報
・ソフトウェア更新を行うパッチプログラムコード
・当該パッチプログラム内で使用されるプログラム言語情報（Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒ及びその他のソフトウェアプログラム言語、又はＣＰＵ／マイクロプロセッサやＤＳＰの実行可能マシンコード）のようなパッチプログラムコードの解読情報
・フラッシュメモリー、ＮＶＭ、及び／又はＥＥＰＲＯＭ内のデータエリアやデータテーブルを更新するパッチデータ
・当該パッチによって更新されるソフトウェアセクションの識別コード
・パッチプログラム作成とデータエリア更新を行うその他の情報
【０１１３】
（ｃ）パッチの書き込みデータ後処理に関する項目は、例えば以下の通りである。
・再起動のフラグ（Reset Flag）
・回答メッセージをパッチサーバーに送信するコントロールフラグ
・パッチの書き込みデータ後処理に関するその他のコントロール信号とデータ
【０１１４】
受信されたパッチデータが作成されたら、デジタル機器は、必要時に作成されたパッチデータに対して暗号解読プロセスを実行することが望ましい。これは、パッチデータのセキュリティーチェックを強化するためである。勿論、パッチサーバー側は、パッチデータパケットに分割して送信する前に、パッチデータの暗号解読を行う。
【０１１５】
パッチプログラムコードは、Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒやその他のプログラム言語、又はＣＰＵ／マイクロプロセッサやＤＳＰの実行可能マシンコードを利用して書き込みされる。パッチデータは、パッチプログラムコードについての変換情報を含む。このパッチプログラムコードがこの変換情報に基づいて変換される場合には、実装方法によっては、受信されたパッチプログラムを他のフォーマットに変換する変換のソフトウェアモジュールを含む。また、実装方法によっては、ＣＰＵ／ＤＳＰがこのパッチプログラムを使用する際に、パッチプログラムは、ＣＰＵ／ＤＳＰ実行可能マシンコードに変換される。
【０１１６】
パッチプログラムは、組み込みソフトウェア内の一部の元のプログラムを取り替えるソフトウェア更新情報を含む。このパッチプログラムの実行は、パッチ開始アドレス（Patch Start Address）から開始される。また、例えば、パッチプログラムの末端部において、元の廃用／エラーコードがスキップされた組み込みソフトウェア内の予め決められた位置、又は廃用／エラーコードを有するブロックの末端にジャンプして戻る命令があることがある。
【０１１７】
パッチデータもまた、フラッシュメモリー、ＮＶＭ、及び／又はＥＥＰＲＯＭメモリー内のデータエリアを更新するための情報を有する。例えば、パッチデータは、デジタル機器のＮＶＭメモリー内の元のデータテーブルを書き換えるための新しいデータテーブルを有する。
【０１１８】
デジタル機器は、特定の情報項目（例えば、ＥＳＮ、製造識別ナンバー、製品モデルナンバー、ソフトウェアバージョンナンバー等）が当該デジタル機器内に保存されているものと一致しているかを検査する。一致していなければ、このデジタル機器は、このパッチデータを廃棄する（又はＳＭＳメッセージを使用して当該メッセージを一般のＳＭＳメッセージとして扱う）。一致する場合には、このデジタル機器は、さらにこの受信したパッチデータがデジタル機器のメモリーに書き込まれたか否かを検査する。書き込まれていなければ、このデジタル機器は、受信したパッチデータのメモリーへの書き込みを開始する。別の方法として、デジタル機器は、パッチサーバーにパッチ回答メッセージを送信してパッチプロセスを完成する。
【０１１９】
５．  パッチの書き込み（Patch Programming）
パッチの書き込みプロセスは、パッチデータをフラッシュメモリー内の対応するパッチエリアへ書き込むこと、及び／又は新しいパラメーターをＮＶＭ／ＥＥＰＲＯＭへ書き込むことに関与する。パッチデータ書き込みは、デジタル機器がアイドル状態（すなわち、未使用の状態）の際に行われるのが望ましい。新しいパラメーターをＮＶＭ／ＥＥＰＲＯＭメモリーに書き込む作業は、一般のデータ上書きプロセス（data overwriting process）を使用して行われる。しかしながら、データをフラッシュメモリーに書き込もうとする状況、特に、このフラッシュメモリーがデジタル機器に読み取られている場合には、一定以上の処置が必要になることがある。パッチプロセスを動作中のデジタル機器内に書き込むため、本発明の１つの実施例であるＲＡＭメモリーにおけるフラッシュメモリープログラミング（programming）技術を紹介する。
【０１２０】
５．１  ＲＡＭメモリーを利用したフラッシュメモリーのプログラミング
フラッシュメモリーにデータを書き込むソフトウェアルーチンは、ＲＡＭメモリーに設置することができる。この分野の技術の熟練者は、既にいくつかの方式でソフトウェアルーチンをＲＡＭメモリーに設置することができる。例えば、フラッシュメモリーにデータを書き込むソフトウェアルーチンは、フラッシュメモリーのプログラミングを行う前に、ソフトウェアルーチンによってＲＡＭメモリーにコピーされる。もう１つの例として、組み込みソフトウェアをコンパイルする際に、コンパイラに対してフラッシュメモリープログラミングルーチンをＲＡＭメモリーに設置するように指示することができ、これにより、コンパイラが自動的に当該ルーチンをＲＡＭメモリーに配置する。ＲＡＭメモリーは、ＣＰＵ／ＤＳＰPコアと同一チップ上にあるＲＡＭ／ＳＲＡＭメモリー又はＣＰＵ／ＤＳＰを有するチップ外部のＲＡＭメモリーである。パッチ関連データをフラッシュメモリーに書き込む必要がある場合には、フラッシュメモリーのプログラミングのソフトウェアルーチンは、ＲＡＭ内で実行される。当該ルーチンは、データバイトを対応するフラッシュアドレス内に書き込み、フラッシュのステータス値を読み取り、データの書き込みの正確性及び作業の終了を確認する。このフラッシュプログラミングの作業は、最高の優先実行順位が付けられ、実行を開始する際に、全てのＣＰＵ／ＤＳＰ中断機能（interrupts）を停止して、実行時に全ての他のソフトウェアの作業及びＣＰＵ／ＤＳＰの中断機能を停止・待機（stop and wait）の状態にすることが望ましい。
【０１２１】
中断処理プロセス（interrupt handler）において、フラッシュプログラミングのルーチンを実行する他の方式は、当該ルーチンが実行を開始する際に、全てのその他の中断機能を停止して、全ての他のソフトウェアの作業及びＣＰＵ／ＤＳＰの中断機能を停止・待機の状態にすることが望ましい。
【０１２２】
フラッシュプログラミングの過程においてその他のソフトウェアの作業や中断ルーチンの影響を受けないように確保する他の１つの方法は、フラッシュプログラミングの実行を開始する前に、フラッシュプログラミング又はソフトウェアパッチ操作と無関係のソフトウェアの作業及び中断ルーチンを停止することである。
【０１２３】
５．２  パッチ書き込みプロセス（Patch programming process）
パッチ書き込みのプロセスは、いくつものサブステータスに分割され、図１０にその実施例を示す。パッチデータの受信に成功したら、デジタル機器は、パッチデータをデジタル機器内のフラッシュメモリー、ＮＶＭ及び／又はＥＥＰＲＯＭメモリーに書き込む。
【０１２４】
パッチデータがフラッシュメモリー、ＮＶＭ及び／又はＥＥＰＲＯＭメモリー内のデータエリアやデータテーブルの更新に使用される場合には、デジタル機器は、これらのデータをフラッシュメモリー、ＮＶＭ及び／又はＥＥＰＲＯＭメモリー内の対応するアドレスに書き込む。
【０１２５】
パッチデータがソフトウェアセクションのプログラムコードの更新に使用される場合には、デジタル機器は、パッチプログラムコードをフラッシュメモリーの対応するアドレスに書き込む。
【０１２６】
続いて、デジタル機器は、パッチ識別情報をパッチコントロールテーブル１０２０又はパッチデータベース内に書き込み始める。これらのパッチ識別情報は、パッチアドレス、パッチ識別コード、ソフトウェアセクション識別コード等を有する。
【０１２７】
続いて，デジタル機器は、次の工程であるセクションステータスの書き込み１０３０を行う。上述した更新処理ルーチンの設計方式に基づいたソフトウェアセクションの更新処理ルーチンは、１つか２つのＪＵＭＰ命令又はパッチフラグ（patch flag）を検査するパッチ検査ルーチンを有する。パッチプログラムの書き込みに成功し、更新処理ルーチンがパッチフラグを使用している場合には、その対応するパッチフラグは、パッチプログラムが存在する事実を反映するように変更される。更新処理ルーチンがＪＵＭＰ命令を使用する場合には、ＣＰＵ／ＤＳＰのＩＰが対応するパッチ開始アドレスにジャンプするように、対応するＪＵＭＰオフセットも変更される必要がある。パッチコントロールブロック及び／又はパッチ操作エリア内の一部のデータバイトは、フラッシュプログラミングルーチンによって変更される必要がある。更新処理ルーチンにおけるパッチプログラムのないステータスからパッチプログラムのあるステータスへの細かい変化及びパッチコントロールブロックの変化については、上述した説明の通りである。
【０１２８】
更新処理ルーチンにおけるキーＪＵＭＰオフセットのプログラミング及びパッチフラグの変更は、パッチプログラムがいつ停止してもデジタル機器が正常動作するように、最後に実行されるのが望ましい。例えば、上述した３．４節で説明したセクションＡの更新処理ルーチンの更新をする際に、デジタル機器は、まずパッチコントロールブロック内のデータバイトをＬａｂｅｌ＿Ｐ＿ＡにおいてＰａｔｃｈ−Ｃｏｒｒｅｃｔｉｏｎ−Ｒｏｕｔｉｎｅ  ｏｆ  Ｓｅｃｔｉｏｎ−Ａを実施する命令に変更する。その後、再びＪＵＭＰ命令のオフセットを修正してＪｕｍｐ  ｔｏ  Ｌａｂｅｌ＿Ｏ＿ＡをＪｕｍｐ  ｔｏ  Ｌａｂｅｌ＿Ｐ＿Ａに変更する。このようにして、元のコードの代わりにパッチプログラムを使用することは、全ての書き込み作業（programming process）が終了した際にのみ実行される。
【０１２９】
パッチの書き込みに成功したら、パッチステータスメッセージをパッチサーバーに送る、及び／又は必要時にシステムの再起動（system reset）を実行する等の後処理（post process）がデジタル機器によって行われる。ＳＭＳメッセージを使用する実施例において、デジタル機器は、以下の後処理を行うことがある。
【０１３０】
・デジタル機器は、ＳＭＳメッセージの方法を用いてパッチサーバーにパッチステータス報告を送信する。このパッチステータス報告は、ターミナル情報及び現在のパッチステータスが含まれる。
【０１３１】
・続いて、パッチデータ内のリセットフラグ（Reset-Flag）が既に設定されている場合には、デジタル機器は、システムの再起動を行う。
【０１３２】
６．  パッチサーバー
図１１は、パッチサーバー１１００の実施例を示す概略図である。パッチサーバー１１００は、パッチデータベース１１３０と、パッチ生成器１１１０と、パッチ送信コントローラー１１２０とを備えることが望ましい。
【０１３３】
パッチデータベース１１３０は、各デジタル機器と関連するパッチ情報と以下の項目とを保存する。
（ａ）製造識別コード
（ｂ）製品モデルナンバー
（ｃ）ソフトウェアバージョンナンバー
（ｄ）ソフトウェアセクション識別コード
（ｅ）パッチ識別コード
（ｆ）ＣＰＵ識別コード
（ｇ）ＭＡＣ（Medium Access Control）層
（ｈ）その他デジタル機器を識別するパラメーター項目
（ｉ）その他ユーザーを識別するパラメーター項目
（ｊ）パッチアドレス情報
（ｋ）ＲＳＴフラグ情報（Reset Flag Information）
（ｌ）パッチプログラムコード
（ｍ）パッチプログラムコード変換に関する情報
例えば、当該パッチプログラムコードで使用されるプログラム言語情報（Ｃ／Ｃ＋＋／Ｊａｖａ（登録商標）／Ａｓｓｅｍｂｌｅｒやその他のプログラム言語、又はＣＰＵ／マイクロプロセッサかＤＳＰの実行可能マシンコード）
（ｎ）デジタル機器のデータメモリーエリア（ＮＶＭ／ＥＥＰＲＯＭ）を更新するデータパラメーター
【０１３４】
パッチサーバーがデジタル機器にパッチ情報を送信しようとする際に、パッチ生成器１１１０は、パッチデータベース１１３０内のデータに基づいて対応する１つのパッチデータを生成する。パッチデータが１つのパッチデータパケットによって運ばれない場合には、パッチ生成器１１１０は、さらにパッチデータをいくつかのセクションに分割し、各セクションをパッチデータパケットに入れて送信する。
【０１３５】
パッチ情報送信コントローラー１１２０は、パッチデータパケットを確実にデジタル機器に送信する。１つの設計例は、タイマーを用いてパッチデータの再送信（retransmission）をコントロールするものであり、その詳細な説明を以下に述べる。
【０１３６】
パッチサーバーがパッチをデジタル機器に送信すると、タイマーが起動する。パッチサーバーがこのタイマーの設定する時間を経過してもまだ当該デジタル機器から返答される回答メッセージ（例えば、パッチステータス報告）を受信していない場合には、パッチサーバーによってパッチデータパケットがデジタル機器に再度送信される。パッチサーバーが予め決められた回数の再送信を実行しても、デジタル機器から送信される回答メッセージを受信していない特殊な状況下においては、このパッチサーバーが再送信の動作を一時停止するか、タイマーの使用のみを停止しログファイル内に受信されていない回答メッセージを記録する。
【０１３７】
デジタル機器から回答メッセージ（例えば、パッチステータス報告）を受信する際には、パッチサーバーは、パッチ情報再送信をコントロールするタイマーを停止し、パッチデータベース内においてデジタル機器のパッチのステータスを更新する。
【０１３８】
以下、ＳＭＳメッセージによるパッチサーバーからデジタル機器内へのソフトウェアパッチの送信について設計例を用いて説明する。この設計例ついては、図１２に示している。
【０１３９】
この設計例において、組み込みソフトウェアを有するデジタル機器は、デジタル携帯電話機１２５０である。パッチサーバーのハードウェアは、コンピュータ１２００とＳＭＳメッセージを受信できる無線モデム１２１０とから構成される。このコンピュータは、パッチ情報及び対応するパッチＳＭＳメッセージを発してから、インターネット（Internet）１２０５を介してこのメッセージを、無線サービスをデジタル機器１２５０に提供するサービスプロバイダーのメッセージサーバー１２４０に送信する。このメッセージをメッセージサーバーに送信する送信方式は、一般の電子メールが使用するＳＭＴＰ（Simple Mail Transfer Protocol）及びＴＣＰ／ＩＰに基づく。サービスプロバイダーのメッセージサーバー１２４０は、パッチＳＭＳメッセージを一般のＳＭＳメッセージ１２２５としてベースステーション１２２０に送信する。最後に、ベースステーション１２２０は、エアーメッセージ（air messages）（例えば、ＳＭＳメッセージ１２２５を運ぶデータ・バースト・メッセージ）によってこのメッセージ１２２５を対応する携帯電話機１２５０に送信する。
【０１４０】
パッチサーバーの無線モデム（modem）１２１０は、パッチサーバーのコンピュータ１２００に付属する。無線モデムは、デジタル機器１２５０からの回答メッセージ１２１５を受信し、回答メッセージ１２１５をコンピュータ１２００に送信する。コンピュータ１２００は、回答メッセージ１２１５内の情報に基づいて、パッチのステータスを確定する。
【０１４１】
本出願における本発明は、望ましい実施例を参考に説明したが、同分野の熟練者は、本発明の範囲内で、他の実施方法を利用して上述した各項の実施例に置き換えることができる。よって、本発明の範囲は、特許請求の範囲の請求項目のみの制限を受けるべきである。
【０１４２】
略語
ＡＲＱ：Automatic Repeat reQuest
ＣＰＵ：Central Processing Unit
ＣＲＣ：Cyclic Redundancy Codes
ＤＳＰ：Digital Signal Processor
ＥＥＰＲＯＭ：Electrically Erasable Programmable Read-Only Memory
ＥＳＮ：Electronic Serial Number
ＦＬＡＳＨ：一種の電力持続型不揮発性メモリー（constantly-powered nonvolatile memory）であり、ブロック（block）単位で消去及び上書きが可能
ＭＡＣ：Medium Access Control
ＭＣＵ  Micro Processor Unit
ＮＶＭ  Non Volatile Memory
Ｐａｔｃｈ  ｄａｔａ：パッチサーバー（patch server）からデジタル機器に送信されるパッチの総データ
Ｐａｔｃｈ  ｄａｔａ  ｐａｃｋｅｔ：パッチ送信のユニット。１つのパッチは、複数のパッチデータパケット（patch data packets）に分割されて送信される。１つのパッチデータパケットは、１つのメッセージによって送信される。
Ｐａｔｃｈ  ｐｒｏｇｒａｍ：単数又は複数のＣＰＵ／ＤＳＰの命令からなり、ソフトウェアのソフトウェアプログラムを更新し、組み込みソフトウェア内の単数又は複数のプログラムコードを更新する。
Ｐａｔｃｈ  ｐｒｏｇｒａｍｍｉｎｇ：パッチをメモリーに書き込む工程
Ｐａｔｃｈ  ｓｅｒｖｅｒ：パッチをデジタル機器に送信する単数又は複数のサーバー
ＰＣＭＣＩＡ：Personal Computer Memory Card International Association
ＰＤＡ：Personal Digital Assistant
ＲＡＭ：Random Access Memory
ＲＯＭ：Read-Only Memory
ＳＭＳ：Short Message Service
【図面の簡単な説明】
【０１４３】
【図１】図１は、デジタル機器における従来のマイクロプロセッサシステムの概略図である。
【図２】図２は、デジタル機器における従来のＤＳＰシステムの概略図である。
【図３】図３は、デジタル機器内のパッチシステムのソフトウェア構造例を示す図である。
【図４】図４は、デジタル機器内の元の組み込みソフトウェアのセクション区分、及び更新処理ルーチンの配置例を示す図である。
【図５】図５は、本発明の１つの実施例に関するソフトウェアセクションに基づいたソフトウェア更新の設計例及び実装例を示す図である。
【図６】図６は、本発明の他の実施例に関するパッチコントロールルーチン（Patch Control Routine）を介してパッチプログラムへジャンプ（JUMP）することによってソフトウェア更新を実行する設計例及び実装例を示す図である。
【図７】図７は、本発明のさらに他の実施例に関するパッチコントロールブロック（Patch- Control-Block）を介してパッチプログラムにジャンプ（JUMP）することによってソフトウェア更新を実行する設計例及び実装例を示す図である。
【図８】図８は、本発明の１つの実施例に関するパッチ送信の通信層の例を示す図である。
【図９】図９は、本発明の１つの実施例に関するパッチデータとパッチデータパケットのフォーマットの例を示す図である。
【図１０】図１０は、本発明にしたがうパッチ書き込みの状態遷移例を示す図である。
【図１１】図１１は、本発明にしたがうパッチサーバー（patch server）の構造例を示す図である。
【図１２】図１２は、ＳＭＳメッセージを使用してパッチを送信する設計例を示す図である。
【図１】
2004536405.tif 000012
【図２】
2004536405.tif 000013
【図３】
2004536405.tif 000014
【図４】
2004536405.tif 000015
【図５】
2004536405.tif 000016
【図６】
2004536405.tif 000017
【図７】
2004536405.tif 000018
【図８】
2004536405.tif 000019
【図９】
2004536405.tif 000020
【図１０】
2004536405.tif 000021
【図１１】
2004536405.tif 000022
【図１２】
2004536405.tif 000023
【国際公開パンフレット】
2004536405.tif 000024
2004536405.tif 000025
2004536405.tif 000026
2004536405.tif 000027
2004536405.tif 000028
2004536405.tif 000029
2004536405.tif 000030
2004536405.tif 000031
2004536405.tif 000032
2004536405.tif 000033
2004536405.tif 000034
2004536405.tif 000035
2004536405.tif 000036
2004536405.tif 000037
2004536405.tif 000038
2004536405.tif 000039
2004536405.tif 000040
2004536405.tif 000041
2004536405.tif 000042
2004536405.tif 000043
2004536405.tif 000044
2004536405.tif 000045
2004536405.tif 000046
2004536405.tif 000047
2004536405.tif 000048
2004536405.tif 000049
2004536405.tif 000050
2004536405.tif 000051
2004536405.tif 000052
2004536405.tif 000053
2004536405.tif 000054
2004536405.tif 000055
2004536405.tif 000056
2004536405.tif 000057
2004536405.tif 000058
2004536405.tif 000059
2004536405.tif 000060
2004536405.tif 000061
2004536405.tif 000062
2004536405.tif 000063
2004536405.tif 000064
2004536405.tif 000065
2004536405.tif 000066
2004536405.tif 000067
2004536405.tif 000068
2004536405.tif 000069
2004536405.tif 000070
2004536405.tif 000071
2004536405.tif 000072
2004536405.tif 000073
2004536405.tif 000074
2004536405.tif 000075
2004536405.tif 000076
【国際調査報告】
2004536405.tif 000077
2004536405.tif 000078
2004536405.tif 000079