JP2008198060A - 情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法 - Google Patents

情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法 Download PDF

Info

Publication number
JP2008198060A
JP2008198060A JP2007034535A JP2007034535A JP2008198060A JP 2008198060 A JP2008198060 A JP 2008198060A JP 2007034535 A JP2007034535 A JP 2007034535A JP 2007034535 A JP2007034535 A JP 2007034535A JP 2008198060 A JP2008198060 A JP 2008198060A
Authority
JP
Japan
Prior art keywords
code
patch
rom
memory
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2007034535A
Other languages
English (en)
Inventor
Yoshimi Oka
義美 岡
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Seiko Epson Corp
Original Assignee
Seiko Epson Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Seiko Epson Corp filed Critical Seiko Epson Corp
Priority to JP2007034535A priority Critical patent/JP2008198060A/ja
Priority to US12/069,581 priority patent/US20080216065A1/en
Publication of JP2008198060A publication Critical patent/JP2008198060A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】 低コストで、ROMのコードの不具合を解消できる情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法を提供する。
【解決手段】 情報処理装置30は、CPU32と、CPU32の実行コードが格納されるROM34と、CPU34により読み出されるコードのアドレス情報が格納されるアドレス管理用メモリと、実行コードのパッチコードを格納するためのパッチコード用メモリとを含む。アドレス情報が、実行コードが格納されるROM34のアドレスのうちパッチコードに置き換えられるROM34のアドレスに代えて、パッチコードが格納されるパッチコード用メモリのアドレスを含む。CPU32は、アドレス管理用メモリに格納されるアドレス情報に基づいてROM34又はパッチコード用メモリから読み出されたコードに対応した処理を行う。
【選択図】 図2

Description

本発明は、情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法に関する。
近年の電子機器の高機能化は、集積回路技術の進歩によるところが大きい。このような電子機器には、ますます高性能化される中央演算処理装置(Central Processing Unit:以下、CPU)や、ますます大容量化する読み出し専用メモリ(Read Only Memory:以下、ROM)及びランダムアクセスメモリ(Random Access Memory:以下、RAM)が実装される。そして、CPU、ROM及びRAMにより、電子機器の種々の複雑な制御が実現される。
このような電子機器の製造メーカ側は、ユーザの要求を満足させるような機能を次々と実現していく必要があり、CPU、ROM及びRAMにより実現される機能はより高機能化が望まれる。そのため、複雑な制御を実現するプログラムの設計や検査に、多くの工数がかけられる。
ところで、最終的に検査をパスして量産化されたROMのコードにも不具合が存在し、電子機器の誤動作等の原因となることがある。この場合、ROMのコードを変更することが不可能であるため、ROM自体を交換する必要があり、多大な費用を費やしていた。
このようなROMのコードに存在する不具合対策が、例えば特許文献1及び特許文献2に開示されている。
特許文献1では、バグの発生した固定記憶手段の記憶情報の修正アドレスと修正内容とを記憶させ、コンパレータにより処理手段の実行アドレスをモニタさせる。そして、コンパレータにより処理の実行アドレスと修正アドレスとを比較し、両アドレスが一致したときに出力される一致信号を割込要求信号として発生させる。この割込要求信号により、固定記憶手段から修正内容記憶手段に処理手段のアクセスを切り換える。
また、特許文献2では、パッチ情報検索手段、アドレス演算手段及びパッチ処理手段からなるパッチライブラリを目的プログラム内に備えさせ、目的プログラムの起動時にパッチテーブルからパッチ情報を検索させる。アドレス演算手段は、パッチ情報を用いてパッチデータが格納されたアドレスを演算し、パッチ処理手段が該パッチデータでパッチ処理を行う。
特開平6−318261号公報 特開平6−242990号公報
しかしながら、特許文献1には、処理手段のアドレスをモニタするコンパレータや割込要求信号を発生させるハードウェアを付加回路として設ける必要がある。そのため、特許文献1に開示された技術が適用される電子機器では、予めバグが発生することを想定して専用の付加回路を設けておく必要があり、製造コストが高くなるという問題がある。
また、特許文献2には、パッチライブラリを目的プログラム内に備えさせる必要がある。そのため、特許文献2に開示された技術が適用される電子機器においても、予めバグが発生することを想定して目的プログラムの容量が大きくなってしまい、電子機器に搭載されるメモリのコスト高を招くという問題がある。
以上のように、予めROMのコードのバグ等の不具合の発生を前提に装置が構成されてコスト高となることを回避することが望ましく、低コストでROMのコードの不具合を解消できることが望ましい。
本発明は、以上のような技術的課題に鑑みてなされたものであり、その目的とするところは、低コストで、ROMのコードの不具合を解消できる情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法を提供することにある。
また本発明の他の目的は、予め不具合の発生した構成を採用することなく、低コストで、ROMのコードの不具合を解消できる情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法を提供することにある。
上記課題を解決するために本発明は、
CPU(Central Processing Unit)と、
前記CPUの実行コードが格納されるROM(Read Only Memory)と、
前記CPUにより読み出されるコードのアドレス情報が格納されるアドレス管理用メモリと、
前記実行コードのパッチコードを格納するためのパッチコード用メモリとを含み、
前記アドレス情報が、
前記実行コードが格納される前記ROMのアドレスのうち前記パッチコードに置き換えられる前記ROMのアドレスに代えて、前記パッチコードが格納される前記パッチコード用メモリのアドレスを含み、
前記CPUが、
前記アドレス管理用メモリに格納される前記アドレス情報に基づいて前記ROM又は前記パッチコード用メモリから読み出されたコードに対応した処理を行う情報処理装置に関係する。
本発明においては、ROMに実行コードが格納され、アドレス管理用メモリにアドレス情報が格納され、更にパッチコード用メモリに実行コードのパッチコードが格納される。そして、CPUが該アドレス情報に基づいて、ROM又はパッチコード用メモリから読み出したコードに対応した処理を行うようにしたので、ROMの実行コードに代えてパッチコードを実行できる。これにより、ROMのコードの不具合を低コストで解消できるようになる。
また本発明に係る情報処理装置では、
前記アドレス管理用メモリには、
前記実行コードが格納される前記ROMのアドレスが格納された後に、前記パッチコードに置き換えられる前記ROMのアドレスが、前記パッチコードが格納される前記パッチコード用メモリのアドレスにより上書きされてもよい。
本発明によれば、アドレス管理用メモリに、パッチコードが格納されるパッチコード用メモリのアドレスを上書きするようにしたので、予め不具合の発生した構成を採用することなく、ROMコードの不具合を解消できるようになる。
また本発明に係る情報処理装置では、
前記パッチコードが、
前記実行コードのソースコードの関数単位で生成されたコードであってもよい。
また本発明に係る情報処理装置では、
前記パッチコードが、
前記実行コードのソースコードのファイル単位で生成されたコードであってもよい。
また本発明に係る情報処理装置では、
前記パッチコードが、
所与の機能を実行するための1又は複数のファイルであるモジュール単位で生成されたコードであってもよい。
また本発明に係る情報処理装置では、
前記アドレス管理用メモリ及び前記パッチコード用メモリが、RAM(Random Access Memory)であってもよい。
また本発明に係る情報処理装置では、
前記ROMが、
ROMの製造工程において1回だけコードが書き込み可能なメモリであってもよい。
また本発明に係る情報処理装置では、
前記ROMが、
マスクROM又はワンタイムROMであってもよい。
上記のいずれかの発明によれば、情報処理装置のより一層の低コスト化を実現できるようになる。
また本発明は、
上記のいずれか記載の情報処理装置と、
展開前の前記パッチコードが格納されるパッチコード格納メモリとを含み、
前記パッチコード格納メモリから読み出された前記パッチコードが前記パッチコード用メモリに展開されると共に、前記実行コードが格納される前記ROMのアドレスのうち前記パッチコードに置き換えられる前記ROMのアドレスに代えて、前記パッチコードが格納される前記パッチコード用メモリのアドレスを含むアドレス情報が前記アドレス管理用メモリに格納されるパッチコード実装システムに関係する。
本発明によれば、予め不具合の発生した構成を採用することなく、低コストで、ROMのコードの不具合を解消できるパッチコード実装システムを提供できる。
また本発明は、
上記記載のパッチコード実装システムと、
前記情報処理装置の処理結果に基づいて制御される周辺装置とを含む電子機器に関係する。
本発明によれば、予め不具合の発生した構成を採用することなく、低コストで、ROMのコードの不具合を解消できる情報処理装置が適用された電子機器を提供できる。
また本発明は、
ROM(Read Only Memory)に格納される実行コードの少なくとも一部に代えてCPU(Central Processing Unit)により実行されるパッチコードの実装方法であって、
前記実行コードが格納されるROMのアドレス情報をアドレス管理用メモリに配置し、
前記パッチコードと前記実行コードとをリンクしたコードを生成し、
該コードから前記パッチコードを取り出し、
前記パッチコードをパッチコード用メモリに配置すると共に、前記パッチコードと前記実行コードのリンク後のアドレス情報を前記アドレス管理用メモリに上書きするパッチコードの実装方法に関係する。
また本発明は、
ROM(Read Only Memory)に格納される実行コードの少なくとも一部に代えてCPU(Central Processing Unit)により実行されるパッチコードの実装方法であって、
パッチコード用ソースコードに基づいて生成されたパッチコード用オブジェクトファイルをリンク処理して前記パッチコードを生成し、
前記パッチコードをパッチコード用メモリに配置すると共に、予め前記実行コードのROMのアドレス情報が格納されるアドレス管理用メモリに、リンク処理後の前記パッチコードのアドレス情報を上書きするパッチコードの実装方法に関係する。
また本発明に係るパッチコード実装方法では、
前記パッチコードが、
前記実行コードのソースコードの関数単位で生成されたコードであってもよい。
また本発明に係るパッチコード実装方法では、
前記パッチコードが、
前記実行コードのソースコードのファイル単位で生成されたコードであってもよい。
また本発明に係るパッチコード実装方法では、
前記パッチコードが、
所与の機能を実行するための1又は複数のファイルであるモジュール単位で生成されたコードであってもよい。
また本発明に係るパッチコード実装方法では、
前記アドレス管理用メモリ及び前記パッチコード用メモリが、RAM(Random Access Memory)であってもよい。
また本発明に係るパッチコード実装方法では、
前記ROMが、
ROMの製造工程において1回だけコードが書き込み可能なメモリであってもよい。
また本発明に係るパッチコード実装方法では、
前記ROMが、
マスクROM又はワンタイムROMであってもよい。
上記のいずれかの発明によれば、予め不具合の発生した構成を採用することなく、低コストで、ROMのコードの不具合を解消できるパッチコード実装方法を提供できる。
以下、本発明の実施の形態について図面を用いて詳細に説明する。なお、以下に説明する実施の形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また以下で説明される構成のすべてが本発明の必須構成要件であるとは限らない。
1. 情報処理装置
図1に、本実施形態における情報処理装置が適用された電子機器の構成の概要のブロック図を示す。
本実施形態における電子機器60は、パッチコード実装システム70と、1又は複数の周辺装置50とを含む。図1では、周辺装置が1であるものとして説明するが、電子機器60が複数の周辺装置を含んでもよい。
パッチコード実装システム70は、本実施形態における情報処理装置を含み、ROM化された実行コードに対してパッチコードが適用されたコードに対応した処理を行う。ここで、情報処理装置は、CPU、ROM及びRAMを有し、ROM化されたプログラムの実行コード又はパッチコードを読み出し、CPUによりコードに対応した処理を行う。図1の周辺装置50としては、例えばI/O装置、記憶装置、処理装置がある。このような周辺装置50は、情報処理装置30の処理結果に基づいて制御される。
電子機器60では、例えば同一基板(プリント基板、フイルム基板、半導体基板等)上に、情報処理装置30及び周辺装置50が搭載される。このような電子機器60としては、携帯電話機、携帯型情報機器(PDA等)、デジタルカメラ、プロジェクタ、携帯型オーディオプレーヤ、マスストレージデバイス、ビデオカメラ、電子手帳、GPS(Global Positioning System)装置、メモリカード等のアクセス制御を行うメモリコントローラ、センサ装置、ゲーム装置、プロジェクタ(投写型表示装置)等がある。
ROM化されたプログラムの実行コードを用いて処理を行わせることで、情報処理装置、該情報処理装置を含む電子機器60の低コスト化が実現される。その一方で、ROMの実行コードを変更することが不可能であるため、情報処理装置の設計段階において、プログラムの内容を十分に検討し、且つ検証する必要がある。従って、高機能化が進む情報処理装置の設計工数が増大している。
このような状況下で、情報処理装置が実装された電子機器が量産化された後に、短い設計期間での検証等を原因として、ROM化されたプログラム自体に不具合が存在してしまうことがある。この場合、一般的には、修正後のプログラムの実行コードを搭載したROMの交換等が必要となり、コスト高を招く。
そこで、本実施形態では、万が一、ROM化されたプログラムの修正が必要になった場合でも、ROMの交換等が一切不要な情報処理装置等を提供する。より具体的には、情報処理装置に、ROM化されたプログラムを修正したコードであるパッチコードを以下のように展開させることで、ROM化されたプログラムの修正が必要になった場合でも、ROMの交換等を不要にする。
図2に、図1のパッチコード実装システム70の構成例のブロック図を示す。図2において、図1と同一部分には同一符号を付し、適宜説明を省略する。
パッチコード実装システム10は、情報処理装置30と、外部装置80とを含む。情報処理装置30と外部装置80とは、通信路90を介して接続される。通信路90は、1又は複数の信号線からなるバス、シリアル信号線、差動信号線であってもよいし、RS−232C(Recommended Standard 232 Version C)、USB(Universal Serial Bus)、イーサネット(登録商標)等の所定のプロトコルを有するインタフェース用信号線であってもよい。また、通信路90は、無線伝送路であってもよい。
情報処理装置30は、CPU32、ROM34、RAM36を含む。CPU34は、バス39を介してROM34、RAM36と接続される。ROM38は、読み出し可能だが書き換え不可能なメモリであればよい。そのため、ROM38は、フラッシュROMであってもよい。また、ROM38は、ROM38の製造工程において1回だけコードが書き込み可能なメモリであってもよく、例えばマスクROMやワンタイムROMであることがコストの観点から望ましい。RAM36は、読み出し可能で、書き換え可能なメモリであればよい。
このような情報処理装置30では、ROM34又はRAM36に格納されたプログラムが読み出されて、該CPU32が該プログラムに対応した処理を実行する。これにより、情報処理装置30は、主にROM34に格納された実行コードに対応した処理を実行でき、低コスト化を図る。
より具体的には、情報処理装置30のROM34に、CPU32の実行コードが格納される。この実行コードは、ROM34の製造工程において書き込まれる。RAM36には、ROM34の実行コードを修正したパッチコードが格納される。また、RAM36には、ROM34の実行コード及びRAM36のパッチコードが格納されるメモリアドレスを管理するためのアドレス情報が格納される。CPU32は、ROM34の実行コード又はRAM36のパッチコードを順次読み出して処理しながら、次に処理すべきコードをRAM36のアドレス情報で指定された領域から読み出す。
RAM36に格納されるアドレス情報は、実行コードが格納されるROM34のアドレスのうちパッチコードに置き換えられるROM36のアドレスに代えて、パッチコードが格納されるRAM36のアドレスを含む。CPU32は、RAM36に格納されるアドレス情報に基づいてROM34又はRAM36から読み出されたコードに対応した処理を行う。
このようなアドレス情報は、実行コードをROM34に書き込む処理を行う際に、一度確定した情報である。そして、ROM34の実行コードの修正が必要になり、RAM36のパッチコードを情報処理装置30のメモリ空間に配置する場合には、該パッチコードを参照するためのアドレス情報が更新される。即ち、RAM36には、実行コードが格納されるROM34のアドレスが格納された後に、パッチコードに置き換えられるROM34のアドレスが、パッチコードが格納されるRAM36のアドレスにより上書きされる。そのため、パッチコードが格納されるメモリは、新たに書き込み可能に構成されたメモリであることが望ましい。そして、アドレス情報が格納されるメモリは、パッチコードと共に更新されるため、書き込み可能に構成されたメモリであることが望ましい。
図2では、RAM36が、アドレス情報及びパッチコードを格納するが、本実施形態はこれに限定されない。例えば、情報処理装置30が、各メモリが読み出し及び書き込みが可能なアドレス管理用メモリとパッチコード用メモリを有し、アドレス管理用メモリにアドレス情報、パッチコード用メモリにパッチコードが格納されてもよい。図2では、アドレス管理用メモリの機能及びパッチコード用メモリの機能がRAM36により実現されている。この場合、アドレス情報は、実行コードが格納されるROM34のアドレスのうちパッチコードに置き換えられるROM34のアドレスに代えて、パッチコードが格納されるパッチコード用メモリのアドレスを含む。CPU32は、アドレス管理用メモリに格納されるアドレス情報に基づいてROM34又はパッチコード用メモリから読み出されたコードに対応した処理を行う。アドレス管理用メモリには、実行コードが格納されるROM34のアドレスが格納された後に、パッチコードに置き換えられるROM34のアドレスが、パッチコードが格納されるパッチコード用メモリのアドレスにより上書きされる。
これにより、CPU32は、ROM34の実行コード又はRAM36のパッチコードを順次読み出して処理しながら、次に処理すべきコードをRAM36のアドレス情報で指定された領域から読み出すことができる。そのため、実行コードのうち、修正が必要な部分ではパッチコードが読み出される。この結果、情報処理装置30では、ROM化されたプログラムの修正が必要になった場合でも、ROMの交換等を不要にできる。
一方、外部装置80は、パッチコード格納メモリとしてのメモリ82を含む。メモリ82には、展開前のパッチコードが格納される。このパッチコードは、通信路90を介して情報処理装置30内のRAM36に転送される。例えば、情報処理装置30は、初期化処理時に、メモリ82のパッチコードをRAM36に展開する処理を行う。なお、メモリ82において、パッチコードに対応したアドレス情報が格納され、上記の初期化処理時に、該アドレス情報をRAM36に展開させることが望ましい。
2. パッチコードの実装方法
図3に、本実施形態における実行コードの説明図を示す。
本実施形態における実行コードは、例えば図3に示す処理により生成される。まず、CPU32により処理させたい内容を実現するためのヘッダファイルHF、ソースファイルSC1、SC2を用意する。次に、ヘッダファイルHFとソースファイルSC1を入力ファイルとして、コンパイラによるコンパイル処理でオブジェクトファイルOBJ1を生成する。同様に、ソースファイルSC2を入力ファイルとして、コンパイラによるコンパイル処理でオブジェクトファイルOBJ2を生成する。図3では、ソースファイルSC1、SC2を別個にコンパイル処理するものとして説明したが、まとめてコンパイル処理を行ってもよい。
次に、コンパイラと共に予め用意されているライブラリLIB、オブジェクトファイルOBJ1、OBJ2を入力ファイルとして、リンカによりリンク処理で、情報処理装置30のメモリ空間内に所与の配置情報に基づいて配置された実行コードEXEが生成される。このリンク処理では、情報処理装置30のメモリ空間内の配置情報を示すアドレス情報もまた出力される。
以上のようなコンパイラによるコンパイル処理、リンカによるリンク処理は、開発システムの図示しないCPUにより行われる。こうして生成された実行コードEXEは、ROM化される。
図4に、本実施形態における実行コードのROM化の処理フローを示す。
まず、図示しない開発システムでは、ソースコードがコンパイル処理(ステップS10)された後に、リンク処理(ステップS11)が行われる。これにより、上述のように実行コードが生成される。
その後、実行コードEXEは、ROMデータとして、ROMの製造工程においてROM36に書き込まれる。そして、リンク処理の際に用いられたリンク情報(メモリ配置情報)としてのアドレス情報、若しくはリンク処理により得られたアドレス情報を、情報処理装置30のRAM36に展開させるように実装する処理が行われる(エンド)。
このようにRAM36に展開されたアドレス情報は、パッチコードが搭載される際に更新される。このパッチコードは、次のように実装される。
図5に、本実施形態におけるパッチコードの実装処理の処理例のフロー図を示す。
まず、図示しない開発システムにおいて、ROM34の実行コードのソースプログラムのうち、必要な部分が修正されたパッチ用ソースコードに対してコンパイル処理が行われる(ステップS20)。これにより、パッチコード用のオブジェクトファイルが生成される。次に、実行コードのソースプログラムを含む全ソースコードのオブジェクトファイルと、上記のパッチコード用のオブジェクトファイルとがリンク処理される(ステップS21)。
ここで、パッチコードが、実行コードのソースコードの関数単位、実行コードのソースコードのファイル単位、又は所与の機能を実行するための1又は複数のファイルであるモジュール単位で生成されたコードであってもよい。
次に、上述の開発システムにおいて、ステップS21でリンク処理されて得られたコードの中から、パッチ用のソースコードに対応するコードであるパッチコードが抽出される(ステップS22)。この抽出処理は、ステップS21におけるリンク処理で行われるメモリ空間内の配置情報(アドレス情報)に基づいて行うことができる。
その後、ステップS22で抽出したパッチコードを情報処理装置30のRAM36に展開し、リンク処理で用いられたアドレス情報を該RAM36に上書きさせるように情報処理装置30に実装する処理を行い(ステップS23)、一連の処理を終了する(エンド)。例えば、初期化処理時に該パッチコード及びアドレス情報をRAM36に展開する処理を、初期化関数内に実装する。この初期化関数は、情報処理装置30のCPU32の初期化時に実行するように設定されている。この結果、情報処理装置30は、初期化処理時に、ROM34又は図示しない外部記憶装置から読み出したパッチコード及びアドレス情報をRAM36に展開させる処理を行うことができる。この結果、RAM36に既に格納されていた実行コードのアドレス情報を上書きする処理を行うことができる。
なお、図5では、全ソースコードのオブジェクトファイルと、パッチコード用のオブジェクトファイルとを用いてリンク処理を行っていたが、本実施形態は、これに限定されるものではない。
図6に、本実施形態の変形例におけるパッチコードの実装処理の処理例のフロー図を示す。
まず、上述の開発システムでは、ROM34の実行コードのソースプログラムのうち、必要な部分が修正されたパッチ用ソースコードに対してコンパイル処理が行われる(ステップS30)。これにより、パッチコード用のオブジェクトファイルが生成される。次に、この開発システムにおいて、実行コードのソースプログラムを含む全ソースコードのオブジェクトファイルと、上記のパッチコード用のオブジェクトファイルとがリンク処理される(ステップS31)。
ここで、パッチコードが、実行コードのソースコードの関数単位、実行コードのソースコードのファイル単位、又は所与の機能を実行するための1又は複数のファイルであるモジュール単位で生成されたコードであってもよい。
その後、ステップS32で得られたパッチコードを情報処理装置30のRAM36に展開し、リンク処理で用いられたアドレス情報を該RAM36に上書きさせるように情報処理装置30に実装する処理を行い(ステップS32)、一連の処理を終了する(エンド)。例えば、初期化処理時に該パッチコード及びアドレス情報をRAM36に展開する処理を、初期化関数内に実装する。この初期化関数は、情報処理装置30のCPU32の初期化時に実行するように設定されている。この結果、情報処理装置30は、初期化処理時に、ROM34又は図示しない外部記憶装置から読み出したパッチコード及びアドレス情報をRAM36に展開させる処理を行うことができる。この結果、RAM36に既に格納されていた実行コードのアドレス情報を上書きする処理を行うことができる。
以上説明したようにパッチコードを実装することで、情報処理装置30のCPU32は、ROM34の実行コード又はRAM36のパッチコードを順次読み出して処理しながら、次に処理すべきコードをRAM36のアドレス情報で指定された領域から読み出すことができ、実行コードのうち、修正が必要な部分ではパッチコードを読み出すことができる。こうすることで、本実施形態によれば、ROM34に実行コードが配置されている場合に、パッチコードが該実行コードの一部に置き換えることができ、実行コードを変更した場合と同様の効果を得ることができる。
3. 具体的な説明
次に、本実施形態について具体的に説明する。
図7に、本実施形態の具体例におけるヘッダファイル、ソースファイルの一例を示す。以下では、ヘッダファイルHF(ファイル名“mod.h”)と2つのソースファイルSC1(ファイル名“Mod.c”)、SC2(ファイル名“AnotherMod.c”)から実行コードが生成されるものとする。そして、ソースファイルSC2において、モジュールが呼び出されるものとする。
ヘッダファイルHFでは、MODという型の構造体、関数Func()、変数FileVarがマクロで定義されている。より具体的には、ヘッダファイルHFにより、関数Func()が関数pFunc()であり、変数FileVarがMod.cのファイルスコープ変数であることが定義されている。なお、グローバル変数g_Globalは、通常のグローバル変数と同様に参照される。
ソースファイルSC1は、1つのモジュールを表しており、モジュール構造体の初期化関数ModInit()と関数f_Func()とグローバル変数g_Globalを含む。また、ソースファイルSC1には、構造体g_MODの実体が記載されている。ここで、初期化関数ModInit()では、関数pFunc()としてf_Func()を参照するように定義されているので、構造体g_MODは、関数f_Funcへのポインタ、グローバル変数g_Global、ファイルスコープ変数がメンバであることを示している。
図8に、図7のファイル構成において関数が呼び出されるときの動作説明図を示す。
図8において、図7と同一部分には同一符号を付し、適宜説明を省略する。ソースファイルSC2において関数Func()が呼び出されると、ヘッダファイルHFの定義に従って、Funcというマクロが展開される。その結果、g_MOD->pFuncが参照され、ソースファイルSC1で規定された構造体g_MODの内容から、関数f_Func()が呼び出される。このとき、初期化関数ModInit()では、関数f_Func()へのポインタが設定されているため、この関数f_Func()へのポインタを参照して、関数f_Func()を呼び出す。この関数f_Func()へのポインタが、本実施形態におけるアドレス情報に相当する。
ここで、図7又は図8のようなファイル構成において、関数f_Func()に修正が必要になった場合を考える。
図9に、図7又は図8のファイル構成に対してパッチコードが適用されたときの動作説明図を示す。図9において、図7又は図8と同一部分には同一符号を付し、適宜説明を省略する。
図9では、関数f_Func()に置き換えて関数func()を実行させるためのパッチコード用ソースファイルPC1が用意される。このパッチコード用ソースファイルPC1には、修正対象の関数f_Func()を置換するパッチ関数func()の他に、ソースファイルSC1の初期化関数ModInit()に対応する初期化関数ModPatchInit()が記載されている。
初期化関数ModPatchInit()において、構造体g_MODが表す関数へのポインタが関数func()へのポインタとなるように定義される。そのため、初期化関数ModInit()のコードに、初期化関数ModPatchInit()のコードを上書きすることで、ソースファイルSC1により構造体g_MODが表す関数f_Func()へのポインタp1が関数func()へのポインタp2に更新される。従って、関数func()のコードを新たにRAMに格納することで、初期化処理時において関数func()へのポインタに更新された後に、関数Func()が呼び出されたときに、該RAMに格納された関数func()のコードが実行されることになる。その結果、関数f_Func()が関数func()に置換されることになる。
なお、このような初期化関数ModPatchInit()を、ROMの実行コードを設計する段階で予め設けておき、アドレスを固定的に定めておいてもよい。
図10に、本実施形態の具体例におけるソースファイルと情報処理装置におけるメモリ空間との関係の一例を示す。
図10では、ヘッダファイルHF、ソースファイルSC1、SC2、パッチコード用ソースファイルPC1がコンパイル処理及びリンク処理された後のコードの、ROM34及びRAM36の配置状態を示している。リンク処理では、予めROM34に配置すべき実行コードのコード領域、定数領域、初期値領域が確保されている。リンク処理の結果、各領域にモジュール構造体初期化関数、その他の関数の実体、定数等が配置され、各関数や定数のアドレスが確定する。同様に、リンク処理では、予めRAM36に配置すべき変数領域、パッチ領域が確保されている。リンク処理の結果、各領域に変数やモジュール構造体、パッチコードが配置され、各変数や構造体、パッチコードのアドレスが確定する。
本実施形態では、ヘッダファイルHF、ソースファイルSC1、SC2の実行コードは、ROM34のコード領域に配置され、各実行コードが格納されるROM34のアドレス情報(ポインタ)はRAM36の変数領域に格納される。また、パッチコード用ソースファイルPC1の実行コードはRAM36のパッチ領域、該実行コードのRAM36のアドレス情報(ポインタ)はRAM36の変数領域に格納される。この際、パッチコード用ソースファイルPC1の実行コードのRAM36のアドレス情報は、ヘッダファイルHF、ソースファイルSC1、SC2の実行コードのROM34のアドレス情報を更新するように上書きされる。
以上のように、本実施形態やその具体例によれば、低コストでROMのコードの不具合を解消できる情報処理装置等を提供できるようになる。
ところで、プログラムのソースファイルでは、一般的に、複数の関数から参照されるグローバル変数が用いられる。ところが、このグローバル変数は、リンク処理を行うことでアドレスが確定する。そのため、グローバル変数が多数の場合には、各グローバル変数についてそれぞれパッチコード用ソースファイルで定義し直すとコードサイズが大きくなるため、パッチコードから実行コードが用いたグローバル変数を参照しないようにすることが望ましい。このような事態を回避するために、パッチコードを作成する際に、実行コードの全てのソースファイルとコンパイル処理、リンク処理を行うことで、パッチコードから実行コード内のグローバル変数を参照できるようになる。
一方、ファイルスコープ変数であるファイル内グローバル変数については、パッチコードから参照できない。そこで、該変数のスコープ範囲をプログラム全体に広げることも考えられるが、このような変数のスコープ範囲を変更させてしますと変数の管理が複雑になってしまう。そこで、本実施形態では、構造体g_MOD内にファイル内グローバル変数を定義している。
図11に、図7又は図8のファイル構成においてファイル内グローバル変数を参照する場合の動作説明図を示す。
図11において、図7又は図8と同一部分には同一符号を付し、適宜説明を省略する。
図11では、変数FileVarが、関数f_Funcで呼び出されるものとする。変数FileVarが呼び出されると、ヘッダファイルHFで定義されたマクロに従って展開される。その結果、ソースファイルSC1の構造体g_MODで定義されたgMOD->b_FileVarが参照される。
このように、構造体g_MODでファイル内グローバル変数を定義することで、不要なファイルから参照されることなく、必要なファイルにのみ参照可能なファイル内グローバル変数を提供できる。
なお、図7〜図10では、パッチコードが、実行コードのソースコードの関数単位で生成されたコードであるものとして説明したが、実行コードのソースコードのファイル単位、又は所与の機能を実行するための1又は複数のファイルであるモジュール単位で生成されたコードであっても当業者であれば同様に実現できる。
なお、本発明は上述した実施の形態に限定されるものではなく、本発明の要旨の範囲内で種々の変形実施が可能である。
また、本発明のうち従属請求項に係る発明においては、従属先の請求項の構成要件の一部を省略する構成とすることもできる。また、本発明の1の独立請求項に係る発明の要部を、他の独立請求項に従属させることもできる。
本実施形態における情報処理装置が適用された電子機器の構成の概要のブロック図。 図1のパッチコード実装システムの構成例のブロック図。 本実施形態における実行コードの説明図。 本実施形態における実行コードのROM化の処理フローを示す図。 本実施形態におけるパッチコードの実装処理の処理例のフロー図。 本実施形態の変形例におけるパッチコードの実装処理の処理例のフロー図。 本実施形態の具体例におけるヘッダファイル、ソースファイルの一例を示す図。 図7のファイル構成において関数が呼び出されるときの動作説明図。 図7又は図8のファイル構成に対してパッチコードが適用されたときの動作説明図。 本実施形態の具体例におけるソースファイルと情報処理装置におけるメモリ空間との関係の一例を示す図。 図7又は図8のファイル構成においてファイル内グローバル変数を参照する場合の動作説明図を示す図。
符号の説明
30 情報処理装置、 32 CPU、 34 ROM、 36 RAM、
39 バス、 50 周辺装置、 60 電子機器、
70 パッチコード実装システム、 80 外部装置、 82 メモリ、
90 通信路、 HF ヘッダファイル、 PC1 パッチコード用ソースファイル、
SC1、SC2 ソースファイル

Claims (18)

  1. CPU(Central Processing Unit)と、
    前記CPUの実行コードが格納されるROM(Read Only Memory)と、
    前記CPUにより読み出されるコードのアドレス情報が格納されるアドレス管理用メモリと、
    前記実行コードのパッチコードを格納するためのパッチコード用メモリとを含み、
    前記アドレス情報が、
    前記実行コードが格納される前記ROMのアドレスのうち前記パッチコードに置き換えられる前記ROMのアドレスに代えて、前記パッチコードが格納される前記パッチコード用メモリのアドレスを含み、
    前記CPUが、
    前記アドレス管理用メモリに格納される前記アドレス情報に基づいて前記ROM又は前記パッチコード用メモリから読み出されたコードに対応した処理を行うことを特徴とする情報処理装置。
  2. 請求項1において、
    前記アドレス管理用メモリには、
    前記実行コードが格納される前記ROMのアドレスが格納された後に、前記パッチコードに置き換えられる前記ROMのアドレスが、前記パッチコードが格納される前記パッチコード用メモリのアドレスにより上書きされることを特徴とする情報処理装置。
  3. 請求項1又は2において、
    前記パッチコードが、
    前記実行コードのソースコードの関数単位で生成されたコードであることを特徴とする情報処理装置。
  4. 請求項1又は2において、
    前記パッチコードが、
    前記実行コードのソースコードのファイル単位で生成されたコードであることを特徴とする情報処理装置。
  5. 請求項1又は2において、
    前記パッチコードが、
    所与の機能を実行するための1又は複数のファイルであるモジュール単位で生成されたコードであることを特徴とする情報処理装置。
  6. 請求項1乃至5のいずれかにおいて、
    前記アドレス管理用メモリ及び前記パッチコード用メモリが、RAM(Random Access Memory)であることを特徴とする情報処理装置。
  7. 請求項1乃至6のいずれかにおいて、
    前記ROMが、
    ROMの製造工程において1回だけコードが書き込み可能なメモリであることを特徴とする情報処理装置。
  8. 請求項1乃至7のいずれかにおいて、
    前記ROMが、
    マスクROM又はワンタイムROMであることを特徴とする情報処理装置。
  9. 請求項1乃至8のいずれか記載の情報処理装置と、
    展開前の前記パッチコードが格納されるパッチコード格納メモリとを含み、
    前記パッチコード格納メモリから読み出された前記パッチコードが前記パッチコード用メモリに展開されると共に、前記実行コードが格納される前記ROMのアドレスのうち前記パッチコードに置き換えられる前記ROMのアドレスに代えて、前記パッチコードが格納される前記パッチコード用メモリのアドレスを含むアドレス情報が前記アドレス管理用メモリに格納されることを特徴とするパッチコード実装システム。
  10. 請求項9記載のパッチコード実装システムと、
    前記情報処理装置の処理結果に基づいて制御される周辺装置とを含むことを特徴とする電子機器。
  11. ROM(Read Only Memory)に格納される実行コードの少なくとも一部に代えてCPU(Central Processing Unit)により実行されるパッチコードの実装方法であって、
    前記実行コードが格納されるROMのアドレス情報をアドレス管理用メモリに配置し、
    前記パッチコードと前記実行コードとをリンクしたコードを生成し、
    該コードから前記パッチコードを取り出し、
    前記パッチコードをパッチコード用メモリに配置すると共に、前記パッチコードと前記実行コードのリンク後のアドレス情報を前記アドレス管理用メモリに上書きすることを特徴とするパッチコードの実装方法。
  12. ROM(Read Only Memory)に格納される実行コードの少なくとも一部に代えてCPU(Central Processing Unit)により実行されるパッチコードの実装方法であって、
    パッチコード用ソースコードに基づいて生成されたパッチコード用オブジェクトファイルをリンク処理して前記パッチコードを生成し、
    前記パッチコードをパッチコード用メモリに配置すると共に、予め前記実行コードのROMのアドレス情報が格納されるアドレス管理用メモリに、リンク処理後の前記パッチコードのアドレス情報を上書きすることを特徴とするパッチコードの実装方法。
  13. 請求項11又は12において、
    前記パッチコードが、
    前記実行コードのソースコードの関数単位で生成されたコードであることを特徴とするパッチコードの実装方法。
  14. 請求項11又は12において、
    前記パッチコードが、
    前記実行コードのソースコードのファイル単位で生成されたコードであることを特徴とするパッチコードの実装方法。
  15. 請求項11又は12において、
    前記パッチコードが、
    所与の機能を実行するための1又は複数のファイルであるモジュール単位で生成されたコードであることを特徴とするパッチコードの実装方法。
  16. 請求項11乃至15のいずれかにおいて、
    前記アドレス管理用メモリ及び前記パッチコード用メモリが、RAM(Random Access Memory)であることを特徴とするパッチコードの実装方法。
  17. 請求項11乃至16のいずれかにおいて、
    前記ROMが、
    ROMの製造工程において1回だけコードが書き込み可能なメモリであることを特徴とするパッチコードの実装方法。
  18. 請求項11乃至17のいずれかにおいて、
    前記ROMが、
    マスクROM又はワンタイムROMであることを特徴とするパッチコードの実装方法。
JP2007034535A 2007-02-15 2007-02-15 情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法 Withdrawn JP2008198060A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007034535A JP2008198060A (ja) 2007-02-15 2007-02-15 情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法
US12/069,581 US20080216065A1 (en) 2007-02-15 2008-02-11 Information processing device, patch code application system, electronic instrument, and patch code application method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007034535A JP2008198060A (ja) 2007-02-15 2007-02-15 情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法

Publications (1)

Publication Number Publication Date
JP2008198060A true JP2008198060A (ja) 2008-08-28

Family

ID=39734045

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007034535A Withdrawn JP2008198060A (ja) 2007-02-15 2007-02-15 情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法

Country Status (2)

Country Link
US (1) US20080216065A1 (ja)
JP (1) JP2008198060A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101246360B1 (ko) 2011-12-30 2013-03-22 (주)네오위즈게임즈 메모리 및 임시 메모리를 이용한 패치 방법 및 그를 이용한 패치 서버, 패치 클라이언트
CN111142923A (zh) * 2019-12-26 2020-05-12 无锡中感微电子股份有限公司 一种补丁管理方法和系统
JP2020528629A (ja) * 2017-07-25 2020-09-24 オーロラ ラブズ リミテッド 車両ecuソフトウェアのためのソフトウェアデルタ更新の構築およびツールチェーンに基づく異常検出

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2224334A1 (en) * 2009-02-28 2010-09-01 Research In Motion Limited Methods and tools for creation of read-only-memory software binary images and corresponding software patches
US20110126179A1 (en) * 2009-11-24 2011-05-26 Thomas Hartman Method and System for Dynamic Patching Software Using Source Code
US9158533B2 (en) * 2012-01-16 2015-10-13 International Business Machines Corporation Manipulating source code patches
WO2021021126A1 (en) * 2019-07-30 2021-02-04 Hewlett-Packard Development Company, L.P. Hash map of executable control blocks

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06318261A (ja) * 1992-09-18 1994-11-15 Sony Corp 電子装置
JPH06242990A (ja) * 1993-02-12 1994-09-02 Fujitsu Ltd メモリパッチ装置
US6915167B2 (en) * 2001-01-05 2005-07-05 Medtronic, Inc. Method and apparatus for hardware/firmware trap
US7162577B2 (en) * 2001-09-14 2007-01-09 Cornice, Inc. Digital device configuration and method
US6931477B2 (en) * 2002-12-31 2005-08-16 Motorola, Inc. Method and apparatus for patching code and data residing on a memory
US7039776B2 (en) * 2003-04-17 2006-05-02 Broadcom Corporation Patch memory system for a ROM-based processor
US7533374B2 (en) * 2003-06-12 2009-05-12 Intel Corporation Adaptively storing system code in non-volatile storage
US7559058B2 (en) * 2004-05-11 2009-07-07 Microsoft Corporation Efficient patching
US7739469B2 (en) * 2005-11-08 2010-06-15 Freescale Semiconductor, Inc. Patching ROM code

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101246360B1 (ko) 2011-12-30 2013-03-22 (주)네오위즈게임즈 메모리 및 임시 메모리를 이용한 패치 방법 및 그를 이용한 패치 서버, 패치 클라이언트
US11526348B2 (en) 2017-07-25 2022-12-13 Aurora Labs Ltd. Detecting anomalies online using controller processing activity
US11704111B2 (en) 2017-07-25 2023-07-18 Aurora Labs Ltd. Using data deltas in controllers and managing interdependencies between software versions in controllers using tool chain
US11416242B2 (en) 2017-07-25 2022-08-16 Aurora Labs Ltd. Roll back of data delta updates
US11422793B2 (en) 2017-07-25 2022-08-23 Aurora Labs Ltd. Orchestrator reporting of probability of downtime from machine learning process
US11422794B2 (en) 2017-07-25 2022-08-23 Aurora Labs Ltd. Using data deltas in controllers and managing interdependencies between software versions in controllers using tool chain
US11442721B2 (en) 2017-07-25 2022-09-13 Aurora Labs Ltd. Opportunistic software updates during select operational modes
US11455165B2 (en) 2017-07-25 2022-09-27 Aurora Labs Ltd. Hot updates to controller software using tool chain
US11635955B2 (en) 2017-07-25 2023-04-25 Aurora Labs Ltd. Roll back of data delta updates
US12093682B2 (en) 2017-07-25 2024-09-17 Aurora Labs Ltd. Roll back of data delta updates
JP7169340B2 (ja) 2017-07-25 2022-11-10 オーロラ ラブズ リミテッド 車両ecuソフトウェアのためのソフトウェアデルタ更新の構築およびツールチェーンに基づく異常検出
US11467823B2 (en) 2017-07-25 2022-10-11 Aurora Labs Ltd. Constructing software delta updates for controller software and abnormality detection based on toolchain
US11650808B2 (en) 2017-07-25 2023-05-16 Aurora Labs Ltd. Hot updates to controller software using tool chain
US11650807B2 (en) 2017-07-25 2023-05-16 Aurora Labs Ltd. Self-healing learning system for one or more controllers
JP2020528629A (ja) * 2017-07-25 2020-09-24 オーロラ ラブズ リミテッド 車両ecuソフトウェアのためのソフトウェアデルタ更新の構築およびツールチェーンに基づく異常検出
US11789720B2 (en) 2017-07-25 2023-10-17 Aurora Labs Ltd. Opportunistic software updates during select operational modes
US11822917B2 (en) 2017-07-25 2023-11-21 Aurora Labs Ltd. Detecting anomalies online using controller processing activity
US11829750B2 (en) 2017-07-25 2023-11-28 Aurora Labs Ltd. Orchestrator reporting of probability of downtime from machine learning process
US11900103B2 (en) 2017-07-25 2024-02-13 Aurora Labs Ltd. Self-healing learning system for one or more controllers
CN111142923A (zh) * 2019-12-26 2020-05-12 无锡中感微电子股份有限公司 一种补丁管理方法和系统
CN111142923B (zh) * 2019-12-26 2023-12-05 无锡中感微电子股份有限公司 一种补丁管理方法及系统

Also Published As

Publication number Publication date
US20080216065A1 (en) 2008-09-04

Similar Documents

Publication Publication Date Title
EP3906488B1 (en) Method and contract rewriting framework system for supporting smart contracts in a blockchain network
CN102902556B (zh) 一种嵌入式设备的多级引导加载方法
US7334117B2 (en) Device boot loader for processing one or more requests from a host computer system concurrently with loading or updating the firmware of the device
US7185321B1 (en) Method and system for debugging through supervisory operating codes and self modifying codes
CN101815988A (zh) 固件映像更新和管理
JP2008198060A (ja) 情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法
CN105786537A (zh) 一种热补丁的实现方法和装置
US20070101115A1 (en) Information processing device, bios processing method and program
US10579801B2 (en) Selecting and loading firmware volumes based on license
US7546596B2 (en) Non-disruptive method, system and program product for overlaying a first software module with a second software module
CN112130926A (zh) 应用程序运行的方法、装置、终端设备及存储介质
US20120110383A1 (en) Method and apparatus for off-line analyzing crashed programs
WO2015184732A1 (zh) 引导程序的存储方法、故障恢复方法及设备、计算机存储介质
CN105573913A (zh) 一种onu系统中的程序调试方法及系统
US11036569B2 (en) Stack safety for independently defined operations
US6925522B2 (en) Device and method capable of changing codes of micro-controller
EP2778905A1 (en) Integrated circuit with a patching function
CN115033267A (zh) 一种设备树镜像版本校验的方法及终端设备
KR101844095B1 (ko) 부트로더 실행 방법 및 장치
CN105204896A (zh) 一种数字存储示波器的BootLoader设计方法
JP5906609B2 (ja) デバッグ支援プログラム、デバッグ支援方法及びデバッグ支援システム
CN111258617B (zh) 一种电子设备
CN111984329A (zh) 一种boot引导软件标准化生成、执行方法及系统
JP2008102761A (ja) 組み込みファームウェアの更新方法
US11797295B1 (en) Separate firmware to fixed and removable storages

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090213

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090224

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20090424