JP6609199B2 - 組込み機器 - Google Patents

組込み機器 Download PDF

Info

Publication number
JP6609199B2
JP6609199B2 JP2016038574A JP2016038574A JP6609199B2 JP 6609199 B2 JP6609199 B2 JP 6609199B2 JP 2016038574 A JP2016038574 A JP 2016038574A JP 2016038574 A JP2016038574 A JP 2016038574A JP 6609199 B2 JP6609199 B2 JP 6609199B2
Authority
JP
Japan
Prior art keywords
address
program
code
update
data
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.)
Active
Application number
JP2016038574A
Other languages
English (en)
Other versions
JP2017156908A (ja
Inventor
匡亮 谷本
今朝巳 萩原
直幸 森田
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.)
Renesas Electronics Corp
Original Assignee
Renesas Electronics 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 Renesas Electronics Corp filed Critical Renesas Electronics Corp
Priority to JP2016038574A priority Critical patent/JP6609199B2/ja
Priority to KR1020170025009A priority patent/KR20170102425A/ko
Priority to EP17158031.9A priority patent/EP3214545B1/en
Priority to US15/445,510 priority patent/US10642596B2/en
Priority to CN201710126476.3A priority patent/CN107145362B/zh
Publication of JP2017156908A publication Critical patent/JP2017156908A/ja
Application granted granted Critical
Publication of JP6609199B2 publication Critical patent/JP6609199B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/654Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/34Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters 
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/251Local memory within processor subsystem
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7208Multiple device management, e.g. distributing data over multiple flash devices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Stored Programmes (AREA)
  • Memory System (AREA)

Description

本発明は組込み機器及びプログラムの更新方法に関し、例えば差分プログラムを用いた更新を行う組込み機器及びプログラムの更新方法に関する。
近年、車載機器及び産業機器などに組み込まれる組込み機器が増加している。そして、このような組込み機器におけるプログラムをいわゆるOTA(Over The Air)により更新する方法が求められている。プログラムの更新に関しては、種々の技術が提案されている。例えば、特許文献1では、モジュール単位の更新プログラムに対して基準アドレスと相対アドレスを予め割当てておく事で、組込み機器上で動作するプログラムの動作を停止させることなく、プログラムをモジュール単位で動的に更新する技術について開示している。
特開2010−218334号公報
しかしながら、特許文献1に記載された技術では、組込み機器において基準アドレスと相対アドレスから実アドレスを算出することにより、更新プログラムの動的なアドレス解決(すなわち、動的リンク)が可能である事を前提としている。すなわち、特許文献1に記載された技術では、そのようなアドレス解決を行って、更新前のプログラムと、更新前のプログラム及び更新後のプログラムの差分である更新差分プログラムと、を用いたプログラムの再構成を行う必要がある。
しかしながら、このような再構成の実施にあたっては、大容量メモリが必要であること、再構成中は更新前プログラムの読出しが必要となるためMCU(Micro Controller Unit)コアでのユーザサービスを停止する必要があることなどの課題がある。このため、更新前プログラムと更新差分プログラムを用いたプログラムの再構成を行うことなく、プログラムの更新を行うことが望まれている。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
一実施の形態によれば、組込み機器は、独立して読み出し及び書き込みが可能な複数の面を備えた不揮発性メモリと、アドレス変換テーブルを用いてアドレス変換を行うアドレス変換器とを有し、前記アドレス変換器は、CPUにより命令がデコードされることによって取得されたアドレスが、デフォルトプログラムにおける変更箇所に対応するアドレスである場合に、該アドレスを差分プログラムが配置されたアドレスへと変換するものである。
前記一実施の形態によれば、更新前プログラムと更新差分プログラムを用いたプログラムの再構成を行うことなく、プログラムの更新処理を行うことができる。
実施の形態の概要にかかる組込み機器の構成を示すブロック図である。 実施の形態1にかかる情報システムの構成例を示す模式図である。 開発環境の構成例を示すブロック図である。 管理サーバの構成例を示すブロック図である。 組込み機器の構成例を示すブロック図である。 組込み機器の他の構成例を示すブロック図である。 実施の形態1にかかるアドレス変換器の概要を示す模式図である。 アドレス変換器の接続例を示すブロック図である。 更新後のプログラム実行手順例を説明する模式図である。 アドレス変換器によるアドレス変換の詳細を説明する模式図である。 更新後のデータテーブルのサイズが、データROM用アドレス変換器が扱うセグメントサイズを超える場合のアドレス変換例について説明する模式図であり、データテーブルへの1回目のアクセスの際の変換について示す。 更新後のデータテーブルのサイズが、データROM用アドレス変換器が扱うセグメントサイズを超える場合のアドレス変換例について説明する模式図であり、データテーブルへの2回目以降のアクセスの際の変換について示す。 更新前プログラムと差分プログラムの間のプログラム実行遷移の様子を示す模式図である。 変換されたアドレスと差分コードの対応例を示す模式図である。 変換されたアドレスと差分コードの別の対応例を示す模式図である。 変数についての更新がある場合の、変換されたアドレスと差分コードの対応例を示す模式図である。 変数についての更新がある場合の、変換されたアドレスと差分コードの別の対応例を示す模式図である。 更新情報ファイルの構成例を示す模式図である。 インジェクションコードの構成例を示す模式図である。 インジェクションコードが実行されるまでの流れを説明する模式図である。 インジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 インジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 インジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 インジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 インジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 インジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 インジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 インジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 インジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 インジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 インジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 BIOSルーチンを関数呼び出しで実行する場合のインジェクションコードの構成例を示す模式図である。 BIOSルーチンへのJump命令によりBIOSルーチンを実行する場合のインジェクションコードの構成例を示す模式図である。 BIOSコードの更新を伴わないプログラムの更新の場合の3面のプログラムROMへのBIOSコードの配置例を示す模式図である。 BIOSコードの更新を含むデフォルトプログラム全体の更新の場合の3面のプログラムROMへのBIOSコードの配置例を示す模式図である。 差分更新に対応する、更新バイナリコードと更新情報の生成の処理の一例を示すフローチャートである。 差分更新に対応する、更新バイナリコードと更新情報の生成の処理の一例を示すフローチャートである。 全体プログラム更新に対応する、更新バイナリコードと更新情報の生成の処理の一例を示すフローチャートである。 差分プログラムのマージの処理の一例を示すフローチャートである。 差分プログラムのマージの処理の一例を示すフローチャートである。 組込み機器が配置されたシステムの構成例を示す。 プログラム更新手順の一例を示すフローチャートである。 組込み機器におけるプログラムの動的な配置動作の一例を説明する模式図である。 組込み機器におけるプログラムの動的な配置動作の別の一例を説明する模式図である。 組込み機器の起動動作の一例を示すフローチャートである。 「更新差分コード配置後初期化処理」の一例を示すフローチャートである。 BIOSの呼び出しを行うコードのSRAMへの配置及びBIOSの実行の手順の一例を示すフローチャートである。 更新情報ファイルに含まれる更新差分バイナリを管理サーバから組込み機器に転送する手順の一例を示すフローチャートである。 実施の形態2にかかる組込み機器の構成例を示すブロック図である。 実施の形態2にかかる組込み機器の他の構成例を示すブロック図である。 実施の形態2にかかるアドレス変換器の概要を示す模式図である。 新たな差分コードの構築時に、以前配置した差分コードを再利用する方法について説明する模式図である。 BIOSコードの更新を伴わないプログラムの更新の場合の2面のプログラムROMへのBIOSコードの配置例を示す模式図である。 BIOSコードの更新を含むデフォルトプログラム全体の更新の場合の2面のプログラムROMへのBIOSコードの配置例を示す模式図である。 実施の形態2にかかるプログラム更新手順の一例を示すフローチャートである。 実施の形態2にかかる組込み機器の起動動作の一例を示すフローチャートである。 実施の形態2にかかる「更新差分コード配置後初期化処理」の一例を示すフローチャートである。 実施の形態3にかかるインジェクションコードの構成例を示す模式図である。 実施の形態3にかかるインジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 実施の形態3にかかるインジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 実施の形態3にかかるインジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 実施の形態3にかかるインジェクションコードでの処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。 データROMに格納される対応表の一例を示す図である。 対応表を用いたROM消去BIOSルーチンの一例を示すフローチャートである。 実施の形態3にかかる、差分プログラムのマージの処理の一例を示すフローチャートである。 実施の形態3にかかる、差分プログラムのマージの処理の一例を示すフローチャートである。 ROMへの書込みの許否を制御する制御回路の一例を示す模式図である。 制御回路を用いた書き込みの制御動作の一例を示すフローチャートである。 組込み機器で更新情報の動的な配置又は更新動作の途中で電源停止が発生した場合の復旧処理の一例を示すフローチャートである。
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、CPU、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non−transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM(Read Only Memory)CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM(Random Access Memory))を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
<概要>
まず、実施の形態の詳細な説明に先立って、実施の形態の概要について説明する。図1は、実施の形態の概要にかかる組込み機器1の構成を示すブロック図である。組込み機器1は、図1に示すように、ネットワーク入出力部2と、不揮発性メモリ3と、CPU4と、アドレス変換器5とを有する。
ネットワーク入出力部2は、ネットワークを介して更新情報を受信する。更新情報は、組込み機器1のプログラム及びデータを更新するための情報である。不揮発性メモリ3は、独立して読み出し及び書き込みが可能な複数の面を備えたROMであり、例えばフラッシュメモリである。不揮発性メモリ3は、第1の面にデフォルトプログラム(更新前プログラム)が配置され、第2の面にデフォルトプログラムに対する差分プログラムが配置される。なお、差分プログラムは、ネットワーク入出力部2により受信される更新情報に含まれており、ネットワーク入出力部2が更新情報を受信後、不揮発性メモリ3に配置されることとなる。なお、差分プログラムは更新差分プログラムと呼ばれることがある。CPU4は、不揮発性メモリ3に配置されたプログラムを実行する。また、アドレス変換器5は、ネットワーク入出力部2により受信された更新情報に含まれたアドレス変換テーブルを用いてアドレス変換を行う。アドレス変換器5は、CPU4により命令がデコードされることによって取得されたアドレスが、デフォルトプログラムにおける変更箇所に対応するアドレスである場合に、このアドレスを差分プログラムが配置されたアドレスへと変換する。そして、CPU4は、アドレス変換器5により変換されたアドレスに従って差分プログラムを実行する。これにより、CPU4は、デフォルトプログラム及び差分プログラムからなる更新後のプログラムを実行することとなる。
このように、組込み機器1では、アドレス変換器5によりアドレス変換を行っているため、更新前プログラムと差分プログラムを用いたプログラムの再構成を行う必要がない。
<実施の形態1>
以下、図面を参照しつつ、実施の形態1について具体的に説明する。
図2は、実施の形態1にかかる情報システム10の構成例を示す模式図である。情報システム10は、開発環境20と、管理サーバ30と、組込み機器40とを含む。管理サーバ30と組込み機器40は、ネットワーク15で相互に接続されている。組込み機器40は、例えば車載制御ECU(Electronic Control Unit)や産業FA(Factory Automation)制御機器などといった制御機器が相当する。なお、図2では、開発環境20、管理サーバ30、及び組込み機器40が全て一台の場合を例に記載しているが、管理サーバ30及び組込み機器40は任意の台数で良い。また、管理サーバ30は複数台を経由する形式にカスケードに接続された構成でも良い。更に、ネットワーク15は、管理サーバ30と組込み機器40を相互に接続できる形態であれば任意で良い。従って、ネットワーク15は、有線接続と無線接続のどちらか一方または両方で構成されていても良い。ネットワーク15には、例えばインターネットや放送波、車載・産業ネットワークが含まれる。
このような情報システム10において、開発環境20には更新前のプログラムのソースコード、更新前のプログラムのオブジェクトコード、更新後のプログラムのソースコード等が入力される。そして、開発環境20により生成された更新情報ファイル50が、ネットワーク15を介して組込み機器40に送信される。組込み機器40には予めメモリに更新前のプログラムのオブジェクトコード65が配置されている。組込み機器40は、更新情報ファイル50に含まれる差分プログラムオブジェクトコード51及びアドレス変換テーブル52を受信し、更新後のプログラムの実行を行う。以下、具体的に説明する。
図3は、開発環境20の構成例を示すブロック図である。開発環境20は、情報システム10において更新差分プログラムの作成者が使用するコンピュータシステムである。なお、以下の説明において、更新差分プログラム(差分プログラム)は、更新差分コード又は更新差分バイナリとも称され得る。更新差分プログラム(差分プログラム)は、更新前のプログラムと更新後のプログラムの差分のプログラムである。開発環境20は、1つ以上の組込み機器40に配信する更新情報ファイル50を生成する。開発環境20は、入力部21、データ処理部22、及び出力部23を有する。
入力部21は、更新差分プログラムの作成者が、開発環境20に対する指示を与えるのに使用されるデバイスである。この例の場合、組込み機器40で使用される更新情報ファイル50の作成等の指示を与えるために使用される。入力部21は、更新前プログラムのソースコード61、この更新前プログラムのソースコード61に対応する更新前プログラムのオブジェクトコード62、更新後プログラムのソースコード63、ロールバック情報配置アドレス64を入力として受ける。ここで、更新前プログラムは、組込み機器で現在動作しているプログラムである。更新後プログラムは、組込み機器で新たに動作させるプログラムであり、更新プログラムと称されうる。ロールバック情報配置アドレス64は、例えばプログラム更新で何らかの異常が検知された際に、ロールバック対象となるプログラム復元ポイントを構成する情報である。
出力部23は、更新情報ファイル50を管理サーバ30に渡すために使用されるデバイスであり、例えば出力インターフェースである。
データ処理部22は、図示しない処理装置とメモリから構成される。処理装置は、読み込んだプログラムの内容を解釈してデータ処理を実行する。処理装置は、例えばCPU(Central Processing Unit)又はMPU(Micro Processing Unit)等で構成される。メモリは、処理装置で使用される処理データを一時的に記憶する記憶装置である。メモリは例えばRAM(Random Access Memory)等で構成される。尚、メモリには、更新情報ファイル50の作成を支援するプログラム等が格納される。このプログラムには、更新後プログラムのソースコード63を更新後プログラムのオブジェクトコードに変換するコンパイラと、2つのソースコード間の差分プログラムソースコードを抽出するプログラムと、この差分プログラムソースコードを適切なオブジェクトコードに変換するコンパイラ及びリンカ、若しくは2つのプログラムオブジェクトコード間の差分を差分プログラムオブジェクトコードに変換するコンパイラ及びリンカと、を含む。
更新情報ファイル50は、組込み機器40で動作する更新前プログラムオブジェクトコード62を更新するための情報を含む。具体的には、更新情報ファイル50は、更新差分コード51、アドレス変換テーブル52、インジェクションコード70、ロールバック情報配置アドレス64から成る。以下の説明において、更新差分コードは、更新差分バイナリ、更新差分オブジェクトコードなどと呼ばれうる。なお、更新情報ファイル50の詳細については、後述する。以下、インジェクションコードを用いて実施の形態の説明を行うが、インジェクションコードの代わりに、呼び出し関数名と当該関数の引数列からなるデータ列を用い、組込み機器内部でこのデータ列からインジェクションコード相当の関数を構成する形式として実現しても良い。このような実現方式を取る事で、インジェクションコード相当の関数を構成時に、データ列の署名検証などといったインジェクションコードの正当性検証がより堅牢に実現可能となる。
次に、管理サーバ30の構成について説明する。図4は、管理サーバ30の構成例を示すブロック図である。管理サーバ30は、情報システム10において、開発環境20の出力を一旦受けて、その後、一以上の組込み機器40に更新情報ファイル50を配信するコンピュータシステムである。管理サーバ30は、入力部31、表示部32、データ処理部33、記憶部34、及びネットワーク接続部35を有する。
入力部31は、開発環境20からの更新情報ファイル50をデータ処理部33に渡すために使用されるデバイスである。ここで、開発環境20と入力部31の接続は、相互に接続できる形態であれば任意で良い。従って、本接続は、有線接続と無線接続のどちらか一方または両方で構成されていても良い。本接続には、例えばインターネットや放送波が用いられる。
表示部32は、管理サーバ30に対する入力情報や処理結果としての各種データ等を表示する出力装置である。表示部32として、例えばCRT(Cathode Ray Tube)ディスプレイ又は液晶ディスプレイが使用される。
データ処理部33は、図示しない処理装置とメモリから構成される。処理装置は、読み込んだ更新情報ファイル50の内容を解釈してデータ処理を実行する。処理装置は、例えばCPU又はMPU等で構成される。メモリは、処理装置で使用される処理データを一時的に記憶する記憶装置である。メモリは例えばRAM等で構成される。尚、メモリには、ネットワーク15での転送プロトコルに適した形式への更新情報ファイル50の変換を支援するプログラム等が格納される。このプログラムには、更新情報ファイル50に含まれる更新差分プログラムオブジェクトコードやアドレス変換テーブルを分割転送する場合に、これらを分割する処理、及び、分割された更新差分プログラムオブジェクトコードや分割されたアドレス変換テーブルの組込み機器への配置などに必要となる各インジェクションコードを分割に合わせて修正する処理などを行うプログラムが含まれる。
記憶部34は、各種データを記憶又は読み出す装置である。記憶部34は、例えばHDD(Hard Disk Drive)、光学記憶装置、又はフラッシュメモリデバイス等で構成される。この例の場合、記憶部34には、更新情報ファイル50等が格納される。ネットワーク接続部35は、管理サーバ30をネットワーク15に接続するための通信装置である。
次に組込み機器40について説明する。図5は、組込み機器40の構成例を示すブロック図である。情報システム10における組込み機器40とは、更新対象のプログラムが動作する機器である。組込み機器40は、例えば制御対象装置400を制御する組込みコントローラであり、CPU401、CPU401が実行するプログラムのアドレスを変換するアドレス変換器402、割込みコントローラ403、暗号処理ユニット404、DMA(Direct Memory Access)コントローラ405、SRAM(Static Random Access Memory)406、夫々独立に読み書き及び消去が可能な3面構成のプログラムROM(Read Only Memory)407、夫々独立に読み書き及び消去が可能な3面構成のデータROM408、CAN(Controller Area Network)インターフェース409、及び入出力インターフェース410を有する。ここで、プログラムROM407及びデータROM408は、具体的には、例えばフラッシュメモリなどの不揮発性メモリである。CPU401は、データROM408に配置されたデータを用いて、プログラムROM407に配置されたプログラムを実行する。なお、暗号処理ユニット404は、暗号鍵のセキュアな管理、暗号鍵を用いたプログラム又はデータの暗号化又は復号化、署名発行、署名検証などを行うユニットである。暗号処理ユニット404は、例えば、更新情報についての署名検証を行う。なお、暗号処理ユニット404は、署名検証部と称されることもある。暗号処理ユニット404は、例えば、暗号処理ユニット404に含まれる図示しないCPUがプログラムを実行することにより、上述の処理を行う。プログラムROM407は、いずれかの面にデフォルトプログラムが配置され、他の面に、デフォルトプログラムに対する差分プログラムが配置される。また、データROM408は、いずれかの面にデフォルトデータが配置され、第2の面に、前記デフォルトデータに対する差分データが配置される。なお、差分プログラム及び差分データは、CANインターフェース409により受信される更新情報に含まれている。また、CANインターフェース409は、ネットワーク入出力部とも称され、ネットワーク15を介して更新情報を受信する。アドレス変換器402は、CANインターフェース409により受信された更新情報に含まれたアドレス変換テーブルを用いてアドレス変換を行う。
なお、図5に示した例では、組込み機器40は、サブCPUが設けられていないが、図6に示すように、組込み機器40が、メインCPU401、CPU401が実行するプログラムのアドレスを変換するアドレス変換器402、割込みコントローラ403、暗号処理ユニット404、サブCPU411、サブCPU411が用いるプログラムROM412、DMAコントローラ405、SRAM406、夫々独立に読み書き及び消去が可能な3面構成のプログラムROM407、夫々独立に読み書き及び消去が可能な3面構成のデータROM408、CANインターフェース409、及び入出力インターフェース410を有してもよい。またプログラムROM412は物理的には、プログラムROM407上に配置されていても良い。
図7は、本実施の形態にかかるアドレス変換器402の概要を示す模式図である。アドレス変換器402は、例えば、2つのアドレス変換テーブル420A、420Bのうち、いずれかのアドレス変換テーブルを用いて、アドレス入力部421に入力されたアドレスが変換対象のアドレスである場合にこのアドレスを変換し、アドレス出力部422から出力する。なお、2つのアドレス変換テーブル420A、420Bのうち、例えば、一方がn回目の更新により使用されるテーブルであり、他方がn+1回目の更新により使用されるテーブルである。このように、n+1回目の更新では、例えば、それまでアドレス変換テーブル420Aによる変換に基づいて行われていたプログラムの実行が、アドレス変換テーブル420Bによる変換に基づいて行われるプログラムの実行へと切り替えられる。
アドレス入力部421は、アドレス変換器402におけるアドレスの入力インターフェースであり、CPU401(より具体的にはCPU401のコア)が命令をデコードして生成するアドレスが入力される。なお、この入力は、CPU401のコアから直接入力されても良いし、バスを介して入力されても良い。アドレス出力部422は、アドレス変換器402におけるアドレスの出力インターフェースであり、プログラムROM407及びデータROM408が接続されたメモリバスにアドレスを出力する。なお、アドレス出力部422は、メモリバスを介さず、プログラムROM407及びデータROM408にアドレスを直接入力してもよい。
このような構成により、アドレス変換器402には、アドレス変換テーブル420A又は420Bとして、更新情報ファイル50に含まれるアドレス変換テーブル52が設定される。そして、アドレス変換器402は、アドレス入力部421からの入力アドレスに対し、選択ビット423に基づくセレクタ424の選択により選ばれたアドレス変換テーブルを用いた変換を実施し、アドレス出力部422から出力アドレスを出力する。また、アドレス変換器402は、セレクタ425により、アドレス変換テーブルによる変換の有効化・無効化を切り替えることが可能になっている。
このようなアドレス変換により、CPUが実行するプログラムアドレスの変換を実施し、更新前プログラムオブジェクトコードの更新部分となる更新差分プログラムオブジェクトコードを適切に実行可能とする事で、更新後プログラムオブジェクトコードの実行を可能としている。
次に、アドレス変換器402の接続関係についてより詳細に説明する。図8は、アドレス変換器402のより具体的な接続例を示すブロック図である。組込み機器40は、アドレス変換器402として、具体的には、プログラムROM407用のアドレス変換器402Aと、データROM408用のアドレス変換器402Bを有する。本実施の形態では、プログラムROMが3面であることに対応して、組込み機器40は、プログラムROM407用のアドレス変換器402Aを2個搭載している。また、同様に、組込み機器40は、データROM408用のアドレス変換器402Bを2個搭載している。ここで、プログラムROM407用のアドレス変換器402Aは、命令用バスインターフェース426及びメモリバス427との間に設けられており、命令用バスインターフェース426からの変換前アドレスに対し変換後アドレスをメモリバス427に出力する。また、データROM408用のアドレス変換器402Bは、オペランド用バスインターフェース428及びメモリバス427との間に設けられており、オペランド用バスインターフェース428からの変換前アドレスに対し変換後アドレスをメモリバス427に出力する。なお、命令用バスインターフェース426及びオペランド用バスインターフェース428は、それぞれ、ハーバードアーキテクチャで構成されたプロセッサコア429(CPU401)に接続されている。
プログラムROM407用のアドレス変換器402Aは、CPU401により命令がデコードされることによって取得されたアドレスが、デフォルトプログラムにおける変更箇所に対応するアドレスである場合に、このアドレスを差分プログラムが配置されたアドレスへと変換する。また、データROM408用のアドレス変換器402Bは、CPU401により命令がデコードされることによって取得されたアドレスが、デフォルトデータにおける変更箇所に対応するアドレスである場合に、このアドレスを差分データが配置されたアドレスへと変換する。そして、CPU401は、データROM408用のアドレス変換器402Bにより変換されたアドレスに従って、差分データを用いた処理を実行する。このように、本実施の形態では、組込み機器40は、プログラムROM407用のアドレス変換器402Aに加えて、データROM408用のアドレス変換器402Bを有している。このため、プログラムコードの更新に限らず、データの更新にも対応することが可能となる。一般に、プログラムROMやデータROMに配置されているデータの更新がなされると、元々のデータとはアドレスが異なるため、更新されたデータへアクセスを行うプログラムコードも変更がなされる。この変更により、差分コード量が増加するという問題がある。アドレス変換器を用いる事で、プログラムコード上のアドレスの変更を極力抑えつつデータを更新する事が可能となり、差分コードの増加量を削減する事が可能となる。
次に、更新後のプログラムの実行手順について説明する。図9は、更新後のプログラム実行手順例を説明する模式図である。ここでは、プログラムROM407の第1の面に、更新前プログラムオブジェクトコードが配置され、プログラムROM407の第2の面に、更新差分プログラムオブジェクトコードの一部が配置されている場合を考える。ここで、第2の面に配置されているコードブロック800は、更新前プログラムオブジェクトコードの一部であるコードブロック801に対応しているものとする。CPU401によるプログラム実行の際、アドレス変換器402によるアドレス変換を実施する事で、コードブロック801がコードブロック800に置き換えられて実行される。このような方法により、更新後のプログラム実行を可能としている。以下、図9での更新後プログラム実行例を示す。
まず、CPU401のプログラムカウンタの値はWである(図中(1)参照)。このとき、アドレス変換テーブルの変換元アドレスにWが存在しないので、アドレス変換器402はWを出力する(図中(2)参照)。続いて、CPU401が、アドレスWにある命令Jump Xを実行し、プログラムカウンタをXに書き換える(図中(3)参照)。次に、CPUはアドレスXにある命令を読み出そうとするが(図中(4)参照)、Xが変換元アドレスに一致したため(図中(5)参照)、アドレス変換器402はアドレスYを出力する(図中(6)参照)。このため、CPU401はアドレスYから命令を読み出し、実行する(図中(7)参照)。その後、プログラムカウンタの値は、X+1に変更され、アドレス変換器402によって、X+1がY+1に読み替えられ、アドレスY+1にある命令が実行される。更新後コードブロック800の末尾には命令Jump Zが配置されており、これをCPU401が実行する(図中(8)参照)。その後、CPU401は、更新前プログラムのアドレスZから実行を継続する(図中(9)参照)。
ここで、アドレス変換器402によるアドレス変換の詳細を説明する。アドレス変換器402は、具体的には、CPU401により命令がデコードされることによって取得されたアドレスにおける予め定められたビット数の上位ビット列(以下、上位アドレスと称されうる)を変更し、かつ、変更された上位ビット列とアドレスの下位ビット列(以下、下位アドレスと称されうる)とを連結することにより、アドレスの変換を実現する。すなわち、アドレス変換器402は、入力された上位アドレスが、アドレス変換テーブルに登録された変換元アドレスに一致するか否か判定し、一致した場合、当該上位アドレスを変換先アドレスに置換し、変換した上位アドレスに下位アドレスを連接して出力する。このように、アドレス変換器402は、上位アドレスのビット数を一つのセグメントとして、アドレス変換を行う。これにより、アドレスの全ビットを変換対象とする場合に比べ、アドレス変換テーブルの大きさを小さくすることができる。図10は、アドレス変換器402によるアドレス変換の詳細を説明する模式図である。ここでは、アドレスのビット数が32ビットであるとし、アドレス変換器402に設定されるセグメントサイズが2バイトであるとする。この場合、例えば最大k個の変換が記されるアドレス変換テーブルには、変換元のアドレスとしての(32−s)ビットの上位アドレスと、変換先のアドレスとしての(32−s)ビットの上位アドレスとの対が格納されている。アドレス変換器402は、比較器430により、変換前アドレスの上位アドレスが、アドレス変換テーブルに示される変換元のアドレスと一致するか否かを判定する。セレクタ431は、一致する場合、アドレス変換テーブルに示される変換先のアドレスを出力し、一致しない場合、変換前アドレスの上位アドレスを出力する。その後、連結器432が、セレクタ431が出力した(32−s)ビットの上位アドレスと、sビットの変換前アドレスの下位アドレスを連結し、変換後アドレスを生成する。
なお、データROM用アドレス変換器402Bを用いた更新プログラムの実行手順も、このように変換元の上位アドレスを変換先の上位アドレスに変換後、下位アドレスを連接して、新たに配置されたデータROM408上のデータテーブルなどにアクセスを実施する手順となるが、次のような工夫が追加されてもよい。以下に示す工夫により、新たに配置される配列等のデータテーブルが、データROM用アドレス変換器402Bが扱うセグメントサイズを超える大きなデータテーブルとなった場合にも、更新を実現する事が可能となる。図11A及び図11Bは、更新後のデータテーブルのサイズが、データROM用アドレス変換器402Bが扱うセグメントサイズを超える場合のアドレス変換例について説明する模式図であり、図11Aは、データテーブルへの1回目のアクセスの際の変換について示し、図11Bは、データテーブルへの2回目以降のアクセスの際の変換について示している。
ここでも、アドレスのビット数が32ビットであるとし、アドレス変換器402に設定されるセグメントサイズが2バイトであるとする。つまり、セグメントサイズは、Sビットアドレス空間のサイズとなる。なお、一般的に、データテーブルへの各アクセスでは、配列要素間等のアドレス・オフセットだけ、アクセス先のアドレスが異なる。
データテーブルに対する1回目のアクセスの際、データROM用アドレス変換器402Bは、変換前上位アドレス(pre_addr_oldとする)と、アドレス変換テーブルに基づく変換後上位アドレス(post_addr_oldとする)をレジスタ等に一旦保存する。なお、1回目のアクセスの際、データROM用アドレス変換器402Bは、変換後上位アドレスに、全て0であるsビットのビット列を連接し、変換後のアドレスとして出力する。そして、データROM用アドレス変換器402Bは、データテーブルに対する2回目以降のアクセスの際、次のように変換後のアドレスを出力する。なお、ここでは、2回目以降のアクセスの際の変換前上位アドレスをpre_addr_newとする。pre_addr_newがアドレス変換テーブルの変換元アドレスと一致する場合、データROM用アドレス変換器402Bは、アドレス変換テーブルに示される変換先上位アドレスと入力された下位アドレスとを連結して出力する。これに対し、pre_addr_newがアドレス変換テーブルの変換元アドレスと一致しない場合、データROM用アドレス変換器402Bは、pre_addr_newとpre_addr_oldとの差分addr_diffを求める。すなわち、addr_diff = pre_addr_new − pre_addr_oldが算出される。この差分addr_diffの予め定められた下位tビット以外が全て0である場合、データROM用アドレス変換器402Bは、post_addr_oldとaddr_diffとの和をとって生成される上位アドレス(post_addr_old + addr_diff)と、下位アドレスとを連結して出力する。また、この差分addr_diffの予め定められた下位tビット以外が全て0でない場合、データROM用アドレス変換器402Bは、pre_addr_newと下位アドレスとを連結して出力する。つまり、この場合、データROM用アドレス変換器402Bは、もはやデータテーブルへのアクセスではないとして、入力されたアドレスを変換せずに出力する。
このアドレス変換方式により、例えばデータROMに元々配置していた配列のサイズが新規プログラムではセグメントの境界を超えるほどに肥大化した場合に対応可能となる。配列サイズが一致する部分へのアクセスに関しては、アドレス変換器によりデフォルトプログラムと更新プログラムでは全く同一アドレスへのアクセスとする事が可能となるため、同一アドレス部の値に変更がなければ、増加した部分へのアクセスを行うプログラムコードのみが差分コードとなる。特に、以下に開示するアドレス変換方式では、増加した部分へのアクセスを行う差分コードは、配列サイズが一致する部分のアドレスに連続するアドレスへのアクセスを行うコードとする事が可能となる。
次に、更新前プログラムと差分プログラムの間のプログラム実行遷移について説明する。図12は、更新前プログラムと差分プログラムの間のプログラム実行遷移の様子を示す模式図である。ここではメモリ空間Aに更新前プログラムのオブジェクトコードが配置されている。メモリ空間Aにおいて、Const変数及び列挙型値などのテキストセグメントに配置される定数変数とその値がメモリ領域802に、関数fがメモリ領域803に、関数gがメモリ領域804に、関数hがメモリ領域805に、初期値付き変数がメモリ領域806に、初期値なし変数がメモリ領域807に、スタックなどをメモリ領域808に配置した例を示している。またメモリ空間Bに、更新差分プログラムのオブジェクトコードが配置されている。パッチ809は、関数fの一部に対応する更新差分プログラムオブジェクトコード、パッチ810は、関数gの一部に対応する更新差分プログラムオブジェクトコード、パッチ811は、関数hの一部に対応する更新差分プログラムオブジェクトコード、に夫々対応しているものとする。図12に記載のコード間のプログラム実行遷移例を以下に示す。
まず、CPU401による関数fの実行中に、アドレス変換により、パッチ809の先頭アドレスにプログラムの実行が遷移する。パッチ809における関数gの実行では、メモリ空間Aに配置された関数gの先頭アドレスが呼び出される。関数gの呼び出し完了後は、パッチ809の関数gの呼び出し位置の次のアドレスにプログラムの実行が遷移し、パッチ809の残りのプログラムの実行がなされる。そして、パッチ809の実行完了後に戻るべき関数fのアドレスへと、プログラムの実行が遷移する。次に、CPU401による関数g実行中に、アドレス変換により、パッチ810の先頭アドレスにプログラムの実行が遷移する。パッチ810における関数hの実行では、メモリ空間Aに配置された関数hの先頭アドレスが呼び出される。関数hの呼び出し完了後は、パッチ810の関数hの呼び出し位置の次のアドレスに、プログラムの実行が遷移し、パッチ810の残りのプログラムの実行がなされる。そして、パッチ810の実行完了後に戻るべき関数gのアドレスへと、プログラムの実行が遷移する。次に、CPU401での関数hの実行中に、アドレス変換により、パッチ811の先頭アドレスにプログラムの実行が遷移する。そして、パッチ811の実行完了後に戻るべき関数hのアドレスへと、プログラムの実行が遷移する。その後、CPU401は、関数hの実行を継続し、プログラムの実行を完了する。
次に、変換されたアドレスと差分コードの対応例について図13〜図16を参照しながら説明する。図13は、変換されたアドレスと差分コードの対応例を示す模式図である。ここでは、置換対象コード812を差分コード813で置換えることにより、更新後のプログラムが実行される場合を例に説明する。なお、図13に示す例は、差分コードサイズtが置換対象コードのサイズsと同じ、又は置換対象コードのサイズsより小さい場合であって、sとtがプログラム用アドレス変換器402Aに設定されるセグメントサイズ以下の場合の例である。置換対象コード812の先頭アドレスにCPU401によるプログラム実行が到達すると、プログラム用アドレス変換器402Aにより、プログラムカウンタに設定されたアドレスが、差分コード813の先頭アドレスに変換され、プログラム遷移が実施される。プログラム用アドレス変換器402Aが順次、変換前アドレスを差分コード813のアドレスに変換しつつ、差分コード813の終了アドレスまでプログラム実行が継続される。差分コード813の終了アドレスには、置換対象コード812の終了アドレスの次のアドレスへのJUMP(ジャンプ)命令が配置されており、更新前コードの残りのプログラムの実行が再開される。
図14は、変換されたアドレスと差分コードの別の対応例を示す模式図である。ここでは、置換対象コード814を差分コード815で置換えることにより、更新後のプログラムが実行される場合を例に説明する。なお、図14に示す例は、差分コードサイズtが置換対象コードのサイズsより大きい場合か、またはsとtの何れかがプログラム用アドレス変換器402Aに設定されるセグメントサイズより大きい場合に対応している。置換対象コード814の先頭アドレスにCPU401によるプログラム実行が到達すると、プログラム用アドレス変換器402Aにより、プログラムカウンタに設定されたアドレスが、差分コード815の先頭アドレスに変換され、プログラム遷移が実施される。差分コード815の先頭には、更新差分プログラムの開始アドレスへのジャンプ命令に関わる命令が配置されている。ここで、ジャンプ命令に関わる命令には、ジャンプを実施するオブジェクトコードが含まれるが、必要に応じて、レジスタの記憶内容の退避及び復旧を実施するオブジェクトコード、及びジャンプ先のアドレス計算を実施するオブジェクトコードが含まれてもよい。なお、レジスタの記憶内容の退避及び復旧を実施するオブジェクトコードは、次のような理由により必要となる場合がある。ジャンプ命令のジャンプ先アドレスの計算を行う命令の挿入が一般には必要となるが、ジャンプ命令のためのアドレス計算に必要となる命令列とジャンプ命令は、更新差分バイナリ生成時に挿入されるものであり、更新差分バイナリを生成するための更新プログラムには元々存在しない命令列である。つまり、この命令列は、更新プログラムを実行した場合には本来現れない命令列である。従って、これら命令列の実行は、本来あるべきCPUレジスタ状態と異なるCPUレジスタ状態を構成し得る。それ故、これら命令列の実行前のCPUのレジスタ状態をレジスタ退避により保持し、実行後にレジスタ復旧する事で、これら命令列のCPUレジスタ状態への影響が排除される。ここで、ジャンプ先のアドレスは、例えば、ジャンプ命令に関わる命令列のオブジェクトコードが完了するアドレスの次のアドレスである。これにより、ジャンプ命令によるプログラム遷移後、CPU401は、差分コード815の終了アドレスまでプログラム実行を継続する。差分コード815の終了アドレスには、置換対象コード814の終了アドレスの次のアドレスへのジャンプ命令が配置されており、更新前コードの残りのプログラムの実行が再開される。
このように、プログラムにおける置換対象部分のコードのサイズよりも、置換対象部分のコードの代わりとなる差分コードのサイズが大きい場合、又は、置換対象のコードのサイズ若しくは差分コードのサイズがセグメントサイズより大きい場合、アドレス変換器402は、次のようなアドレス変換を行う。すなわち、アドレス変換器402は、置換対象部分のコードの開始アドレスを、置換対象部分のコードに代わる命令列の開始アドレスへのジャンプ命令に関わる命令が記憶されたアドレスへと変換する。このようにすれば、プログラムにおける置換対象部分のコードのサイズよりも、置換対象部分のコードの代わりとなる差分コードのサイズが大きい場合、又は、置換対象のコードのサイズ若しくは差分コードのサイズがセグメントサイズより大きい場合であっても、適切に更新後のプログラムの実行を実現することが可能となる。
次に、変数についての更新がある場合の例について図15及び図16を参照して説明する。図15は、変数についての更新がある場合の、変換されたアドレスと差分コードの対応例を示す模式図である。この図は、置換対象コードを差分コードで置換えて、更新後のプログラムが実行される場合であって、更新に伴い、Const変数や列挙型値などテキストセグメントに配置される定数変数の追加、定数変数の変更、又は初期値付き変数の追加があり、これら変数に差分コードのみからアクセスされる例に対応している。変数の追加又は変更があった部分は元々メモリ空間Aに配置されている変数ではなく、メモリ空間Bに配置した変数を参照しつつ、図13又は図14の実行方法に従ってプログラム実行が行われる。これら変数は差分コードが配置されるメモリ空間Bに新たに差分コードの一部として配置され、差分コード実行時には、追加又は変更があった部分に関しては、元々メモリ空間Aに配置されている変数ではなく、メモリ空間Bの変数が参照されてプログラムが実行される事で、変数の値更新が実現される。
図16は、変数についての更新がある場合の、変換されたアドレスと差分コードの別の対応例を示す模式図である。この図は、置換対象コードを差分コードで置換えて、更新後のプログラムが実行される場合であって、大域変数である初期値付き変数又は局所変数である初期値付き変数の初期値の変更があるとき、又は更新前コードから参照される初期値付き変数の追加があるときの例に対応している。これら変更又は追加があった部分はメモリ空間Bに新たに配置した変数群をアドレス変換機構を援用して参照しつつ、図13又は図14の実行方法に従ってプログラム実行が行われる。初期値変更又は、初期値付き変数の追加があった部分に関しては、メモリ空間Aに配置されている変数であって変更又は追加の影響を受ける変数群に対して、追加される変数群又は変更後の変数群を、差分コードが配置されているメモリ空間Bに新たに配置し、差分コード実行時には、アドレス変換機構を用いてこれら変数を参照し実行する事で、追加又は変更を伴うプログラム実行が実現される。特に、局所変数の場合は、メモリ空間B上に配置された変数へのアクセスを実施するのに対し、大域変数の場合は、メモリ空間Bに配置された変数がリブート後にデータセグメント(データセグメントがSRAM406に割り当てられている場合はSRAM406、データROM408に割り当てられている場合はデータROM408)に展開された後、初期値付き変数の追加又は変更を伴うプログラム実行がなされる。なお、このような展開は、後述する、BIOS(バイオス)関数の大域変数更新のためのデータROM消去書込み処理関数、または大域変数更新のためのデータROM書込み処理関数により実行される。これら関数に対し適切な引数が渡されて呼び出し実行されるよう、更新差分バイナリは構成される。
次に、更新情報ファイル50の詳細について説明する。更新情報ファイル50は、組込み機器のプログラムを更新するために使用される。上述の通り、更新情報ファイル50は、ロールバック情報の配置アドレス64、アドレス変換テーブル52、インジェクションコード70、更新差分プログラムオブジェクトコード51で構成される(図17)。以下に、更新情報ファイル50を構成する要素のそれぞれを説明する。
ロールバック情報の配置アドレス64は、例えばプログラム更新で何らかの異常を検知した際のプログラム復元ポイントを構成する情報である。本実施の形態では、以前にパッチ当てを実施した更新差分プログラムオブジェクトコードに対応するアドレス変換テーブルの記憶領域の先頭アドレスを示す。ここで、アドレス変換テーブルはデータROM408などに格納されているものとする。アドレス変換テーブルは、複数配置されている可能性がある。なお、どのアドレス変換テーブルも参照しない状態、即ち、どのパッチ当ても行われていない状態を復元ポイントとして指定する場合は、アドレス変換器402を無効化するためのインジェクションコードの生成が実施される。
アドレス変換テーブル52は、上述の通り、更新前プログラムのパッチ当て対象コード部の先頭アドレスを変換元アドレスとし、このパッチの先頭アドレスを変換先アドレスとした、更新差分プログラム実行のためのアドレス変換の対応関係を記載したテーブルである。なお、本実施の形態では、具体的には、アドレス変換テーブル52は、変換元アドレスの上位アドレスと変換先アドレスの上位アドレスとの対応関係を記載したテーブルである。ここで、アドレス変換の対応関係は、k個まで指定可能であるとする。kは例えば32などの定数であり、ハードウェア仕様等により定まる。
インジェクションコード70は、更新差分プログラムのオブジェクトコード51のプログラムROM407への配置、アドレス変換テーブル52のデータROM408への配置、アドレス変換テーブル52のアドレス変換器402への設定、アドレス変換器402の有効化、必要に応じたプログラムROM407又はデータROM408のデータ消去、異常検出などをトリガとしたロールバック処理、これら処理を実行するためのBIOSプログラムのデータROM408からプログラムROM407への展開、などを実行するためのBIOSプログラムを呼び出すために使用されるプログラム群である。ここで、インジェクションコードは、対応するBIOSルーチンへ適切な引数を渡して、BIOSルーチンを呼び出すプログラムである。インジェクションコードの実行方法としては、例えば、CANインターフェース409を介してSRAM406にインジェクションコードを配置し、割込みコントローラ403によりプログラムカウンタをインジェクションコードが配置されたアドレスへと遷移させ、インジェクションコードを実行する。インジェクションコードの実行により対応するBIOSが起動し、更新差分バイナリなどCANインターフェース409を介してSRAM406に転送されたデータのプログラムROM407/データROM408へのデータ配置が実施される。ここで、BIOSコードの配置位置は、プログラムROM407の実行中ではない面であっても良いし、データROM408の実行中ではない面であっても良い。また、インジェクションコードの実行はCANインターフェース409からの割込みで起動した割り込みハンドラ内で実施しても良い。また、例えば、インジェクションコードの実行を必ず割込みにて実施する場合、全BIOSコードは、実行終了時に、当該割込みのクリアを実施し、Halt命令を実行するよう記述されていてもよい。
図18は、インジェクションコードの構成例を示す模式図である。インジェクションコード70は、例えば、更新バイナリのプログラムROM407への書込み処理委譲のインジェクションコード701、アドレス変換テーブルのデータROM408への書込み処理委譲のインジェクションコード702、データROM408上のアドレス変換テーブルのロードのインジェクションコード703、アドレス変換有効化・無効化のインジェクションコード704、局所変数の初期値の更新のためのプログラムROM407の消去/書込み処理委譲のインジェクションコード705、大域変数の初期値の更新のためのデータROM408の消去/書込み処理委譲のインジェクションコード706、局所変数の初期値の更新のためのプログラムROM407の書込み処理委譲のインジェクションコード707、大域変数の初期値の更新のためのデータROM408の書込み処理委譲のインジェクションコード708、指定復元ポイントへのロールバック処理のインジェクションコード709、デフォルト動作へのロールバック処理のインジェクションコード710、更新キャンセル処理のインジェクションコード711、プログラムROM407のデフォルト面切り替えのインジェクションコード712、データROM408のデフォルト面切り替えのインジェクションコード713、更新差分コードのベリファイ処理(署名検証処理)委譲のインジェクションコード714、アドレス変換テーブルのベリファイ処理(署名検証処理)委譲のインジェクションコード715、データROM408上のBIOSコードのプログラムROM407への書込み処理委譲のインジェクションコード716、などから構成される。なお、各インジェクションコードの詳細については、後述する。
次に、インジェクションコードが実行されるまでの流れについて説明する。図19は、インジェクションコードが実行されるまでの流れを説明する模式図である。まず、管理サーバ30にて、インジェクションコードテンプレート群から作成対象のインジェクションコード(インジェクションコードAとする)のテンプレートを選択し、管理サーバ30のメモリ36上に展開する(図中(1)参照)。次に、管理サーバ30にて、インジェクションコードの引数定義に従い、インジェクションコードAへの実引数設定を実施する(図中(2)参照)。次に、実引数設定済みのインジェクションコードAを管理サーバ30のネットワーク接続部35などのネットワークI/Fからネットワーク15へ送信する(図中(3)参照)。次に、組込み機器40は、CANインターフェース409などのネットワークI/Fからネットワーク経由で実引数設定済みインジェクションコードAを受信する(図中(4)参照)。そして、例えばCANインターフェース409からの割込みでDMAコントローラ405またはCPU401上のデータ転送プログラムを起動し、SRAM406上の特定領域に実引数設定済みインジェクションコードAを配置する(図中(5)参照)。DMAコントローラ405を用いた場合は、配置完了を表す割込み通知後、CPU401上のデータ転送プログラムを用いた場合は、当該プログラムからの通知後、SRAM406の特定領域に配置した実引数設定済みインジェクションコードAが実行される。
以下、各インジェクションコードについて説明する。図20は、データROM408上のアドレス変換テーブルのロードを行うインジェクションコード703、更新差分コードのベリファイ処理委譲を行うインジェクションコード714、又はアドレス変換テーブルのベリファイ処理委譲を行うインジェクションコード715での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。
まず、ステップ2000(S2000)で、第一引数arg1にデータ先頭アドレスを配置する。データROM408上のアドレス変換テーブルのロードを行うインジェクションコード703の場合、読み出し元の先頭アドレスが、第一引数arg1に設定される。また、更新差分コードのベリファイ処理委譲を行うインジェクションコード714及びアドレス変換テーブルのベリファイ処理委譲を行うインジェクションコード715の場合、ベリファイする対象の先頭アドレスが第一引数arg1に設定される。次に、ステップ2001(S2001)で第二引数arg2にデータ長を配置する。データROM408上のアドレス変換テーブルのロードを行うインジェクションコード703の場合、読み出されるデータのデータ長が、第二引数arg2に設定される。また、更新差分コードのベリファイ処理委譲を行うインジェクションコード714及びアドレス変換テーブルのベリファイ処理委譲を行うインジェクションコード715の場合、ベリファイする対象のデータ長が第二引数arg2に設定される。次に、ステップ2002(S2002)で、対応するBIOSルーチンのコールを実施する。
ここで、データROM408上のアドレス変換テーブルのロードのインジェクションコード703で呼び出されるBIOSルーチンは、データROM408上のアドレス変換テーブルのロードを実施する。実行例は、例えば以下のようになる。アドレス変換テーブルがCANインターフェース409からの割込みによりDMA転送でSRAM406に配置された状態で、更にCANインターフェース409からの割込みでデータROM408上のアドレス変換テーブルのロードのインジェクションコード703がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。そして、当該BIOSルーチンでは、SRAM406に配置されたアドレス変換テーブルをアドレス変換器402に設定する。
更新差分コードのベリファイ処理委譲のインジェクションコード714で呼び出されるBIOSルーチンは、更新差分プログラムのオブジェクトコードの署名検証処理を実施する。実行例は、例えば以下のようになる。署名付きの更新差分プログラムのオブジェクトコードがCANインターフェース409からの割込みによりDMA転送でSRAM406に配置された状態で、更にCANインターフェース409からの割込みでこのコードのベリファイ処理委譲のインジェクションコード714がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。そして、当該BIOSルーチンでは、SRAM406に配置された更新差分プログラムのオブジェクトコードの署名検証処理を実施する。
アドレス変換テーブルのベリファイ処理委譲のインジェクションコード715で呼び出されるBIOSルーチンは、アドレス変換テーブルの署名検証処理を実施する。実行例は、例えば以下のようになる。署名付きのアドレス変換テーブルがCANインターフェース409からの割込みによりDMA転送でSRAM406に配置された状態で、更にCANインターフェース409からの割込みでアドレス変換テーブルのベリファイ処理委譲のインジェクションコード715がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、SRAM406に配置されたアドレス変換テーブルの署名検証を実施する。
図21は、アドレス変換テーブルのデータROM408への書込み処理委譲を行うインジェクションコード702での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。まず、ステップ2100(S2100)で、第一引数arg1に読出しデータの先頭アドレスを配置し、ステップ2101(S2101)で、第二引数arg2にデータ長を配置し、ステップ2102(S2102)で、第三引数arg3にデータ書込み先の先頭アドレスを配置し、ステップ2103(S2103)で、対応するBIOSルーチンのコールを実施する。ここで、アドレス変換テーブルのデータROM408への書込み処理委譲のインジェクションコード702で呼び出されるBIOSルーチンは、アドレス変換テーブルのデータROM408への書込み処理を実施する。実行例は、例えば以下のようになる。アドレス変換テーブルがCANインターフェース409からの割込みにてDMA転送でSRAM406に配置された状態で、更にCANインターフェース409からの割込みでアドレス変換テーブルのデータROM408への書込み処理委譲のインジェクションコード702がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、SRAM406に配置されたアドレス変換テーブルのデータROM408への書込み処理を実施する。
図22に更新差分プログラムのオブジェクトコードのプログラムROM407への書込み処理委譲を行うインジェクションコード701、又はデータROM408上に配置されたBIOSルーチンコードのプログラムROM407への書込み処理委譲を行うインジェクションコード716での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。まずステップ2200(S2200)で、第一引数arg1にプログラムROM407への書込み処理プログラム(ドライバ)が配置される、SRAM406上のアドレスを配置する。なお、書込み処理プログラムはプログラムROM407の特定のアドレスに予め配置されている。次に、ステップ2201(S2201)で、第二引数arg2に、この書込み処理プログラムへ渡す引数のフレームポインタを配置する。なお、ステップ2200及びステップ2201で設定される引数は、ROMのドライバを動作させるのに必要な引数である。これは、プログラムROM407の書き換えをSRAM406上で実行する必要があることに起因している。続いて、ステップ2202(S2202)で、第三引数arg3に読出しデータの先頭アドレスを配置し、ステップ2203(S2203)で、第四引数arg4に読み出しデータのデータ長を配置し、ステップ2204(S2204)で、第五引数arg5にデータ書込み先の先頭アドレスを配置する。そして、ステップ2205(S2205)で、対応するBIOSルーチンのコールを実施する。
ここで、更新差分プログラムのオブジェクトコードのプログラムROM407への書込み処理委譲のインジェクションコード701で呼び出されるBIOSルーチンは、プログラムROM407への書込み処理プログラムを第一引数に指定されたSRAM406のアドレスに配置し、第二引数に指定されたフレームポインタをこの書込み処理プログラムへ引き渡し、この書込み処理プログラムを実行する事で、更新差分プログラムのオブジェクトコードのプログラムROM407への書込み処理を実施する。実行例は、例えば以下のようになる。更新差分プログラムのオブジェクトコードがCANインターフェース409からの割込みにてDMA転送でSRAM406に配置された状態で、更にCANインターフェース409からの割込みで更新差分プログラムのオブジェクトコードのプログラムROM407への書込み処理委譲のインジェクションコード701がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、SRAM406に配置された更新差分プログラムのオブジェクトコードのプログラムROM407への書込み処理を実施する。ここで、SRAM406に配置されたプログラムROM407への書込み処理プログラムは、SRAM406をワークメモリとして用いる専用ハードウェアとして実現されていても良い。
データROM408上に配置されたBIOSルーチンコードのプログラムROM407への書込み処理委譲で呼び出されるBIOSルーチンは、プログラムROM407への書込み処理プログラムを第一引数に指定されたSRAM406のアドレスに配置し、第二引数に指定されたフレームポインタをこの書込み処理プログラムへ引き渡し、この書込み処理プログラムを実行する事で、データROM408上に配置されたBIOSルーチンコードのプログラムROM407への書込み処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みでデータROM408上に配置されたBIOSルーチンコードのプログラムROM407への書込み処理委譲のインジェクションコード716がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、データROM408上に配置されたBIOSルーチンコードのプログラムROM407への書込み処理を実施する。
図23は、デフォルトプログラム動作へのロールバック処理委譲を行うインジェクションコード710、又は更新キャンセル処理委譲を行うインジェクションコード711での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。ステップ2300(S2300)で、対応するBIOSルーチンのコールを実施する。デフォルトプログラム動作へのロールバック処理委譲のインジェクションコード710で呼び出されるBIOSルーチンは、デフォルトプログラム動作へのロールバック処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みでデフォルトプログラム動作へのロールバック処理委譲のインジェクションコード710がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、デフォルトプログラム動作へのロールバック処理を実施する。ここで、デフォルトプログラム動作へのロールバック処理では、例えば、次の再起動でのブート時にアドレス変換器402の無効化が実施されるよう設定を行う。更新キャンセル処理委譲のインジェクションコード711で呼び出されるBIOSルーチンは、更新キャンセル処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みで更新キャンセル処理委譲のインジェクションコード711がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、更新キャンセル処理を実施する。ここで、更新キャンセル処理では、例えば、プログラムROM407又はデータROM408への書込みがどこまで成されたかの確認をし、書込まれた部分の消去を実施し、更新動作前にプログラム状態を退避していた場合は、プログラム状態の復旧を実施し、退避した状態からのプログラムの再開処理を実施する。
図24は、指定復元ポイントへのロールバック処理委譲を行うインジェクションコード709での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。なお、ロールバックに際し、例えば以下のような前提がある。すなわち、既に複数回、更新差分コードがプログラムROM407に配置されている事、更新差分コードのうち、初期値付き局所変数と大域変数を除くプログラムは上書きされる事なくプログラムROM407に配置されたままである事、及びアドレス変換テーブルがデータROM408に格納されているのと同様にデータROM408にこれまでの更新差分コードに含まれた初期値付き局所変数や大域変数が格納されている事、が前提となっている。ここで、どの更新差分コード(初期値付き局所変数と大域変数を除くプログラム)にロールバックするかは、対応するアドレス変換テーブルを設定する事で可能となる。ただし、初期値付き局所変数と大域変数に関しては、何度かの更新で既に上書きされている可能性があり、ロールバックの際に書き戻す必要がある。
ステップ2400(S2400)で、第一引数arg1に復元ポイントに対応するアドレス変換テーブルの先頭アドレスを配置する。ステップ2401(S2401)で、第二引数arg2に復元ポイントに対応するアドレス変換テーブルのエントリ数を配置する。ステップ2402(S2402)で、復元ポイントに対応するアドレス変換テーブルの設定を実施するBIOSルーチンAのコールを実施する。そして、以下のステップ2403〜2407を必要回数だけ実施する。ステップ2403(S2403)で、第一引数arg1に消去ブロック番号を配置する。この消去ブロック番号は、変数更新を実現するためのプログラムROM407又はデータROM408の消去対象のブロック番号である。ステップ2404(S2404)で、第二引数arg2にロールバック対象の差分プログラム内の変数更新部分に対応するコードが配置されているデータROM408上の領域の先頭アドレスを配置する。すなわち、この先頭アドレスは、読み出しデータの先頭アドレスである。ステップ2405(S2405)で、第三引数arg3に読み出しデータのデータ長を配置する。ステップ2406(S2406)で、第四引数arg4にデータ書込み先の先頭アドレスを配置する。ステップ2407(S2407)で、指定復元ポイントでの初期値付き局所変数や大域変数の配置状態の実現のためのプログラムROM407及びデータROM408の消去及び書込みを行うBIOSルーチンBのコールを実施する。上述のような引数の設定により、データROM408に格納された、これまでの更新差分コードに含まれた初期値付き局所変数や大域変数のうち書き込み対象となるものが、書き込まれる。具体的には、局所変数の場合にはプログラム実行のために指定されたプログラムROM407上のアドレスを先頭アドレスとする領域へと書き込まれ、大域変数の場合にはプログラム実行のために指定されたデータROM408上のアドレスを先頭アドレスとする領域へと書込まれる。ここで、指定復元ポイントへのロールバック処理委譲のインジェクションコード709で呼び出されるBIOSルーチンは、指定復元ポイントへのロールバック処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みで指定復元ポイントへのロールバック処理委譲のインジェクションコード709がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、指定復元ポイントへのロールバック処理を実施する。ここで、指定復元ポイントへのロールバック処理では、先ず最初に指定された復元ポイントに対応するアドレス変換テーブルをアドレス変換器402に設定し、次いで、指定復元ポイントでの初期値付き局所変数や大域変数の配置状態の実現のためのプログラムROM407及びデータROM408の消去及び書込み処理を実施する。
図25は、プログラムROM407のデフォルトプログラム配置面の切り替え処理委譲を行うインジェクションコード712、又はデータROM408のデフォルトプログラム配置面の切り替え処理委譲を行うインジェクションコード713での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。ステップ2500(S2500)で、第一引数arg1にデフォルトとして使用するROMの先頭アドレスを配置し、ステップ2501(S2501)で、対応するBIOSルーチンのコールを実施する。ここで、プログラムROM407のデフォルトプログラム配置面の切り替え処理委譲のインジェクションコード712で呼び出されるBIOSルーチンは、プログラムROM407のデフォルトプログラム配置面の切り替え処理を実施する。また、データROM408のデフォルトプログラム配置面の切り替え処理委譲のインジェクションコード713で呼び出されるBIOSルーチンは、データROM408のデフォルトプログラム配置面の切り替え処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みでプログラムROM407及びデータROM408のデフォルトプログラム配置面の切り替え処理委譲のインジェクションコード712、713がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、プログラムROM407及びデータROM408のデフォルトプログラム配置面の切り替え処理を実施する。
図26は、大域変数更新の実現のためのデータROM408の消去及び書込み処理委譲を行うインジェクションコード706での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。ステップ2600(S2600)で、第一引数arg1に消去ブロック番号を配置する。この消去ブロック番号は、変数更新を実現するためのデータROM408の消去対象のブロック番号である。ステップ2601(S2601)で、第二引数arg2にロールバック対象の差分プログラム内の大域変数更新部分に対応するコードが配置されているデータROM408またはSRAM406上の領域の先頭アドレスを配置する。すなわち、この先頭アドレスは、読み出しデータの先頭アドレスである。ステップ2602(S2602)で、第三引数arg3に読み出しデータのデータ長を配置する。ステップ2603(S2603)で、第四引数arg4にデータ書込み先の先頭アドレスを配置する。ステップ2604(S2604)で、対応するBIOSルーチンのコールを実施する。ここで、大域変数更新の実現のためのデータROM408の消去及び書込み処理委譲のインジェクションコード706で呼び出されるBIOSルーチンは、大域変数更新の実現のためのデータROM408の消去及び書込み処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みで大域変数更新の実現のためのデータROM408の消去及び書込み処理委譲のインジェクションコード706がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、大域変数更新の実現のためのデータROM408の消去及び書込み処理を実施する。
図27は、大域変数更新の実現のためのデータROM408の書込み処理委譲を行うインジェクションコード708での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。ステップ2700(S2700)で、第一引数arg1にロールバック対象の差分プログラム内の大域変数更新部分に対応するコードが配置されている領域(データROM408またはSRAM406)上の先頭アドレスを配置する。すなわち、この先頭アドレスは、読み出しデータの先頭アドレスである。ステップ2701(S2701)で、第二引数arg2に読み出しデータのデータ長を配置する。ステップ2702(S2702)で、第三引数arg3にデータ書込み先の先頭アドレスを配置する。ステップ2703(S2703)で、対応するBIOSルーチンのコールを実施する。ここで、大域変数更新の実現のためのデータROM408の書込み処理委譲のインジェクションコード708で呼び出されるBIOSルーチンは、大域変数更新の実現のためのデータROM408の書込み処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みで大域変数更新の実現のためのデータROM408の書込み処理委譲のインジェクションコード708がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、大域変数更新の実現のためのデータROM408の書込み処理を実施する。
図28は、局所変数更新実現のためのプログラムROM407の消去及び書込み処理委譲を行うインジェクションコード705での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。まず、ステップ2800(S2800)で、第一引数arg1に、プログラムROM407に対する消去及び書込み処理プログラム(ドライバ)が配置される、SRAM406上のアドレスを配置する。なお、消去及び書込み処理プログラムはプログラムROM407の特定のアドレスに予め配置されている。次に、ステップ2801(S2801)で、第二引数arg2に、この消去及び書込み処理プログラムへ渡す引数のフレームポインタを配置する。なお、ステップ2800及びステップ2801で設定される引数は、ROMのドライバを動作させるのに必要な引数である。これは、プログラムROM407の書き換えをSRAM406上で実行する必要があることに起因している。続いて、ステップ2802(S2802)で、第三引数arg3に消去ブロック番号を配置する。この消去ブロック番号は、変数更新を実現するためのプログラムROM407の消去対象のブロック番号である。ステップ2803(S2803)で、第四引数arg4に、ロールバック対象の差分プログラム内の局所変数更新部分に対応するコードが配置されているデータROM408またはSRAM406上の領域の先頭アドレスを配置する。すなわち、この先頭アドレスは、読み出しデータの先頭アドレスである。ステップ2804(S2804)で、第五引数arg5に読み出しデータのデータ長を配置する。ステップ2805(S2805)で、第六引数arg6にデータ書込み先の先頭アドレスを配置する。ステップ2806(S2806)で、対応するBIOSルーチンのコールを実施する。ここで、局所変数更新の実現のためのプログラムROM407の消去及び書込み処理委譲のインジェクションコード705で呼び出されるBIOSルーチンは、プログラムROM407に対する消去及び書込みプログラムを第一引数に指定されたSRAM406のアドレスに配置し、第二引数に指定されたフレームポインタをこの消去及び書込みプログラムへ引き渡し、この消去及び書込みプログラムを実行する事で、局所変数更新の実現のためのプログラムROM407の消去及び書込み処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みで局所変数更新の実現のためのプログラムROM407の消去及び書込み処理委譲のインジェクションコード705がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、局所変数更新の実現のためのプログラムROM407の消去及び書込み処理を実施する。ここで、SRAM406に配置されたプログラムROM407に対する消去及び書込みプログラムは、SRAM406をワークメモリとして用いる専用ハードウェアとして実現されていても良い。
図29は、局所変数更新の実現のためのプログラムROM407の書込み処理委譲を行うインジェクションコード707での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。まず、ステップ2900(S2900)で、第一引数arg1にプログラムROM407への書込み処理プログラム(ドライバ)が配置される、SRAM406上のアドレスを配置する。なお、書込み処理プログラムはプログラムROM407の特定のアドレスに予め配置されている。次に、ステップ2901(S2901)で、第二引数arg2に、この書込み処理プログラムへ渡す引数のフレームポインタを配置する。なお、ステップ2900及びステップ2901で設定される引数は、ROMのドライバを動作させるのに必要な引数である。これは、プログラムROM407の書き換えをSRAM406上で実行する必要があることに起因している。続いて、ステップ2902(S2902)で、第三引数arg3にロールバック対象の差分プログラム内の局所変数更新部分に対応するコードが配置されているデータROM408またはSRAM406上の領域の先頭アドレスを配置する。すなわち、この先頭アドレスは、読み出しデータの先頭アドレスである。ステップ2903(S2903)で、第四引数arg4に読み出しデータのデータ長を配置する。ステップ2904(S2904)で、第五引数arg5にデータ書込み先の先頭アドレスを配置する。ステップ2905(S2905)で、対応するBIOSルーチンのコールを実施する。ここで、局所変数更新の実現のためのプログラムROM407の書込み処理委譲のインジェクションコード707で呼び出されるBIOSルーチンは、書込み処理プログラムを第一引数に指定されたSRAM406のアドレスに配置し、第二引数に指定されたフレームポインタをこの書込み処理プログラムへ引き渡し、この書込み処理プログラムを実行する事で、局所変数更新の実現のためのプログラムROM407の書込み処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みで局所変数更新の実現のためのプログラムROM407の書込み処理委譲のインジェクションコード707がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、局所変数更新の実現のためのプログラムROM407の書込み処理を実施する。ここで、SRAM406に配置された書込み処理プログラムは、SRAM406をワークメモリとして用いる専用ハードウェアとして実現されていても良い。
図30は、アドレス変換有効化・無効化処理委譲を行うインジェクションコード704での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。ステップ3000(S3000)で、第一引数arg1にアドレス変換器402の有効化又は無効化を指定する値を配置し、ステップ3001(S3001)で、対応するBIOSルーチンのコールを実施する。ここで、アドレス変換器の有効化・無効化処理委譲のインジェクションコード704で呼び出されるBIOSルーチンは、アドレス変換器の有効化又は無効化処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みでアドレス変換有効化・無効化処理委譲のインジェクションコード704がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、アドレス変換器の有効化又は無効化処理を実施する。
以上、各種インジェクションコードについて説明した。インジェクションコードの配置及び実行、並びにインジェクションコードからコールされるBIOSルーチンの実行は、図5の構成の場合、CPU401によって行われる。一方、図6の構成の場合、メインCPU401又はサブCPU411の何れで実行しても良い。サブCPU411で実行する場合、BIOSコードをプログラムROM412に配置しても良い。プログラムROM412にBIOSコードを配置し、サブCPU411でBIOSルーチンを実行する場合であって、プログラムROM407やデータROM408への転送路が図6での破線で示すように二重化されている場合、メインCPU401で現在実行中のプログラムへの機能及び実行動作サイクルに一切影響を与える事なく、現在実行中プログラムの動作中に、更新情報ファイル50をプログラムROM407やデータROM408に動的に配置可能となる。また、破線で示すような伝送路の二重化がされていない場合は、各種BIOSコード実行によるプログラムROM407やデータROM408へのサブCPU411からのアクセスを、プリエンプティブな最低優先度アクセスとする事で、メインCPU401での現在実行中のプログラムの実行動作への影響が大幅に低減可能となる。
次に、インジェクションコードの構成例について説明する。図31A、31Bは、インジェクションコードの構成例を示し、図31Aは、BIOSルーチンを関数呼び出しで実行する場合に対応する例を示し、図31Bは、BIOSルーチンへのJump命令によりBIOSルーチンを実行する場合に対応する例を示す。なお、図31A及び図31Bは、いずれも、更新バイナリのプログラムROM407への書込み処理委譲のインジェクションコード701が、一例として示されている。BIOSルーチンを関数呼び出しで実行する場合、BIOS引数へのフレームポインタの設定とBIOSルーチンを関数呼び出し命令とでなるBIOSルーチン関数呼び出し部分816と、BIOSルーチンへの引数の配置部分817とからなる(図31A参照)。これに対し、BIOSルーチンへのJump命令によりBIOSルーチンを実行する場合、BIOS引数へのフレームポインタの設定とJump命令とからなるBIOSルーチン関数呼び出し部分818と、BIOSルーチンへの引数の配置部分819とからなる(図31B参照)。
次に、BIOSコードの配置例について説明する。図32A、32Bは、BIOSコードの3面のプログラムROM407への配置例を示す模式図であり、図32AはBIOSコードの更新を伴わないプログラムの更新の場合に対応した例を示し、図32BはBIOSコードの更新を含むデフォルトプログラム全体の更新の場合に対応した例を示している。
まず、図32Aを参照してBIOSコードの更新を伴わないプログラムの更新の場合について説明する。図32Aでは、3面ともに同じBIOSコードが配置されており、A面にはデフォルトプログラムが配置され、B面には現在実行中の差分コードが配置されている。そして、A面及びB面において、デフォルトプログラムから更新されたプログラムが実行されている。ここで、C面に新たな更新差分プログラムが配置されることを考える。C面への更新差分プログラムの配置では、C面に配置されたBIOSコードが用いられる。C面への更新差分プログラムの配置では、SRAM406に展開されたプログラムROM書込みドライバが書込み実行する事で、A面及びB面へのCPU401からのアクセスを阻害する事なく、C面への更新差分プログラムの配置が可能となる。すなわち、A面及びB面でのプログラム実行中の、C面への更新差分プログラムの配置が可能となる。尚、B面もC面も、配置される更新差分プログラムは、A面に配置されたデフォルトプログラムに対する更新差分プログラムとなる。ここで、B面に配置する更新差分プログラムは、既にB面に配置されている更新差分プログラムを再利用して構成しても良い。また、C面に配置する更新差分プログラムは、既にC面に配置されている更新差分プログラムを再利用して構成しても良い。
次に、図32Bを参照して、BIOSコードの更新を含むデフォルトプログラム全体の更新の場合について説明する。図32Bは、A面及びC面を消去し、B面に新デフォルトプログラムと新BIOSコードを配置後、B面に配置された新BIOSコードをA面とC面にコピーして配置した状態を示している。これについて、次のような処理が行われる。まず、B面の消去を、プログラムROM407の消去処理委譲のインジェクションコードからプログラムROM407の消去処理BIOSを呼び出して実行する事で実施する。次に、B面への新デフォルトプログラム及び新BIOSコードの配置を、プログラムROM書込み処理委譲のインジェクションコードからプログラムROM書込み処理を呼び出して実行する事で実施する。そして、デフォルト面切り替え処理委譲のインジェクションコード712、713からデフォルト面切り替え処理BIOSを呼び出して実行する事で、再起動時の開始アドレスをB面の先頭とする。プログラムROM407のA面及びC面の再起動中の消去を実行するためのプログラムROM消去委譲のインジェクションコードと、A面及びC面への新BIOSコードの再起動中のコピーを実行するためのプログラムROM書込み処理委譲のインジェクションコードを、再起動前にSRAM406からデータROM408に配置し、再起動中にデータROM408から上記2つのインジェクションコードをSRAM406へ展開し、実行する。なお、インジェクションコードを一旦、データROM408に配置するのは、再起動の際にSRAM406の記憶内容が失われてしまうためである。再起動後には、図32Bに示すプログラム配置構造が実現され、プログラム開始アドレスがB面の先頭に設定され、B面の新デフォルトプログラムの実行がなされる。なお、新BIOSは、データROM408に一旦配置した後、適当なタイミングでプログラムROM407に展開されてもよい。
次に更新情報ファイル50の作成手順について説明する。図33A、33Bは、差分更新に対応する、更新バイナリコードと更新情報の生成の処理の一例を示すフローチャートである。本フローは、開発環境20のデータ処理部22にて実行される。下記のフローは、具体的には、例えば、データ処理部22のメモリに格納されたプログラムをデータ処理部22の処理装置が実行することにより実現される。
ステップ3300(S3300)で、データ処理部22は、変数flagに初期値0を代入する。
ステップ3301(S3301)で、データ処理部22は、ロールバックポイントの指定があるか否か判定する。指定がある場合は、処理がステップ3302へ移行する。指定がない場合、処理は、ステップ3304へ処理を移行する。
ステップ3302(S3302)で、データ処理部22は、ユーザからのロールバックポイントの指定の入力を受付けて受付けた内容を格納する。
ステップ3303(S3303)で、データ処理部22は、変数flagの値を1に更新する。
ステップ3304(S3304)で、データ処理部22は、更新前後のプログラム(アドレス未解決)を比較して差分プログラムを抽出する。本抽出では、関数構造を考慮しても良い。特に、何れか一方にのみ含まれる関数をインライン(Inline)展開せずに、コールグラフ(Call Graph)における関数名の対応を関数の対応構造として、各対応する関数毎に差分を抽出しても良い。
ステップ3305(S3305)で、データ処理部22は、差分コードを構成するコードブロック(置換ブロック)がN個以下になるよう、コードブロックを、2つのプログラム間で変化がない部分を含み得る方法でマージする。なお、Nは、例えば、アドレス変換テーブルの設定可能なエントリ数の最大値と、更新差分プログラムが配置されるメモリ領域におけるセグメント数の小さい方の値である。マージ処理の具体的な例については、図35A、35Bを参照して説明する。
ステップ3306(S3306)で、データ処理部22は、差分コードを構成するコードブロック数(置換ブロック数)を変数Mに代入する。
ステップ3307(S3307)で、データ処理部22は、変数iを1からMに1ずつ増加させながら、ステップ3308をM回繰り返す。
ステップ3308(S3308)で、データ処理部22は、リンクによるアドレス解決済みのプログラムである更新前プログラム(デフォルトプログラム)における、差分コードの第i番目のコードブロックの先頭アドレスを抽出する。この先頭アドレスは、更新の際の変換元のアドレスに相当する。データ処理部22は、このコードブロックがデフォルトプログラム内の関数を参照する場合、当該関数の呼び出しアドレスを抽出する。
ステップ3309(S3309)で、データ処理部22は、アドレス変換テーブルに設定するセグメントサイズを決定する。なお、セグメントサイズは、変換対象となる上位アドレスのビット数に相当する。セグメントサイズの決定では、差分コードを構成する各コードブロックのサイズを考慮しても良い。例えば、サイズの最大値、中央値、又は平均を用いても良い。なお、セグメントサイズを決定する上位アドレスのビット数が少ないと、大きな差分コードの配置が特段の工夫なく配置可能となる一方、配置可能な差分コードブロックの数は少なくなる。これに対し、セグメントサイズを決定する上位アドレスのビット数が大きいと、図11A、図11B、又は図14に示したような工夫が配置の際に必要となるが、アドレス変換テーブルのエントリ数を上限として、より多くの差分コードブロックを配置することが可能となる。
ステップ3310(S3310)で、データ処理部22は、開発環境で保持している、更新対象の組込み機器40のROMの使用状況を参照し、差分プログラムを構成する各コードブロックの配置位置(先頭アドレス)を決定する。配置位置(先頭アドレス)の決定では、ステップ3309で求めたセグメントサイズ毎に高々1つのコードブロックが配置されるように決定を行うものとする。ここで、差分コードを構成するコードブロックの配置において、プログラムROM407の領域を再利用しても良い。プログラムROM407の再利用対象領域の消去回数が、どの領域でも均一となるように工夫しても良い。また、消去回数が規定回数を超える場合に、警告を発しても良い。本警告に基づき、ユーザは、差分コードによる更新ではなく、図34に示す全体プログラム更新へと、更新内容を変更しても良いし、次回の更新を全体プログラム更新としても良い。このように消去回数を参照するのは、以下の点で利点がある。すなわち、例えばROMとしてフラッシュメモリが用いられる場合、フラッシュメモリは消去書込みで劣化するため、特定領域に集中的に消去や書込みが発生しないよう工夫する事で、フラッシュメモリの寿命を延命することが可能となる。また、品質保証の観点から、書き換え回数の所定の上限を越えての書換えが起らないよう管理することが好ましい。
ステップ3311(S3311)で、データ処理部22は、更新前プログラム(リンク済)のシンボル情報を参照し、差分プログラムを構成する各コードブロックから参照される、アドレス解決済みシンボルのアドレス値を求める。そして、データ処理部22は、アドレス未解決シンボルやアドレス未解決コードのアドレス解決を、ステップ3310で決定した各コードブロックの先頭アドレスを用いて実施する。
ステップ3312(S3312)で、データ処理部22は、アドレス解決済みの差分プログラムを生成する。
ステップ3313(S3313)で、データ処理部22は、変数jを1からMへ1ずつ増加させながら、ステップ3314を繰り返す。
ステップ3314(S3314)で、データ処理部22は、差分プログラムを構成する各コードブロックjについて、ステップ3310で求めた先頭アドレスを変換後のアドレスとして抽出する。
ステップ3315(S3315)で、データ処理部22は、各コードブロックに対して、ステップ3308で求めた変換前アドレスとステップ3314で抽出した変換後のアドレスを対応表としてマージし、アドレス変換表を生成する。
ステップ3316(S3316)で、データ処理部22は、アドレス変換テーブルのデータROM408への書込み処理委譲のインジェクションコード702を生成する。
ステップ3317(S3317)で、データ処理部22は、更新バイナリのプログラムROMへの書込み処理委譲のインジェクションコード701を生成する。
ステップ3318(S3318)で、データ処理部22は、変数flagの値が1に一致するか否か判定する。一致する場合、処理はステップ3319へ移行し、一致しない場合、処理は終了する。
ステップ3319(S3319)で、データ処理部22は、指定復元ポイントへのロールバック処理委譲のインジェクションコード709を生成する。ここで、本インジェクションコードは、例えば差分プログラム更新にて途中停止やセキュリティ上の異常が発生した場合に実行される。また、本インジェクションコードから実行したロールバックBIOSコードの実行完了時に、更新キャンセルBIOSコード呼び出しが実行されるとしても良い。
図34は、全体プログラム更新に対応する、更新バイナリコードと更新情報の生成の処理の一例を示すフローチャートである。本フローは、開発環境20のデータ処理部22にて実行される。下記のフローは、具体的には、例えば、データ処理部22のメモリに格納されたプログラムをデータ処理部22の処理装置が実行することにより実現される。
ステップ3400(S3400)で、データ処理部22は、変数flagに初期値0を代入する。
ステップ3401(S3401)で、データ処理部22は、ロールバックの指定があるか否か判定する。指定がある場合、処理はステップ3402へ移行し、指定がない場合、処理はステップ3404へ移行する。
ステップ3402(S3402)で、データ処理部22は、ユーザからのロールバックポイントの指定の入力を受付けて受付けた内容を格納する。
ステップ3403(S3403)で、データ処理部22は、変数flagの値を1に更新する。
ステップ3404(S3404)で、データ処理部22は、更新後のプログラムのアドレス解決(リンク)を実施し、更新バイナリを生成する。
ステップ3405(S3405)で、データ処理部22は、BIOSコードのデータROM408からプログラムROM407への書込みがあるか否か判定する。書込みがある場合、処理はステップ3406へ移行し、無い場合、処理はステップ3407へ移行する。
ステップ3406(S3406)で、データ処理部22は、データROM408に格納されているBIOSコードのプログラムROM407への書込み処理委譲のインジェクションコード716を生成する。ここで、BIOSコードのプログラムROM407への書込みは、一部または全てのプログラムROM407に未だBIOSコードが配置されていない場合に実施される。3面のプログラムROM407の場合、差分コードの書込み先のプログラムROM407の面にBIOSコードが配置されていない場合、このプログラムROM面へBIOSコードを書込むこととなる。これにより、例えば予めデータROM408に格納されていたBIOSコードが、プログラムROM407に書き込まれることとなる。
ステップ3407(S3407)で、データ処理部22は、更新バイナリのプログラムROM書込み処理委譲のインジェクションコード701を生成する。ここでは、全体プログラム更新のため、本インジェクションコードは、復元ポイント無効化のためのデータROM408の消去を実行するBIOSコードの呼び出しも実施するものとする。
ステップ3408(S3408)で、データ処理部22は、プログラムROM407のデフォルト面切り替えのためのインジェクションコード712、及びデータROM408のデフォルト面切り替えのためのインジェクションコード713を生成する。
ステップ3409(S3409)で、データ処理部22は、アドレス変換テーブルの無効化を行うインジェクションコードを生成する。
ステップ3410(S3410)で、データ処理部22は、変数flagの値が1か否か比較する。一致する場合、処理はステップ3411へ移行し、不一致の場合、処理は終了する。
ステップ3411(S3411)で、データ処理部22は、デフォルト動作へのロールバック処理委譲のインジェクションコード710を生成する。ここで、本インジェクションコードは、差分プログラム更新にて途中停止やセキュリティ上の異常が発生した場合に実行される。また、本インジェクションコードから実行したロールバックBIOSコード実行完了時に、更新キャンセルBIOSコード呼び出しが実行されるとしても良い。
次に、図33Aの処理ステップ3305の詳細について説明する。図35A、35Bは、図33Aのステップ3305における差分プログラムのマージの処理の一例を示すフローチャートである。なお、以下の説明において、Nは、プログラムROM407用のアドレス変換テーブルのエントリ数、すなわちアドレス変換テーブルに設定可能なアドレス変換の個数の最大値である。また、Mは、データROM408用のアドレス変換テーブルのエントリ数、すなわちアドレス変換テーブルに設定可能なアドレス変換の個数の最大値である。以下に示されるように、プログラムROM407若しくはデータROM408に配置されたデータテーブルの更新、又は新規データテーブルの追加により必要となる各種インジェクションコードの生成の実施後、差分コードを構成するコードブロックが規定個数以下のコードブロック数となるようマージ処理を実施する。なお、データテーブルとは、初期値付き局所変数又は大域変数を示すものである。ここで、同一セグメント領域内に、更新される複数のデータテーブルが配置されている場合、それらを纏めて、1つのデータテーブルとして扱うものとする。特に、図11A、11Bに示したアドレス変換処理を援用する場合、同一セグメント領域内に先頭アドレスが配置されている複数の被更新データテーブルを1つのデータテーブルとして扱っても良い。以下、図35A、35Bの説明において、データテーブルは、上述のようにセグメント毎に一つにまとめられたデータテーブルを示すものとする。また、新規データテーブルに関しては、セグメント数が最小となる配置が既に実施されているものとする。具体的には、ナップサック問題を解く事でこれが実現される。なお、セグメント数が最小となる配置の一例としては、例えば複数の新規初期値付き局所変数(配列)が同一関数内に記載されている場合に、これらを可能な限り同一セグメント内に配置することが挙げられる。また、セグメント内の一纏めとなったデータテーブルの構成要素(すなわち、結合前のデータテーブル)の夫々の先頭アドレスは、既に算出されているものとする。これら先頭アドレスは、図33Aのステップ3312でのリンク済み差分プログラムの生成の際に参照される。
ステップ3500(S3500)で、データ処理部22は、プログラムROM407への書込みデータテーブル数をn、データROMへの書込みデータテーブル数をmとする。なお、書込みデータテーブル数とは、データテーブルの書き換え又は追加により、書き込まれるデータテーブルの数である。
ステップ3501(S3501)で、データ処理部22は、N>nかつM≧mを満たすか否か判定する。成立していれば、処理はステップ3503へ移行し、不成立であれば処理はステップ3502へ移行する。
ステップ3502(S3502)で、アドレス変換テーブルのエントリ数を超えているため、データ処理部22は、ステップ3501における違反があった書込みに関し、書き込まれるデータテーブルが含まれる隣接するセグメントのマージ処理を実施する。データ処理部22は、隣接したものがなければ、書き込まれるデータテーブルが含まれる一番近いセグメントのマージを実施する。ここで、データ処理部22は、ユーザには差分更新が不可能である旨を通知し、セグメントサイズを超えたデータテーブルの更新を許可するか否か問合せる。許可された場合、処理はステップ3500へ移行し、許可されない場合、処理は中断する。中断した場合は、ユーザが更新プログラムを修正し、再度、更新準備処理を実施するか、プログラム全体更新に方針転換を行う事となる。
ステップ3503(S3503)で、データ処理部22は、差分プログラムにおいて、プログラムROM407上の既存データテーブルに対する変更があるか否かを判定する。変更がある場合、処理はステップ3504へ移行し、変更がない場合、処理はステップ3510へ処理を移行する。
ステップ3504(S3504)で、データ処理部22は、変更のあるデータテーブル数だけ、ステップ3505〜ステップ3509の処理を繰り返す。
ステップ3505(S3505)で、データ処理部22は、変更後のデータテーブルを配置する、プログラムROM407上の先頭アドレスを算出する。先頭アドレスの算出では、空き領域を優先的に利用する。十分な空きがない場合は、前回以前の更新で更新対象のデータテーブルが配置されているときは、その先頭アドレスを再利用するかをユーザに確認し、ユーザが許可した場合、再利用を考慮した先頭アドレスの算出が実施される。ユーザが許可しない場合や、再利用対象がない場合は、処理が中断される。中断した場合は、ユーザが更新プログラムを修正し、再度、更新準備処理を実施するか、プログラム全体更新に方針転換を行う事となる。
ステップ3506(S3506)で、データ処理部22は、算出したアドレスに既にデータテーブルが含まれている場合、算出したアドレスを含む消去ブロック番号を算出する。
ステップ3507(S3507)で、データ処理部22は、消去対象のブロックがある場合は、そのブロック内のデータテーブル変数を、更新内容も含めて書込みデータとする。データ処理部22は、消去対象のブロックがない場合は、変更のあるデータテーブル全体を書込みデータとする。また、データ処理部22は更新により書き込まれるデータテーブルのデータ長も算出する。
ステップ3508(S3508)で、データ処理部22は、ROM消去及び書込みのドライバを動作させるための以下の引数を用いて、プログラムROM407の消去/書込み処理委譲のインジェクションコード705を生成する。すなわち、当該ドライバプログラムの配置アドレス、当該ドライバへ渡すフレームポインタ、ステップ3506で算出された消去対象のブロック番号、更新により書き込まれるデータの内蔵メモリでの配置位置の先頭アドレス、更新により書き込まれるデータのデータ長、及びステップ3505で算出されたプログラムROM407上の先頭アドレスが引数として用いられる。なお、上記及び下記の説明で述べられる内蔵メモリは、一例としては、SRAM406であるが、書き込まれるデータが存在するメモリであればよく、例えばデータROM408であってもよい。ここで、ステップ3506で消去対象のブロックがないと判断された場合、データ処理部22は、消去対象のブロック番号を伴わない、プログラムROM書込み処理委譲のインジェクションコード707を生成する。
ステップ3509(S3509)で、データ処理部22は、変数Nに、現在のNの値から1を減じた値を代入する。
ステップ3510(S3510)で、データ処理部22は、差分プログラムにプログラムROM407上の既存データテーブルに対する変数の追加があるか、または新規データテーブルの追加があるか、を判定する。追加がある場合、処理はステップ3511へ移行し、変更がない場合、処理はステップ3516へ移行する。ここで、既存データテーブルへの変数の追加が行われた場合、その変数へのアクセスは差分コードのみから行われるため、以降、これを新規データテーブルとして扱う。つまり、既存データテーブルに変数追加のみが行われている場合、既存データテーブルはそのまま変更する事なく、追加部分のみを新規データテーブルとして、更新差分バイナリを生成する。
ステップ3511(S3511)で、データ処理部22は、追加のあるテーブル数だけ、ステップ3512〜ステップ3515の処理を繰り返す。
ステップ3512(S3512)で、データ処理部22は、追加するテーブルを配置する、プログラムROM407上の先頭アドレスを算出する。具体的には、追加する各データテーブルの配置状況は、セグメント数が最小となるよう、ナップサック問題を解くなどして決定されているため、データ処理部22は、追加するデータテーブルが含まれるセグメントの先頭アドレスを決定する。また、データ処理部22は、追加するデータテーブルのデータ長も算出する。ここで、先頭アドレスの算出では、空き領域を優先的に利用するが、十分な空きがない場合は、処理を中断する。中断した場合は、ユーザが更新プログラムを修正し、再度、更新準備処理を実施するか、プログラム全体更新に方針転換を行う事となる。
ステップ3513(S3513)で、データ処理部22は、ステップ3512で決定した先頭アドレスを持つセグメントに含まれるデータテーブルを書込みデータとする。
ステップ3514(S3514)で、データ処理部22は、ROM消去・書込みドライバを動作させるための以下の引数を用いて、プログラムROM書込み処理委譲のインジェクションコード707を生成する。すなわち、当該ドライバプログラムの配置アドレス、当該ドライバへ渡すフレームポインタ、書込みデータの内蔵メモリでの配置位置の先頭アドレス、書込みデータのデータ長、及びステップ3512で算出したプログラムROM407上の先頭アドレスが引数として用いられる。
ステップ3515(S3515)で、データ処理部22は、変数Nに、現在のNの値から1を減じた値を代入する。
ステップ3516(S3516)で、データ処理部22は、差分プログラムにデータROM408上の既存データテーブルに対する変更があるか否かを判定する。変更がある場合、処理はステップ3517へ移行し、変更がない場合、処理はステップ3523へ移行する。
ステップ3517(S3517)で、データ処理部22は、変更のあるテーブル数だけ、ステップ3518〜ステップ3522の処理を繰り返す。
ステップ3518(S3518)で、データ処理部22は、変更後のテーブルを配置する、データROM408上の先頭アドレスを算出する。先頭アドレスの算出では、空き領域を優先的に利用する。十分な空きがない場合は、前回以前の更新で更新対象のデータテーブルが配置されているときは、その先頭アドレスを利用し、そうでないときは、処理を中断する。中断した場合は、ユーザが更新プログラムを修正し、再度、更新準備処理を実施するか、プログラム全体更新に方針転換を行う事となる。
ステップ3519(S3519)で、データ処理部22は、算出したアドレスに既にデータテーブルが含まれている場合、算出したアドレスを含む消去ブロック番号を算出する。
ステップ3520(S3520)で、データ処理部22は、消去対象のブロックがある場合は、そのブロック内のデータテーブル変数を、更新内容も含めて書込みデータとする。そうでない場合は、変更のあるデータテーブル全体を書込みデータとする。また、データ処理部22は更新により書き込まれるデータテーブルのデータ長も算出する。
ステップ3521(S3521)で、データ処理部22は、ステップ3519で算出した消去対象のブロック番号、書込みデータの内蔵メモリでの配置位置の先頭アドレス、書込みデータのデータ長、及びステップ3518で算出した先頭アドレスを引数として、データROM消去/書込み処理委譲のインジェクションコード706を生成する。ここで、ステップ3519で消去対象のブロックがないと判断された場合、データ処理部22は、消去対象のブロック番号を伴わないデータROM書込み処理委譲のインジェクションコード708を生成する
ステップ3522(S3522)で、データ処理部22は、変数Mに、現在のMの値から1を減じた値を代入する
ステップ3523(S3523)で、データ処理部22は、差分プログラムにデータROM408上の既存データテーブルに対する変数の追加があるか、または新規データテーブルの追加があるか、を判定する。変更がある場合、処理はステップ3524へ移行し、変更がない場合、処理はステップ3529へ移行する。ここで、既存データテーブルへの変数追加が行われた場合、その変数へのアクセスは差分コードのみから行われるため、以降これを新規データテーブルとして扱う。
ステップ3524(S3524)で、データ処理部22は、追加のあるテーブル数だけ、ステップ3525〜ステップ3528の処理を繰り返す。
ステップ3525(S3525)で、データ処理部22は、追加するテーブルを配置する、データROM408上の先頭アドレスを算出する。具体的には、追加する各データテーブルの配置状況は、セグメント数が最小となるよう、ナップサック問題を解くなどして決定されているため、データ処理部22は、追加するデータテーブルが含まれるセグメントの先頭アドレスを決定する。また、データ処理部22は、追加するデータテーブルのデータ長も算出する。ここで、先頭アドレス算出では、空き領域を優先的に利用するが、十分な空きがない場合は、処理を中断する。中断した場合は、ユーザが更新プログラムを修正し、再度、更新準備処理を実施するか、プログラム全体更新に方針転換を行う事となる。
ステップ3526(S3526)で、データ処理部22は、ステップ3525で決定した先頭アドレスを持つセグメントに含まれることとなるデータテーブルを書込みデータとする。
ステップ3527(S3527)で、データ処理部22は、書込みデータの内蔵メモリでの配置位置の先頭アドレス、書込みデータのデータ長、及びステップ3525で算出した先頭アドレスを引数として、データROM書込み処理委譲のインジェクションコード708を生成する。
ステップ3528(S3528)で、データ処理部22は、変数Mに、現在の変数Mの値から1を減じた値を代入する。
ステップ3529(S3529)で、データ処理部22は、以下の目的関数が最適となるように差分コードをN個以下とするためのマージ処理を実施する。マージ処理では、更新プログラム内で分散配置されている2個以上の差分コードを、更新前後において共通するコードである共通コードを含ませて連接する処理を実施する。これにより、初期値付き局所変数及び大域変数を除く更新差分コードブロックの数をN個以下とすることができる。最適化での目的関数は、以下の通り示される。ここで、目的関数1〜3のうち、目的関数1が最も優先順位が高く、次に、目的関数2の優先順位が高い。
目的関数1:minimize { max of 連続コード}
この目的関数は、更新差分コードのブロックを繋げて得られるコード(連続コード)の最大サイズが最小となるよう最適化する。この最適化の目的は、セグメントサイズが大きくなり過ぎないよう、即ち、Nを出来るだけ大きくすることである。
目的関数2: minimize { total of 関数呼出 in 共通コード }
この目的関数は、共通コードにおける関数の呼出し数を最小化するよう最適化する。差分コードのブロックを繋げる際、異なる差分コードブロック間の変更対象でないコード(共通コード)を含めて繋げることとなる。この共通コードからの関数呼び出しが多いと、プログラムROM面をまたいだプログラム実行が多く行われることとなる。プログラムROM面はそれぞれ異なる電源を持つだめ、消費電力の増大、及びプログラムROMの読出しサイクルの増大が懸念される。このため、目的関数2では、呼出し数を最小化する。
目的関数3:既存の配置済みの差分コードの再利用の最大化
この目的関数の目的は、以下の通りである。過去の更新により、更新差分コードの配置が複数回成されている場合、何回か前に配置した更新差分コードブロックが今回の更新でもそのまま再利用できる可能性があり、その場合、それを再利用する事で、配置処理が軽減可能となる。
目的関数の最適化は、線形計画問題として定式化して解いても良い。また、ラグランジェ緩和などの技法を用いて高速化して解いても良い。また、差分コードのサイズを重みとした頂点とし、サイズと関数呼び出しの和を重みとした辺で、差分コード間を結んだグラフとして表現し、再利用可能頂点を考慮した、グラフ被覆問題として定式して解いても良い。また、グラフ被覆問題をヒューリスティックスに解いても良い。目的関数の最適化は、何れにせよ最適化問題についての一般的な知識により解ける問題である。
次に、組込み機器40における更新動作について説明する。図36は、組込み機器40でのプログラム更新動作を説明するための、組込み機器40が配置されたシステムの構成例を示す。なお、図36に示されるように、ここでは、一例として、管理サーバ30は、ユーザインターフェース37と接続されており、さらに無線ネットワークとの送受信を行うためのアンテナ39を備えているものとする。また、組込み機器40は、組込みコントローラを含むものとして説明する。ユーザインターフェース37は、プログラム更新動作の対象となる組込みコントローラへの更新差分プログラムの有無を表示し、実際に更新を実施するか否かのユーザからの指示を受ける。管理サーバ30は、アンテナ39から、更新差分プログラムなどを含む更新情報ファイルを構成する情報である更新情報を受け取る。また、管理サーバ30は、更新情報を受け取った際に、更新がある旨をユーザインターフェース37へ通知する。ユーザインターフェース37に表示された情報に基づき、ユーザが更新許可を指示すると、更新差分プログラムが組込み機器40内の組込みコントローラに配置される。
プログラムROM407及びデータROM408の面数が3である場合の更新手順は、例えば以下のようになる。図37は、プログラム更新手順の一例を示すフローチャートである。
ステップ3700(S3700)で、管理サーバ30は、ユーザインターフェース37を介して、ユーザに更新プログラムのロード可否を問合せる。ロードが許可されると、処理はステップ3701へ移行し、許可されない場合、処理はステップ3705へ移行する。
ステップ3701(S3701)で、管理サーバ30は、更新プログラムの動的ロード、即ちプログラムROM407及びデータROM408への更新プログラムの動的な配置を開始する。なお、動的な配置とは、プログラムの動作を停止させることなく、当該プログラムに対する差分をROMに配置することをいう。
ステップ3702(S3702)で、管理サーバ30は、更新プログラムの動的な配置の完了を確認する。
ステップ3703(S3703)で、管理サーバ30は、ユーザインターフェース37を介して、ユーザに更新可否を問合せる。更新が許可されると、処理はステップ3704へ移行し、許可されない場合、処理はステップ3706へ移行する。
ステップ3704(S3704)で、アドレス変換テーブルの許可設定など、更新に必要な設定が完了後、組込み機器40がリセットされ、組込み機器40が再起動される。そして、再起動時に更新が完了する。
ステップ3705(S3705)では、所定の待機時間が経過した後、ステップ3700へ処理が移行する。同様に、ステップ3706(S3706)でも、所定の待機時間が経過した後、ステップ3703へ処理が移行する。
次に、組込み機器40におけるプログラムの動的な配置動作について説明する。図38は、組込み機器40におけるプログラムの動的な配置動作の一例を説明する模式図である。なお、ここでは、組込み機器40のSRAM406は、起動時に固定割り付けされるプログラム更新作業領域442を有する。また、CPU401は、汎用割込みベクタテーブル440と専用割込みベクタテーブル441を具備するものとする。また、専用割込みベクタテーブル441は、動的なプログラム配置で用いられる割込みベクタテーブルであり、物理的には、汎用割込みベクタテーブル440の一部として実装されていても良い。プログラムの動的な配置動作例は下記の通りである。
(1)CANインターフェース409から更新情報の転送を要求する割込みを割込みコントローラ403が受け、割込みコントローラ403がCPU401に割込みをかける。
(2)CPU401は専用割込みベクタ441を参照し、対応する割込みハンドラが実行される。これにより、CPU401またはDMAコントローラ405の制御の下、CANインターフェース409からSRAM406に更新情報がデータ転送される。ここで、更新情報に含まれるインジェクションコードはプログラム更新作業領域442に配置される。また、受信した各データには予め署名が付加されており、プログラム更新作業領域442の予め定められたアドレスを先頭アドレスとして格納されるものとする。
(3)CANインターフェース409から更新情報の転送の区切りを示す割込みを割込みコントローラ403が受けてCPU401が割込みを受け付けるまで、上記(1)と(2)が繰り返される。
(4)CANインターフェース409から更新情報の転送の区切りを示す割込みを割込みコントローラ403が受け、CPU401が割込みを受ける。
(5)CPU401は専用割込みベクタ441を参照し、対応する割込みハンドラが実行される。これにより、プログラム更新作業領域442に配置されたインジェクションコードが実行される。インジェクションコードは、その種類に応じて、CPU401がアクセスしていないプログラムROM407/データROM408に対する更新データテーブル(すなわち更新差分コードに含まれる初期値付き局所変数と大域変数)の配置、CPU401がアクセスしていないプログラムROM407に対する更新差分バイナリの配置、並びに現在実行中にないデータROM408に対するアドレス変換テーブルの配置を実施する。
(6)CANインターフェース409から更新情報の転送の終了を示す割込みを割込みコントローラ403が受けてCPU401が割込みを受け付けるまで、上記(1)〜(5)が繰り返される。
(7)CANインターフェース409から更新情報の転送の終了を示す割込みを割込みコントローラ403が受け、CPU401が割込みを受け付ける。
(8)CPU401は専用割込みベクタ441を参照し、対応する割込みハンドラが実行される。これにより、プログラムROM407/データROM408に配置したデータテーブルや差分コードの署名検証、アドレス変換器402やデータROM408に配置したアドレス変換テーブルの署名検証が実施される。ここで、組込み機器40は、署名検証をパスした場合、差分コードの署名(ハッシュ値)をデータROM408に格納するとともに、CANインターフェース409から完了通知を外部へ出力する。また、組込み機器40は、再起動後に差分コード配置面の切り替えを実施する旨、フラグ設定を実施する。組込み機器40は、署名検証で不一致となった場合は、プログラムROM407/データROM408に配置したデータテーブルや差分コードの消去、アドレス変換器やデータROMに配置したアドレス変換テーブルの消去を実施するとともに、CANインターフェース409から署名検証不一致の通知を外部へ出力する。
図39は、組込み機器40におけるプログラムの動的な配置動作の別の一例を説明する模式図である。図39に示した例は、上述したサブCPU411を有する組込み機器40における動的な配置動作の一例である。なお、ここでも、上記と同様、SRAM406は、起動時に固定割り付けされたプログラム更新作業領域442を有する。また、サブCPU411は汎用割込みベクタテーブル443と専用割込みベクタテーブル444を具備するものとする。また、プログラムROM412は、図32A、32BのBIOSコードを格納するプログラムROM領域であり、物理的には、プログラムROM407の何れかまたは全ての一部として実装されていても良い。このような構成における組込み機器40における、プログラムの動的な配置動作例は下記の通りである。
(1)CANインターフェース409から更新情報の転送を要求する割込みを割込みコントローラ403が受け、割込みコントローラ403がサブCPU411に割込みをかける。ここで、割込みコントローラ403からの割込みを一旦メインCPU401が受付、メインCPU401からサブCPU411に割込みを掛けるとしても良い。
(2)サブCPU411は専用割込みベクタ441を参照し、対応する割込みハンドラが実行される。これにより、サブCPU411またはDMAコントローラ405の制御の下、CANインターフェース409からSRAM406に更新情報がデータ転送される。ここで、更新情報に含まれるインジェクションコードはプログラム更新作業領域442に配置される。また、各データには予め署名が付加されており、プログラム更新作業領域442の予め定められたアドレスを先頭アドレスとして格納されるものとする。
(3)CANインターフェース409から更新情報の転送の区切りを示す割込みを割込みコントローラ403が受けてサブCPU411が割込みを受け付けるまで、上記(1)と上記(2)が繰り返される。
(4)CANインターフェース409から更新情報の転送の区切りを示す割込みを割込みコントローラ403が受け、サブCPU411が割込みを受ける。
(5)サブCPU411は専用割込みベクタ444を参照し、対応する割込みハンドラが実行される。これにより、プログラム更新作業領域442に配置されたインジェクションコードが実行される。インジェクションコードはその種類に応じて、サブCPU411がアクセスしていないプログラムROM407/データROM408面への更新データテーブルの配置、サブCPU411がアクセスしていないプログラムROM407への更新差分バイナリ配置、並びに現在実行中にないデータROM408に対するアドレス変換テーブルの配置を実施する。
(6)CANインターフェース409から更新情報の転送の終了を示す割込みを割込みコントローラ403が受けサブCPU411が割込みを受け付けるまで、上記(1)〜(5)が繰り返される。
(7)CANインターフェース409から更新情報の転送の終了を示す割込みを割込みコントローラ403が受け、サブCPU411が割込みを受け付ける。
(8)サブCPU411は専用割込みベクタ444を参照し、対応する割込みハンドラが実行される。これにより、プログラムROM407/データROM408に配置したデータテーブルや差分コードの署名検証、アドレス変換器402やデータROM408に配置したアドレス変換テーブルの署名検証が実施される。なお、署名検証をパスした場合、署名検証で不一致となった場合の動作は、図38に対する上述の(8)の説明と同様である。
次に、組込み機器40における起動動作について説明する。図40は、組込み機器40の起動動作の一例を示すフローチャートである。本起動フローは、更新情報の設定完了後の再起動時の動作フロー例である。なお、本起動フローは、例えば、組込み機器40のCPU401がBIOSを含むファームウェアを実行することにより実現される。
ステップ4000(S4000)で、電源がオフからオンとなり、組込み機器40が特権モードにて処理を開始する
ステップ4001(S4001)で、SRAM406上にプログラム更新作業領域442が割り当てられる。ここで、作業領域の先頭アドレスをwork_addrとする。
ステップ4002(S4002)で、work_addrが専用割込みベクタ441または専用割込みベクタ444に設定される。
ステップ4003(S4003)で、組込み機器40は、特権レベルを変更し、通常モードへ移行する。
ステップ4004(S4004)で、組込み機器40が、CPU401及び周辺モジュールの初期化処理を実行する。
ステップ4005(S4005)で、組込み機器40は、差分コード配置面切り替えフラグが設定されているか否かを判断する。設定されている場合は処理がステップ4006へ移行し、設定されていない場合は処理がステップ4007へ移行する。
ステップ4006(S4006)で、「更新差分コード配置後初期化処理」を実施する。なお、「更新差分コード配置後初期化処理」の具体例については、後述する。
ステップ4007(S4007)で、組込み機器40は、メインプログラムを実行する。
ステップ4008(S4008)で、メインシステムが起動する。
図41は、図40のステップ4006の「更新差分コード配置後初期化処理」の一例を示すフローチャートである。「更新差分コード配置後初期化処理」では、例えば以下の動作が行われる。
ステップ4100(S4100)で、組込み機器40は、プログラムコンテキストをC_tmpへ退避する。なお、プログラムコンテキストとは、プログラムの状態を言い、具体的には、CPUレジスタ及びメモリの状態を指す。また、C_tmpは、メモリ上の退避領域である。署名検証などは、元々のプログラムには含まれない処理であり、本来あるべきプログラムコンテキストを崩す処理である。このため、署名検証などの処理を実施する前のプログラムコンテキストをこのように一旦格納し、処理終了後に戻すことで、本来あるべきプログラム実行状態を実現する。
ステップ4101(S4101)で、組込み機器40は、データテーブルや差分コードをプログラムROM407/データROM408から読出し、ハッシュ値を算出する。
ステップ4102(S4102)で、組込み機器40は、データテーブルや差分コードの配置時に署名検証で用いたハッシュ値とステップ4101で算出したハッシュ値を比較する。これらが一致した場合、処理はステップ4103へ移行し、不一致の場合、処理はステップ4108へ移行する。
ステップ4103(S4103)で、組込み機器40は、データROM408に配置したアドレス変換テーブルのハッシュ値を算出する。
ステップ4104(S4104)で、組込み機器40は、アドレス変換テーブルの配置時に署名検証で用いたハッシュ値とステップ4103で算出したハッシュ値を比較する。これらが一致した場合、処理はステップ4105へ移行し、不一致の場合、処理はステップ4108へ移行する。
ステップ4105(S4105)で、組込み機器40は、差分コード配置面の切り替えを実施する。
ステップ4106(S4106)で、組込み機器40は、アドレス変換テーブルをデータROM408からロードし、アドレス変換器402に設定する。
ステップ4107(S4107)で、組込み機器40は、アドレス変換を有効化する。
ステップ4108(S4108)で、組込み機器40は、C_tmpへ退避(格納)したプログラムコンテキストを、新たなプログラムコンテキストとして設定する。すなわち、組込み機器40は、C_tmpへ退避したプログラムコンテキストを復帰させる。
このように、更新情報は、組込み機器40のROMに格納される際に署名検証が行われるととともに、組込み機器40に適用される際にも署名検証(ステップ4101〜ステップ4104)が行われる。このため、更新情報の受信の際の改竄の検知、及び受信後の改竄の検知が可能となる。つまり、CPU401は更新情報が正当であることが確認された場合に差分プログラムを実行するため、改竄等の危険があるプログラム等に基づく実行を避けることができ、セキュリティが向上する。
次に、BIOSの呼び出しを行うコードのSRAM406への配置及びBIOSの実行の手順について説明する。図42は、BIOSの呼び出しを行うコードのSRAM406への配置及びBIOSの実行の手順の一例を示すフローチャートである。ここでは、CAN経由で配置される手順を例として示す。
ステップ4200(S4200)で、CANインターフェース409から更新情報の転送を要求する割込みをCPU401が受付ける。
ステップ4201(S4201)で、割り込みが、インジェクションコードの実行を指示する割込みか否かが判定され、そうである場合、処理はステップ4204へ移行し、そうでない場合、処理はステップ4202へ移行する。
ステップ4202(S4202)で、CPU401は、受信したデータを、上述のwork_addrを先頭アドレスとするプログラム作業領域へ転送する。
ステップ4203(S4203)で、割込み処理が終了し、処理はステップ4200へ移行する。
ステップ4204(S4204)で、CPU401は割込みハンドラによりプログラム更新作業領域に配置されたインジェクションコードを実行する。CPU401は、インジェクションコードからBIOSを読出し、BIOSに引数を渡し、BIOSを実行する。
ステップ4205(S4205)で、CPU401は、BIOS関数実行後、BIOS関数内で割込み終了処理を実施する。
次に、更新情報ファイル50の転送について説明する。図43は、更新情報ファイル50に含まれる更新差分バイナリを管理サーバ30から組込み機器40に転送する手順の一例を示すフローチャートである。なお、本フローは、管理サーバ30のデータ処理部33にて実行される。具体的には、例えば、データ処理部33のメモリに格納されたプログラムをデータ処理部33の処理装置が実行することにより実現される。
上述の通り、更新情報ファイル50は開発環境20で生成され、管理サーバ30に転送された後、管理サーバ30から組込み機器40に転送される。更新情報ファイル50には、上述の通り、更新差分バイナリの他にもアドレス変換テーブル52等の種々の情報を含むが、これら情報の管理サーバ30から組込み機器40への転送の一例として、更新差分バイナリの転送例を図43に示す。更新情報ファイル50に含まれる更新差分バイナリ以外の他の情報の転送も同様である。なお、説明に当たり、次のようにS、M、Nを定義する。なお、下記の定義において、Nは、自然数であり、フラッシュメモリの書込み単位に合わせて設定される。また、「ceil()」は、括弧内の数値の切り上げ整数値を返す関数である。また、ここでは、CANのデータペイロードサイズは、8であるものとする。
S=256×Nバイト
M=ceil(更新差分バイナリのバイトサイズ/S)
=256/8、ここで、8はCANのデータペイロードサイズ
尚、これら定数値はシステム要件に応じて適宜変更可能である。
なお、本例では、管理サーバ30から組込み機器40に8バイト単位でデータ転送が行われ、Sバイト単位でフラッシュメモリに書き込む処理を示している。以下、具体的に説明する。
ステップ4300(S4300)で、データ処理部33は、ステップ4301〜ステップ4307までの処理をM回繰り返す。また、データ処理部33は、繰り返し中、変数i(初期値は1)をインクリメントする。
ステップ4301(S4301)で、データ処理部33は、更新差分バイナリをSバイト毎に区切ったときのi番目のデータを変数Cに代入する。
ステップ4302(S4302)で、データ処理部33は、ステップ4303〜ステップ4306までの処理をN回繰り返す。また、データ処理部33は、繰り返し中、変数j(初期値は1)をインクリメントする。
ステップ4303(S4303)で、データ処理部33は、Cに代入されたデータを256バイト単位に区切ったときのj番目のデータを変数Dに代入する。
ステップ4304(S4304)で、データ処理部33は、ステップ4305及びステップ4306の処理をN回繰り返す。また、データ処理部33は、繰返し中、変数k(初期値は1)をインクリメントする。
ステップ4305(S4305)で、データ処理部33は、組込み機器40内のCANインターフェース409にて受信される更新バイナリ断片をSRAM406へ転送する要求を、組込み機器40に対してCANバスを介して発行する。
ステップ4306(S4306)で、データ処理部33は、Dに代入されたデータを8バイト毎に区切ったときのk番目のデータを組込み機器40に転送するため、これをCANバスへ送信する。
ステップ4307(S4307)で、データ処理部33は、更新バイナリのプログラムROM407への書込み処理委譲のインジェクションコード701の実行指示をCANバスへ送信するとともに、このインジェクションコードをCANバスへ送信する。
以上、実施の形態1について説明した。実施の形態1によれば、組込み機器40は、アドレス変換器402により変換されたアドレスに従って更新プログラムを実行する。このため、組込み機器40が動的なアドレス解決機能を有さない場合であっても、差分コードを用いたプログラム更新が可能となる。また、モジュール単位の更新ではなく、差分コードのみによる更新であるため、更新に際して組込み機器のメモリに格納されるデータ量を抑制できる。このため、メモリの削減に寄与する。また、モジュール単位以下の更新が可能であるため、フラッシュメモリの書込み及び消去をより細かい単位で実施可能となる。このため、モジュール単位での更新手法に比べ、フラッシュメモリの長寿命化が達成できる。また、更新情報ファイル50にはプログラム復元ポイントを構成する情報が含まれているため、更新での異常検知時や外部からの指示に基づく、更新前プログラムへのロールバックが可能となる。またさらに、更新プログラムの正当性の検査、すなわち署名検証の際、例えば、組込み機器と他の装置とが通信することにより正当性を確認する方法も考えられるが、本実施の形態では、そのような方法ではなく、組込み機器40でダイジェスト値(ハッシュ値)の算出及び確認を実施するため、検証の際の通信遅延等の影響を回避できる。したがって、組込み機器と他の装置とが通信することにより正当性を確認する場合に比べて、電源オンからの実際の起動までにかかる時間を抑制することができる。また、更新差分プログラムのダイジェスト値(ハッシュ値)を用いたチェックで異常が検出された場合、予めスタックに退避したプログラムコンテキストを復帰させることで、電源のオフ及びオンを行う事なく更新前のプログラムの実行に戻す事が可能である。このため、異常検知時の復旧時間の短縮化が可能となる。また、本実施の形態では、ROMが3面あるため、更新後のプログラムが実行中であっても、1面は余ることとなる。このため、更に更新が行われる場合、上述のように、この余った1面を利用することで、プログラムの実行を阻害しない。なお、ROMの面数が3である場合に限らず、4以上であっても、同様に、余った面の利用が可能であることは言うまでもない。
<実施の形態2>
次に、実施の形態2について説明する。実施の形態2は、組込み機器40が変更されている点で、具体的には、本実施の形態に組込み機器40は、プログラムROM407の構成及びデータROM408の構成が変更された点で、実施の形態1にかかる組込み機器40と異なる。なお、以下の説明において、実施の形態1と同様である点については、理解の容易化のため、適宜割愛される。図44は、実施の形態2にかかる組込み機器40の構成例を示すブロック図である。
本実施の形態にかかるプログラムROM407は、夫々独立に読み書き及び消去が可能な2面構成のROMである。すなわち、実施の形態1にかかるプログラムROM407が3面構成であったのに対し、本実施の形態にかかるプログラムROM407は2面構成となっている。また、本実施の形態にかかるデータROM408は、夫々独立に読み書き及び消去が可能な2面構成のROMである。すなわち、実施の形態1にかかるデータROM408が3面構成であったのに対し、本実施の形態にかかるデータROM408は2面構成となっている。以下、本実施の形態の説明において、特に記載がない場合には、プログラムROM407は、実施の形態2にかかる2面構成のROMであるものとする。また、同様に、データROM408は、実施の形態2にかかる2面構成のROMであるものとする。ROMが3面以上である場合、上述通り、余った1面を利用することで、プログラムの実行を阻害しない。しかしながら、2面の場合、更新後のプログラムが実行されている場合には、ROMに余った面がないため、実施の形態1に示した方法をそのまま適用することができない。実施の形態2では、ROMが2面である場合においても更新を実現する方法を示す。
図45は、実施の形態2にかかる組込み機器40のまた別の構成例を示す。図に示されるように、実施の形態1と同様、本実施の形態にかかる組込み機器40は、サブCPU411を有する構成であってもよい。
図46は、実施の形態2にかかるアドレス変換器402の概要を示す模式図である。実施の形態1では、プログラムROM407の3つの面のうち、1つの面にデフォルトプログラムが配置され、残りの2面に更新差分プログラムが配置されるため、アドレス変換器402は、2つのアドレス変換テーブル420A、420Bのういち、いずれかのアドレス変換テーブルを用いた。これに対し、本実施の形態では面数が2であるため、図46に示すように、実施の形態2にかかるアドレス変換器402は、1つのアドレス変換テーブル420Aを用いてアドレス変換を行う。尚、アドレス変換テーブルのプログラム実行中の設定を可能とする目的で、アドレス変換器を2つ備えても良い。
実施の形態2にかかるアドレス変換器402の接続関係は、実施の形態1と同様、図8に示されるように表される。組込み機器40は、アドレス変換器402として、具体的には、プログラムROM407用のアドレス変換器402Aと、データROM408用のアドレス変換器402Bとを有する。ただし、本実施の形態では、プログラムROMが2面であることに対応して、組込み機器40は、プログラムROM407用のアドレス変換器402Aを1個搭載している。また、同様に、組込み機器40は、データROM408用のアドレス変換器402Bを1個搭載している。
更新情報ファイルについては、実施の形態1と同様であってもよいが、次のように構成されてもよい。図47は、新たな差分コードの構築時に、以前配置した差分コードを再利用する方法について説明する模式図である。プログラムROM407の面数が2である場合、面数が3である場合に比べて、更新差分コードを配置可能な領域が少ない。このため、差分コード自体の再利用を行う事で、プログラムROM407に配置されるデータ量を削減することが可能となる。すなわち、プログラムROM407に要求されるメモリ容量を抑制することができる。なお、この再利用は、ROMが2面である場合に限らず、3面以上である場合にも容易に適用可能である。以下、図に沿って、説明する。
図47に示した例では、複数の差分コードの配置例に加え、各差分コードに対応したアドレス変換テーブルの配置例も示している。1回目の更新で、メモリ空間Bに差分コードa、b、c、dを配置し、データROM408にアドレス変換テーブル420A_1を配置する。2回目の更新で、メモリ空間Bに差分コードe、f、g、hを配置し、データROM408にアドレス変換テーブル420A_2を配置する。ここで、k回目の更新で、メモリ空間Bに差分コードd、e、i、jを、データROM408にアドレス変換テーブル420A_kを配置する場合を考える。
差分コードd、eは既にアドレス空間Bに配置されているため、アドレス変換テーブル420A_kで既に配置されている差分コードd、eの先頭アドレスを変換後のアドレスとする事で、新たにアドレス空間Bに差分コードd、eを配置する必要がない。すなわち、このようにして、既に配置されている差分コードを再利用している。なお、アドレス変換テーブル420A_kの差分コードd、eに対応するエントリに関しては、既に配置されているエントリを再利用してもよいし、新たにデータROM408に配置しても良い。なお、図47では、再利用せずに、データROM408に新たにアドレス変換テーブル420A_kの全エントリを配置する構成例を示している。
これにより、組込み機器40では、既にプログラムROM407又はデータROM408に配置された更新情報と重複する部分を除く更新情報が、CANインターフェース409により受信され、プログラムROM407又はデータROM408には、既に配置されているこの重複する部分に加え、重複する部分が除かれた更新情報が新たに配置される。これにより、プログラムROM407又はデータROM408に要求されるメモリ容量を抑制することができる。
次に、本実施の形態における、BIOSコードの配置例について説明する。図48A、図48Bは、BIOSコードの2面のプログラムROM407への配置例を示す模式図であり、図48AはBIOSコードの更新を伴わないプログラムの更新の場合に対応した例を示し、図48BはBIOSコードの更新を含むデフォルトプログラム全体の更新の場合に対応した例を示している。
まず、図48Aを参照してBIOSコードの更新を伴わないプログラムの更新の場合について説明する。図48Aでは、2面ともに同じBIOSコードが配置されており、A面にデフォルトプログラムが配置され、B面に前回の更新に対応する差分プログラムと現在書込み中の更新差分プログラムが配置されている。ここで、B面への更新差分プログラムの配置では、A面及びB面での、デフォルトプログラム及び前回差分プログラムから成る前回更新プログラムの実行状態から、再起動によるA面でのデフォルトプログラムの実行状態へと変更する。その上で、B面への更新差分プログラムの配置では、B面に配置されたBIOSコードが用いられ、SRAM406に展開されたプログラムROM書込みドライバ、またはプログラムROM書込み専用ハードウェアが書込み実行する事で、A面へのCPU401からのアクセスを阻害する事なく、B面への更新差分プログラムの配置が可能となる。即ち、A面でのプログラム実行中の、B面への更新差分プログラムの配置が可能となる。尚、B面に配置する更新差分プログラムは、A面に配置されたデフォルトプログラムに対する更新差分プログラムとなる。ここで、B面に配置する更新差分プログラムは、既にB面に配置されている更新差分プログラムを再利用して構成しても良い。
次に、図48Bを参照してBIOSコードの更新を含むデフォルトプログラム全体の更新の場合について説明する。図48Bは、A面を消去し、B面に新デフォルトプログラムと新BIOSコードを配置後、B面に配置された新BIOSコードをA面にコピーして配置した状態を示している。これについて、次のような処理が行われる。まず、B面の消去を、プログラムROM407の消去処理委譲のインジェクションコードからプログラムROM407の消去処理BIOSを呼び出して実行する事で実施する。次に、B面への新デフォルトプログラム及び新BIOSコードの配置を、プログラムROM書込み処理委譲のインジェクションコードからプログラムROM書込み処理を呼び出して実行する事で実施する。そして、デフォルト面切り替え処理委譲のインジェクションコード712、713からデフォルト面切り替え処理BIOSを呼び出して実行する事で、再起動時の開始アドレスをB面の先頭とする。プログラムROM407のA面の再起動中の消去を実行するためのプログラムROM消去委譲のインジェクションコードと、A面への新BIOSコードの再起動中のコピーを実行するためのプログラムROM書込み処理委譲のインジェクションコードを、再起動前にSRAM406からデータROM408に配置し、再起動中にデータROM408から上記2つのインジェクションコードをSRAM406へ展開し、実行する。再起動後には、図48Bに示すプログラム配置構造が実現され、プログラム開始アドレスがB面の先頭に設定され、B面の新デフォルトプログラムの実行がなされる。なお、新BIOSは、データROM408に一旦配置した後、適当なタイミングでプログラムROM407に展開されてもよい。
プログラムROM407及びデータROM408の面数が2である場合の更新手順は、例えば以下のようになる。図49は、プログラム更新手順の一例を示すフローチャートである。
ステップ4900(S4900)で、管理サーバ30は、ユーザインターフェース37を介して、ユーザに更新プログラムのロード可否を問合せる。ロードが許可されると、処理はステップ4901へ移行し、許可されない場合、処理はステップ4906へ移行する。
ステップ4901(S4901)で、アドレス変換テーブルの不許可設定など、デフォルトプログラムの実行状態とするために必要な設定が完了した後、組込み機器40がリセットされ、組込み機器40が再起動される。そして、再起動後に組込み機器40は、デフォルトプログラムの実行状態へと遷移する。
ステップ4902(S4902)で、管理サーバ30は、更新プログラムの動的ロード、即ちプログラムROM407及びデータROM408への更新プログラムの動的な配置を開始する。
ステップ4903(S4903)で、管理サーバ30は、更新プログラムの動的な配置の完了を確認する。
ステップ4904(S4904)で、管理サーバ30は、ユーザインターフェース37を介して、ユーザに更新可否を問合せる。更新が許可されると、処理はステップ4905へ移行し、許可されない場合、処理はステップ4907へ移行する。
ステップ4905(S4905)で、アドレス変換テーブルの許可設定など、更新に必要な設定が完了後、組込み機器40がリセットされ、組込み機器40が再起動される。そして、再起動時に更新が完了する。
ステップ4906(S4906)では、所定の待機時間が経過した後、ステップ4900へ処理が移行する。同様に、ステップ4907(S4907)で、所定の待機時間が経過した後、ステップ4904へ処理が移行する。
次に、本実施の形態にかかる組込み機器40における起動動作について説明する。図50は、実施の形態2にかかる組込み機器40の起動動作の一例を示すフローチャートである。以下、図40に示した組込み機器40における起動動作と異なる点について説明する。図50に示した組込み機器40における起動動作では、図40に示した組込み機器40における起動動作のステップ4005がステップ5005に置き換わった点を除いて、同じである。ここで、ステップ5005では、組込み機器40は、差分コード配置面有効フラグが設定されているか否かを判断する。設定されている場合は処理がステップ5006へ移行し、設定されていない場合は処理がステップ5007へ移行する。
次に、図50のステップ5006の「更新差分コード配置後初期化処理」について説明する。図51は、図50のステップ5006の「更新差分コード配置後初期化処理」の一例を示すフローチャートである。「更新差分コード配置後初期化処理」では、例えば以下の動作が行われる。以下、図41に示した処理と異なる点について説明し、図41に示した処理と同様の点については適宜説明を割愛する。
ステップ5100(S5100)からステップ5104(S5104)は、図41に示したステップ4100からステップ4104と同様である。ただし、ステップ5102において、ハッシュ値が一致した場合、処理はステップ5103へ移行し、不一致の場合、処理はステップ5107へ移行する。また、ステップ5104において、ハッシュ値が一致した場合、処理はステップ5105へ移行し、不一致の場合、処理はステップ5107へ移行する。
ステップ5105(S5105)で、組込み機器40は、アドレス変換テーブルをデータROM408からロードし、アドレス変換器402に設定する。
ステップ5106(S5106)で、組込み機器40は、アドレス変換を有効化する。
ステップ5107(S5107)で、組込み機器40は、C_tmpへ退避(格納)したプログラムコンテキストを、新たなプログラムコンテキストとして設定する。すなわち、組込み機器40は、C_tmpへ退避したプログラムコンテキストを復帰させる。
以上、実施の形態2について説明した。実施の形態2によれば、ROMが2面である場合であっても、実施の形態1と同様の効果を奏することができる。なお、データROM408には大域変数が格納されるため、大域変数を利用しない場合にはデータROM408の面数を1とすることも可能である。
<実施の形態3>
次に、実施の形態3について説明する。本実施の形態では、組込み機器での、更新差分プログラムのセキュアな動的配置、及びセキュアな更新動作を実現するために成された改善例を示す。具体的には、本実施の形態では、プログラム又はデータの破壊に対する対応策と、ROMに対する悪意ある書込み消去に対する対応策を実現している。なお、本実施の形態は、実施の形態1にも2にも組み合わせ可能である。また、プログラム又はデータの破壊に対する対応策と、ROMに対する悪意ある書込み消去に対する対応策のうち、一方のみが適用されてもよい。
まず、プログラム又はデータの破壊に対する対応策について説明する。実施の形態1及び2で示した例では、更新情報ファイルを構成するインジェクションコードのうち、プログラムROM407又はデータROM408の消去処理を含むものとして、指定復元ポイントへのロールバック処理委譲のインジェクションコード709、局所変数の初期値の更新のためのプログラムROM消去/書込み処理委譲のインジェクションコード705、大域変数の初期値の更新のためのデータROM消去/書込み処理委譲のインジェクションコード706がある。また、データROM408へのアドレス変換テーブルの書込み処理委譲のインジェクションコード702は、セキュリティを考慮しない場合には、アドレス変換テーブルを、データROM408があふれるまで格納し続けることとなるが、セキュリティを考慮する場合、過去のアドレス変換テーブルを一定数しか保持しないよう消去処理することが好ましい。これらのインジェクションコードによる消去処理の際、消去ブロック番号を何らかの方法で改竄されてしまいさらに改竄検知もすり抜けた場合、格納されたプログラムやデータが破壊される事となり問題となる。そこで、以下では、インジェクションコードにおいて、消去ブロック番号についてBIOSルーチンに引数渡しせずに消去を実現する方法を示す。また便宜上、以下では、実施の形態1及び2と同様にインジェクションコードを用いて実施の形態の説明を行うが、インジェクションコードの代わりに、呼び出し関数名と当該関数の引数列からなるデータ列を用い、組込み機器内部でこのデータ列からインジェクションコード相当の関数を構成する形式として実現されていると解釈されるのが妥当であろう。このような実現方式を取る事で、インジェクションコード相当の関数を構成時に、データ列の署名検証などといったインジェクションコードの正当性検証がより堅牢に実現可能となるためである。
図52は、本実施の形態にかかるインジェクションコードの構成例を示す模式図である。本実施の形態では、インジェクションコード702が、アドレス変換テーブルのデータROM408への書込み処理委譲のインジェクションコード720に置き換えられ、インジェクションコード705が、局所変数の初期値の更新のためのプログラムROM407の消去/書込み処理委譲のインジェクションコード721に置き換えられ、インジェクションコード706が、大域変数の初期値の更新のためのデータROM408の消去/書込み処理委譲のインジェクションコード722に置き換えられ、インジェクションコード709が、指定復元ポイントへのロールバック処理のインジェクションコード723に置き換えられている。その他のインジェクションコードについては、実施の形態1及び2と同様である。
以下、実施の形態1及び2とは異なるインジェクションコードについて説明する。
図53は、実施の形態3にかかる、アドレス変換テーブルのデータROM408への書込み処理委譲を行うインジェクションコード720での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。
ステップ5300(S5300)で、第一引数arg1に読出しデータの先頭アドレスを配置し、ステップ5301(S5301)で、第二引数arg2にデータ長を配置し、ステップ5302(S5302)で、第三引数arg3にデータ書込み先の先頭アドレスを配置し、ステップ5303(S5303)でROM消去BIOSルーチンのコールを実施し、ステップ5304(S5304)で、対応するBIOSルーチンのコールを実施する。
なお、ステップ5303で呼び出されるROM消去BIOSルーチンの詳細は、図58を参照して後述する。ここで、ステップ5304で呼び出されるBIOSルーチンは、アドレス変換テーブルのデータROM408への書込み処理を実施する。実行例は、例えば以下のようになる。アドレス変換テーブルがCANインターフェース409からの割込みにてDMA転送でSRAM406に配置された状態で、更にCANインターフェース409からの割込みで、アドレス変換テーブルのデータROM408への書込み処理委譲のインジェクションコード720がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。ステップ5303で呼び出されるBIOSルーチンは、書き換えが行われる領域のブロックを消去する処理を実施する。これにより、過去のアドレス変換テーブルが消去される。また、ステップ5304で呼び出されるBIOSルーチンは、SRAM406に配置されたアドレス変換テーブルのデータROM408への書込み処理を実施する。
図54は、セキュリティ対応を考慮した、指定復元ポイントへのロールバック処理委譲を行うインジェクションコード723での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。
ステップ5400(S5400)で、第一引数arg1に復元ポイントに対応するアドレス変換テーブルの先頭アドレスを配置する。ステップ5401(S5401)で、第二引数arg2に復元ポイントに対応するアドレス変換テーブルのエントリ数を配置する。ステップ5402(S5402)で、復元ポイントに対応するアドレス変換テーブルの設定を実施するBIOSルーチンAのコールを実施する。そして、以下のステップ5403〜ステップ5407を必要回数だけ実施する。ステップ5403(S5403)で、第一引数arg1にロールバック対象の差分プログラム内の指定復元ポイントでの初期値付き局所変数や大域変数が配置されているデータROM408上の領域の先頭アドレスを配置する。すなわち、この先頭アドレスは、読み出しデータの先頭アドレスである。ステップ5404(S5404)で、第二引数arg2に読み出しデータのデータ長を配置する。ステップ5405(S5405)で、第三引数arg3にデータ書込み先の先頭アドレスを配置する。ステップ5406(S5406)でROM消去BIOSルーチンのコールを実施する。ステップ5407(S5407)で、指定復元ポイントでの初期値付き局所変数や大域変数の配置状態への復帰実現のためのプログラムROM407及びデータROM408の書込みを行うBIOSルーチンBのコールを実施する。
なお、ステップ5406で呼び出されるROM消去BIOSルーチンの詳細は、図58を参照して後述する。ステップ5402とステップ5407とで呼び出される2つのBIOSルーチンは、指定復元ポイントへのロールバック処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みで指定復元ポイントへのロールバック処理委譲のインジェクションコード723がSRAM406に配置され、割込みでこのインジェクションコードが実行され、2つのBIOSルーチンコールが成され、夫々のBIOSルーチンでは、指定復元ポイントへのロールバック処理を実施する。ここで、指定復元ポイントへのロールバック処理では、先ず最初に復元指定ポイントに対応するアドレス変換テーブルをアドレス変換器402に設定(BIOSルーチンA)し、次いで、指定復元ポイントでの初期値付き局所変数や大域変数の配置状態への復帰の実現のためのプログラムROM407やデータROM408の書込み処理(BIOSルーチンB)を実施する。また、インジェクションコード723が実行されると、ROM消去BIOSルーチンもコールされる。ROM消去BIOSルーチンは、書き換えが行われる領域のブロックを消去する処理を実施する。
図55は、実施の形態3にかかる、局所変数更新の実現のためのプログラムROM407の消去及び書込み処理委譲を行うインジェクションコード721での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。
まず、ステップ5500(S5500)で、第一引数arg1に、プログラムROM407に対する消去及び書込み処理プログラムが配置される、SRAM406上のアドレスを配置する。なお、消去及び書込み処理プログラムはプログラムROM407の特定のアドレスに予め配置されている。次に、ステップ5501(S5501)で、第二引数arg2に、この消去及び書込み処理プログラムへ渡す引数のフレームポインタを配置する。次に、ステップ5502(S5502)で、第三引数arg3に、ロールバック対象の差分プログラム内の局所変数更新部分に対応するコードが配置されているデータROM408またはSRAM406上の領域の先頭アドレスを配置する。すなわち、この先頭アドレスは、読み出しデータの先頭アドレスである。ステップ5503(S5503)で、第四引数arg4に読み出しデータのデータ長を配置する。ステップ5504(S5504)で、第五引数arg5にデータ書込み先の先頭アドレスを配置する。ステップ5505(S5505)でROM消去BIOSルーチンのコールを実施する。ステップ5506(S5506)で、対応するBIOSルーチンのコールを実施する。
なお、ステップ5505で呼び出されるROM消去BIOSルーチンの詳細は、図58を参照して後述する。ROM消去BIOSルーチンは、書き換えが行われる領域のブロックを消去する処理を実施する。ステップ5506で呼び出されるBIOSルーチンは、プログラムROM407に対する消去及び書込みプログラムを第一引数に指定されたSRAM406のアドレスに配置し、第二引数に指定されたフレームポインタをこの消去及び書込みプログラムへ引き渡し、この消去及び書込みプログラムを実行する事で、局所変数更新の実現のためのプログラムROM407の書込み処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みで局所変数更新の実現のためのプログラムROM407の消去及び書込み処理委譲のインジェクションコード721がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、局所変数更新の実現のためのプログラムROM407の消去及び書込み処理を実施する。なお、SRAM406に配置されたプログラムROM407に対する消去及び書込みプログラムは、SRAM406をワークメモリとして用いる専用ハードウェアとして実現されていても良い。
図56は、実施の形態3にかかる、大域変数更新の実現のためのデータROM408の消去及び書込み処理委譲を行うインジェクションコード722での処理に対応するBIOSルーチンコードの呼び出し処理の手続き例を示すフローチャートである。
まず、ステップ5600(S5600)で、第一引数arg1にロールバック対象の差分プログラム内の大域変数更新部分に対応するコードが配置されているデータROM408またはSRAM406上の領域の先頭アドレスを配置する。すなわち、この先頭アドレスは、読み出しデータの先頭アドレスである。ステップ5601(S5601)で、第二引数arg2に読み出しデータのデータ長を配置する。ステップ5602(S5602)で、第三引数arg3にデータ書込み先の先頭アドレスを配置する。ステップ5603(S5603)で、ROM消去BIOSルーチンのコールを実施する。ステップ5604(S5604)で、対応するBIOSルーチンのコールを実施する。
なお、ステップ5603で呼び出されるROM消去BIOSルーチンの詳細は、図58を参照して後述する。ROM消去BIOSルーチンは、書き換えが行われる領域のブロックを消去する処理を実施する。ステップ5604で呼び出されるBIOSルーチンは、大域変数更新の実現のためのデータROM408の書込み処理を実施する。実行例は、例えば以下のようになる。CANインターフェース409からの割込みで大域変数更新の実現のためのデータROM408の消去及び書込み処理委譲のインジェクションコード722がSRAM406に配置され、割込みでこのインジェクションコードが実行され、BIOSルーチンコールが成される。当該BIOSルーチンでは、大域変数更新の実現のためのデータROM408の消去及び書込み処理を実施する。
次に、ROM消去BIOSルーチンについて説明する。本実施の形態では、更新差分バイナリプログラムの動的な配置のために必要とプログラムROM407/データROM408の消去処理を、実施の形態1及び2に示したような、ブロック消去番号を外部から渡す方法で実現する訳ではない。本実施の形態では、各更新情報が配置されている、プログラムROM407/データROM408のアドレス情報を組込み機器40の内部で管理しておくことで、意図しないROMの消去を抑止する。具体的には、データROM408に格納された対応表を用いて消去処理が行われる。図57は、データROM408に格納される対応表の一例を示す図である。この対応表は、更新情報がプログラムROM407又はデータROM408に書き込まれた際の書き込み先の先頭アドレスと、この先頭アドレスの属する消去ブロック番号とを管理する管理情報である。この対応表は、各更新情報が、プログラムROM407又はデータROM408に格納される際に、組込み機器40により構築及び更新される。
図58は、対応表を用いたROM消去BIOSルーチンの一例を示すフローチャートである。
ステップ5800(S5800)で、変数addrに書換え先頭アドレスを代入する。ここで、書き換え先頭アドレスは、上記図53から図56において示されたデータ書込み先の先頭アドレスに対応する。次に、ステップ5801(S5801)で、上記の対応表からaddrに対応する消去ブロック番号を探し出す。ステップ5802(S5802)で、対応する消去ブロック番号が探し出されたか否かを判定し、探し出された場合、処理はステップ5803へ移行し、探し出されなかった場合、処理は終了する。ステップ5803(S5803)で、消去ブロック番号を変数blknoに代入する。ステップ5804(S5804)で、プログラムROM407又はデータROM408のblkno番のブロックを消去する。
次に更新情報ファイル50の作成手順について説明する。本実施の形態にかかる更新情報ファイル50の作成手順では、上述の図33Aの処理ステップ3305の詳細が、図35A、35Bから図59A、59Bに置き換えられる。図59A、59Bは、図33Aのステップ3305の詳細を示すフローチャートである。以下、図35A、35Bに示した処理とは異なる点について説明し、同様の処理については適宜説明を割愛する。
ステップ5900(S5900)からステップ5903(S5903)までの処理は、図35Aに示したステップ3500からステップ3503までの処理と同様である。
ステップ5904(S5904)において、データ処理部22は、変更のあるデータテーブル数だけ、ステップ5905〜ステップ5908の処理を繰り返す。
ステップ5905(S5905)の処理は、図35Aに示したステップ3505の処理と同様である。
ステップ5906(S5906)で、データ処理部22は、ステップ5905で算出したアドレスに既にデータテーブルが含まれている場合、消去対象のブロックがあると判断し、そのブロック内のデータテーブル変数を、更新内容も含めて書込みデータとする。上述の通り、本実施の形態では、消去対象のブロック番号は、対応表を参照することにより決定されるので、図35Aに示したステップ3506のような消去対象のブロック番号の決定はなされない。ただし、ステップ5905で算出したアドレスに既にデータテーブルが含まれている場合、算出したアドレスを含むブロック番号を算出し、開発環境での消去書換え回数管理に利用する。データ処理部22は、ステップ5905で算出したアドレスにデータテーブルが含まれていない場合、変更のあるデータテーブル全体を書込みデータとする。また、データ処理部22は更新により書き込まれるデータテーブルのデータ長も算出する。
ステップ5907(S5907)で、データ処理部22は、ROM消去及び書込みのドライバを動作させるための以下の引数を用いて、プログラムROM407の消去/書込み処理委譲のインジェクションコード721を生成する。すなわち、当該ドライバプログラムの配置アドレス、当該ドライバへ渡すフレームポインタ、更新により書き込まれるデータの内蔵メモリでの配置位置の先頭アドレス、更新により書き込まれるデータのデータ長、及びステップ5905で算出されたプログラムROM407上の先頭アドレスが引数として用いられる。なお、ここでは、ステップ5906で算出されたブロック番号を引数として渡さずインジェクションコードを生成するが、上述の通り、このインジェクションコードが実行されると、対応表により決定される番号のブロックが消去されることとなる。ステップ5905で算出したアドレスにデータテーブルが含まれていない場合、データ処理部22は、プログラムROM書込み処理委譲のインジェクションコード707を生成する。
ステップ5908(S5908)からステップ5915(S5915)までの処理は、図35A、35Bに示したステップ3509からステップ3516までの処理と同様である。
ステップ5916(S5916)において、データ処理部22は、変更のあるデータテーブル数だけ、ステップ5917〜ステップ5920の処理を繰り返す。
ステップ5917(S5917)の処理は、図35Bに示したステップ3518の処理と同様である。
ステップ5918(S5918)で、データ処理部22は、ステップ5917で算出したアドレスに既にデータテーブルが含まれている場合、消去対象のブロックがあると判断し、そのブロック内のデータテーブル変数を、更新内容も含めて書込みデータとする。上述の通り、本実施の形態では、消去対象のブロック番号は、対応表を参照することにより決定されるので、図35Bに示したステップ3519のような消去対象のブロック番号の決定はなされない。ただし、ステップ5917で算出したアドレスに既にデータテーブルが含まれている場合、算出したアドレスを含むブロック番号を算出し、開発環境での消去書換え回数管理に利用する。データ処理部22は、ステップ5917で算出したアドレスにデータテーブルが含まれていない場合、変更のあるデータテーブル全体を書込みデータとする。また、データ処理部22は更新により書き込まれるデータテーブルのデータ長も算出する。
ステップ5919(S5919)で、データ処理部22は、書込みデータの内蔵メモリでの配置位置の先頭アドレス、書込みデータのデータ長、及びステップ5917で算出した先頭アドレスを引数として、データROM消去/書込み処理委譲のインジェクションコード722を生成する。なお、ここでは、ステップ5918で算出されたブロック番号を引数として渡さずインジェクションコードを生成しているが、上述の通り、このインジェクションコードが実行されると、対応表により決定される番号のブロックが消去されることとなる。ステップ5918で算出したアドレスにデータテーブルが含まれていない場合、データ処理部22は、データROM書込み処理委譲のインジェクションコード708を生成する。
以降、ステップ5920(S5920)からステップ5927(S5927)までの処理は、図35Bに示したステップ3522からステップ3529までの処理と同様である。
このように、本実施の形態では、更新情報に含まれる情報がプログラムROM407又はデータROM408に書き込まれた際の書き込み先アドレスと、この書き込み先アドレスに対応する消去ブロック番号とを管理する管理情報をデータROM408が記憶し、組込み機器40は、プログラムROM407又はデータROM408に記憶された情報の削除の際、この管理情報に示される消去ブロック番号により指定された領域を削除する。したがって、外部から指定された領域を削除する場合に比べセキュリティが向上する。
次に、ROMに対する悪意ある書込み消去に対する対応策について説明する。実施の形態1及び2では、プログラムROM407又はデータROM408への書込みが完了してから署名検証を実施していた。こうした場合、プログラムROM407又はデータROM408への書込み時間が短縮化される。しかし、例えば無意味なデータが流し込まれることにより、フラッシュメモリへの書込みと署名検証の失敗による消去が意図的に繰り返されうる。フラッシュメモリの性質上、頻繁に書込み消去が行われると製品寿命が縮む恐れがある。そこで、本実施の形態では、こうした悪意ある書込み消去を抑止する目的で、署名検証後に書込みを行うプログラムの更新動作例を示す。
本実施の形態では、プログラムROM407/データROM408への書込みの前に署名検証が行われる。そして、プログラムROM407/データROM408への書込みの前に署名検証が行われたか否かをハードウェアにて管理する事で、より堅牢な更新情報の動的な配置を可能とする。図60は、ROMへの書込みの許否を制御する制御回路450の一例を示す模式図である。
本実施の形態において、組込み機器40は、制御回路450を有する。制御回路450は、更新制御レジスタ451、反転回路452、AND回路453、及びOR回路454を有する。更新制御レジスタ451は、「許可」ビット、「f1」ビット、「f2」ビット、「r」ビットを含む。反転回路452には、更新制御レジスタ451の「許可」ビットが入力される。AND回路453には、更新制御レジスタ451の「f1」ビット及び「f2」ビットが入力される。OR回路454には、AND回路453の出力及び反転回路452の出力が入力される。OR回路454の出力は、プログラムROM407/データROM408が有する制御回路である書込みコントローラに入力される。ここで、「許可」ビットは、CPU401が特権モードの時のみ、読み書き可能であり、このビットに‘1’が設定された場合のみ制御回路450による制御が有効となる。「f1」ビットは、プログラムROM407/データROM408への書込みの前に実施されるSRAM406へのデータ転送が完了した事を示すビットである。「f1」ビットは、SRAM406へのデータ転送完了時に‘1’が設定される。「f2」ビットは、署名検証が成功したか否かを示すビットであり、署名検証完了時に‘1’が設定される。「f1」ビットと「f2」ビットは読出しがなされることで‘0’にクリアされる。制御回路450によれば、「許可」ビットを‘1’に設定する事で、制御回路450による制御が有効となり、その後に「f1」ビットと「f2」ビットがともに‘1’に設定されたときのみ、プログラムROM407/データROM408の書込みコントローラが有効化される。制御回路450による制御が有効化されている状態で署名検証がスキップされた場合、プログラムROM407/データROM408の書込みコントローラは無効化されているため、書込みBIOSを何らかの手段で実行したとしても、プログラムROM407/データROM408への書込みは実施されない。「r」ビットには、プログラムROM407/データROM408の書込みコントローラへのイネーブル信号値が書き込まれる。「r」ビットは読出しのみ可能であり、読み出すと‘0’にクリアされる。ここで、制御回路450は、プログラムROM407とデータROM408のそれぞれに対して個別に設けても良い。
次に、制御回路450を用いた動作例について説明する。図61は、制御回路450を用いた書き込みの制御動作の一例を示すフローチャートである。本フローチャートは、ステップ6100が実行された事を契機として処理を開始するものとする。
ステップ6100(S6100)で、実施の形態1又は実施の形態2で説明した更新動作に従い、更新差分プログラムがSRAM406へ転送される。
ステップ6101(S6101)で、転送完了後、CPU401は、「f1」ビットを設定する。ここで、CPU401は、転送が正常終了した場合‘1’を設定し、そうでない場合、‘0’を設定する。
ステップ6102(S6102)で、暗号処理ユニット404(署名検証部)が、更新差分プログラムの署名検証を実施する。
ステップ6103(S6103)で、署名検証完了後、CPU401は、「f2」ビットを設定する。CPU401は、署名検証結果が正常な場合、‘1’を設定し、そうでない場合、‘0’を設定する。
ステップ6104(S6104)で、「許可」ビットが‘1’か否かが確認され、‘1’の場合、処理はステップ6105へ移行し、そうでない場合、処理はステップ6106へ移行する。
ステップ6105(S6105)で、「f1」ビットが‘1’でかつ「f2」ビットが‘1’であるか否かが確認され、双方ともに‘1’の場合、処理はステップ6106へ移行し、そうでない場合、処理はステップ6108へ移行する。
ステップ6106(S6106)で、プログラムROM407/データROM408の書込みコントローラに対し書込み許可を設定し、「r」ビットに‘1’が設定される。
ステップ6107(S6107)で、CPU401は、更新制御レジスタ451を必ず読み出す。読み出す事で、「f1」ビット、「f2」ビット、及び「r」ビットの内容を確認する。また、これら3つのビットが‘0’にクリアされ、そして、処理が終了する。なお、ステップ6107において、書込み処理が完了した場合に、CPU401は、「r」ビットの確認を行うことで、書き込み処理が行われた際に書込みコントローラへのイネーブル信号値が実際に1であったか否かを確認することができる。また、許可ビット以外の全ビットが‘0’にクリアされるため、次の更新差分プログラムのプログラム/データROMへの書込みで、署名検証や転送完了が正常に行われているかのチェックが必須となり、これらチェックをスキップする事での攻撃を排除可能となる。
ステップ6108(S6108)で、「r」ビットに‘0’が設定され、処理はステップ6107へ移行する。
このように、本実施の形態では、組込み機器40は、署名検証結果が正当であることが確認された場合に、プログラムROM407又はデータROM408への更新情報の書き込みを許可する制御回路450を有する。これにより、署名検証結果が不当である更新情報がプログラムROM407又はデータROM408に書き込まれることを抑制し、不当である更新情報に起因するプログラムROM407又はデータROM408の消去処理を抑制することが可能となる。
最後に、本実施の形態における、組込み機器での更新動作について説明する。本実施の形態をプログラムROM407及びデータROM408の面数が3である組込み機器40に適用した場合の更新動作は、図37と同様であるが、以下の点で異なる。また、本実施の形態をプログラムROM407及びデータROM408の面数が2である組込み機器40に適用した場合の更新動作は、図49と同様であるが、以下の点で異なる。すなわち、本実施の形態が適用された場合、図37に示したステップ3701及び図49に示したステップ4902では、管理サーバ30は、更新プログラムのセキュアな動的ロード、即ち本実施の形態で述べたセキュア対応を考慮した、プログラムROM407及びデータROM408への更新プログラムの動的な配置を開始する。
以上、実施の形態3について説明した。本実施の形態によれば、インジェクションコードを悪用したプログラムやデータ消去を抑止可能となり、また、ROMへの悪意ある書込み消去を抑止可能となる。
<実施の形態4>
次に、実施の形態4について説明する。本実施の形態では、組込み機器40での更新情報の動的な配置の途中又は組込み機器40での更新動作の途中で、組込み機器40において電源停止が発生した場合の復旧時の対応方法について説明する。なお、本実施の形態にかかる組込み機器40は、更新情報がプログラムROM407又はデータROM408に格納される際に、更新情報の書き込み先の先頭アドレスと、この先頭アドレスの属する消去ブロック番号とを管理する上述の管理情報をデータROM408に記憶する。図62は、組込み機器40で更新情報の動的な配置又は更新動作の途中で電源停止が発生した場合の復旧処理の一例を示すフローチャートである。以下、フローチャートに沿って説明する。なお、下記のフローにおける組込み機器40の動作は、例えば、CPU401がプログラムROM407等に格納されたファームウェア等のプログラムを実行することにより、実現される。
ステップ6200(S6200)で、組込み機器40は、更新情報の動的な配置、又は配置された更新情報に対する更新動作を開始する。
ステップ6201(S6201)で、更新情報の動的な配置又は更新動作の途中で、組込み機器40において電源遮断が発生する。なお、電源遮断が発生しない場合には、ステップ6200の処理が完了するまで継続されることとなる。
ステップ6202(S6202)で、組込み機器40の電源が復帰し、組込み機器40が再起動する。
ステップ6203(S6203)で、組込み機器40は、対応表を確認し、プログラムROM407又はデータROM408の消去ブロック番号が識別可能であるかを確認する。具体的には、組込み機器40は、更新情報の配置毎に作成される上記対応表のうち、電源遮断の直前の更新情報の配置において作成された対応表を参照することにより確認する。
ステップ6204(S6204)で、上記識別が成功した場合には、処理はステップ6207へ移行し、そうでない場合、処理はステップ6205へ移行する。ここで、ステップ6203における識別が成功することは、電源遮断の直前の更新情報の配置において電源遮断の発生までの間に書き込まれた情報について、書き込み先のブロックの確認ができたことを意味する。ところで、上述のように、更新情報の書込みの際、書込み先に既にデータが格納されている場合には、書き込み先のブロックを消去した上で、書き込みが実施されるよう更新情報ファイル50は構成されている。このため、電源遮断の発生までの間に更新情報がプログラムROM407又はデータROM408に書き込まれた場合、そのままの更新情報ファイル50でこの更新を再度やり直すことができなくなる。これは、データが格納されていないはずの書込み先にデータ書き込まれてしまっている可能性があるためである。しかし、電源遮断の発生までの間に書き込まれた位置が特定できる場合には、書き込み先のブロックを消去することで、このような問題が解消される。すなわち、更新情報ファイル50の修正を行うことなく、更新情報の配置をやり直すことが可能となる。
ステップ6205(S6205)で、組込み機器40は、デフォルトプログラムによる動作へのロールバック処理を実施する。
ステップ6206(S6206)で、開発環境20において、電源遮断前に生成した更新情報の再構成が行われる。ここでは、更新情報が全て書込まれているものと仮定して、再構成が行われる。つまり、プログラムROM407又はデータROM408における書込み先にデータが既に格納されていると仮定した上で、再構成が行われる。この再構成では、具体的には、書き込み先のブロックに対する消去処理を追加した更新情報ファイル50が生成される。その後、処理は、ステップ6200へ移行し、再構成された更新情報に基づく、更新情報の動的な配置、及び更新動作が行われる。なお、ステップ6206では、ネットワークを介した管理サーバ30への通知及び管理サーバ30から開発環境20への通知がなされ、更新情報が再構成されるとしても良いし、開発環境20へは通知せずに、管理サーバ30上で上述の再構成が行われてもよい。
ステップ6207(S6207)では、組込み機器40は、ステップ6203で識別したブロック消去番号を用いてプログラムROM407又はデータROM408のブロックの消去を実施する。その後、処理は、ステップ6200へ移行し、電源遮断前に生成した更新情報に基づく、更新情報の動的な配置、及び更新動作が行われる。
このように、本実施の形態にかかる組込み機器40においては上述の管理情報を記憶しており、プログラムROM407若しくはデータROM408に対する更新情報の書き込みの際、又は更新情報の適用動作の際に電源が停止した場合、電源回復後、管理情報が参照可能であるときこの管理情報に従って電源停止前に書き込まれた更新情報を削除する。本実施の形態によれば、電源遮断が発生しても、再起動後の適切な更新を実現することができる。特に、対応表を用いた書き込み先の特定が行われることで消去すべきブロックが特定されるため、更新情報の再構成を行うことなく、再起動後の適切な更新を実現することができる。なお、本実施の形態は、実施の形態1、2、及び3のいずれとも組み合わせることができる。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。例えば、実施の形態1では、ROMの面数が3である場合について説明したが、4以上であってもよい。
1、40 組込み機器
2 ネットワーク入出力部
3 不揮発性メモリ
4 CPU
5 アドレス変換器
10 情報システム
15 ネットワーク
20 開発環境
22、33 データ処理部
30 管理サーバ
35 ネットワーク接続部
50 更新情報ファイル
70、701、702、703、704、705、706、707、708、709、710、711、712、713、714、715、716、720、721、722、723 インジェクションコード
400 制御対象装置
401 CPU
402、402A、402Bアドレス変換器
403 割込みコントローラ
404 暗号処理ユニット
405 DMAコントローラ
406 SRAM
407、412 プログラムROM
408 データROM
409 CANインターフェース
410 入出力インターフェース
411 サブCPU
440、443 汎用割込みベクタテーブル
441、444 専用割込みベクタテーブル
442 プログラム更新作業領域
450 制御回路
451 更新制御レジスタ

Claims (10)

  1. ネットワークを介して更新情報を受信するネットワーク入出力部と、
    独立して読み出し及び書き込みが可能な複数の面を備えた第1の不揮発性メモリと、
    独立して読み出し及び書き込みが可能な複数の面を備えた第2の不揮発性メモリと、
    前記第1の不揮発性メモリに配置されたプログラムを実行するCPUと、
    前記ネットワーク入出力部により受信された更新情報に含まれたアドレス変換テーブルを用いてアドレス変換を行う第1のアドレス変換器と
    前記ネットワーク入出力部により受信された更新情報に含まれたアドレス変換テーブルを用いてアドレス変換を行う第2のアドレス変換器と
    を有し、
    前記CPUは、前記第2の不揮発性メモリに配置されたデータを用いて前記第1の不揮発性メモリに配置されたプログラムを実行し、
    前記第1の不揮発性メモリは、第1の面にデフォルトプログラムが配置され、第2の面に、前記ネットワーク入出力部により受信された更新情報に含まれた、前記デフォルトプログラムに対する差分プログラムが配置され、
    前記第2の不揮発性メモリは、第1の面にデフォルトデータが配置され、第2の面に、前記ネットワーク入出力部により受信された更新情報に含まれた、前記デフォルトデータに対する差分データが配置され、
    前記第1のアドレス変換器は、前記CPUにより命令がデコードされることによって取得されたアドレスが、前記デフォルトプログラムにおける変更箇所に対応するアドレスである場合に、該アドレスを前記差分プログラムが配置されたアドレスへと変換し、
    前記第2のアドレス変換器は、前記CPUにより命令がデコードされることによって取得されたアドレスが、前記デフォルトデータにおける変更箇所に対応するアドレスである場合に、該アドレスを前記差分データが配置されたアドレスへと変換し、
    前記CPUは、前記第1のアドレス変換器により変換されたアドレスに従って前記差分プログラムを実行し、
    前記CPUは、前記第2のアドレス変換器により変換されたアドレスに従って前記差分データを用いた処理を実行する
    組込み機器。
  2. 前記第1の不揮発性メモリの面数が3以上である
    請求項1に記載の組込み機器。
  3. 前記第1のアドレス変換器は、前記CPUにより命令がデコードされることによって取得されたアドレスにおける予め定められたビット数の上位ビット列を変更し、かつ、変更された上位ビット列と前記アドレスの下位ビット列とを連結することにより、前記差分プログラムが配置されたアドレスへと変換する
    請求項1に記載の組込み機器。
  4. 前記デフォルトプログラムにおける置換対象部分のコードのサイズよりも、前記置換対象部分のコードの代わりとなる差分コードのサイズが大きい場合、又は、前記置換対象のコードのサイズ若しくは前記差分コードのサイズが、前記予め定められたビット数に対応するメモリ領域の大きさであるセグメントサイズより大きい場合、前記第1のアドレス変換器は、前記置換対象部分のコードの開始アドレスを所定のアドレスへと変換し、
    前記所定のアドレスは、前記置換対象部分のコードに代わる命令列の開始アドレスへのジャンプ命令に関わる命令が記憶されたアドレスである
    請求項3に記載の組込み機器。
  5. 前記更新情報についての署名検証を行う署名検証部をさらに有し、
    前記CPUは、前記署名検証部により正当であることが確認された場合、前記差分プログラムを実行する
    請求項1に記載の組込み機器。
  6. 前記第2の不揮発性メモリは、前記更新情報に含まれる情報が前記第1の不揮発性メモリ又は前記第2の不揮発性メモリに書き込まれた際の書き込み先アドレスと、該アドレスに対応する消去ブロック番号とを管理する管理情報を記憶し、
    前記第1の不揮発性メモリ又は前記第2の不揮発性メモリに記憶された情報の削除の際、前記管理情報に示される消去ブロック番号により指定された領域が削除される
    請求項に記載の組込み機器。
  7. 前記署名検証部により正当であることが確認された場合、前記更新情報の前記第1の不揮発性メモリへの書き込みを許可する制御回路をさらに有する
    請求項に記載の組込み機器。
  8. 前記ネットワーク入出力部は、既に前記第1の不揮発性メモリに配置された更新情報と重複する部分を除く更新情報を受信し、
    前記第1の不揮発性メモリには、既に配置されている前記重複する部分に加え、前記重複する部分が除かれた前記差分プログラムが新たに配置される
    請求項1に記載の組込み機器。
  9. 前記第2の不揮発性メモリは、前記更新情報に含まれる情報が前記第1の不揮発性メモリ又は前記第2の不揮発性メモリに書き込まれた際の書き込み先アドレスと、該アドレスに対応する消去ブロック番号とを管理する管理情報を記憶し、
    前記更新情報の前記第1の不揮発性メモリ若しくは前記第2の不揮発性メモリへの書き込みの際、又は前記更新情報の適用動作の際に電源が停止した場合、電源回復後、前記管理情報が参照可能であるとき前記管理情報に従って電源停止前に書き込まれた前記更新情報が削除される
    請求項に記載の組込み機器。
  10. ネットワークを介して更新情報を受信するネットワーク入出力部と、
    独立して読み出し及び書き込みが可能な複数の面を備えた第1の不揮発性メモリと、
    前記第1の不揮発性メモリに配置されたプログラムを実行するCPUと、
    前記ネットワーク入出力部により受信された更新情報に含まれたアドレス変換テーブルを用いてアドレス変換を行う第1のアドレス変換器と
    を有し、
    前記第1の不揮発性メモリは、第1の面にデフォルトプログラムが配置され、第2の面に、前記ネットワーク入出力部により受信された更新情報に含まれた、前記デフォルトプログラムに対する差分プログラムが配置され、
    前記第1のアドレス変換器は、前記CPUにより命令がデコードされることによって取得されたアドレスが、前記デフォルトプログラムにおける変更箇所に対応するアドレスである場合に、該アドレスを前記差分プログラムが配置されたアドレスへと変換し、
    前記CPUは、前記第1のアドレス変換器により変換されたアドレスに従って前記差分プログラムを実行し、
    前記ネットワーク入出力部は、前記差分プログラムに加え、プログラム復元ポイントを構成する情報を含む前記更新情報を受信する
    組込み機器。
JP2016038574A 2016-03-01 2016-03-01 組込み機器 Active JP6609199B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2016038574A JP6609199B2 (ja) 2016-03-01 2016-03-01 組込み機器
KR1020170025009A KR20170102425A (ko) 2016-03-01 2017-02-24 내장 기기 및 프로그램의 갱신 방법
EP17158031.9A EP3214545B1 (en) 2016-03-01 2017-02-27 Embedded device and program updating method
US15/445,510 US10642596B2 (en) 2016-03-01 2017-02-28 Embedded device and program updating method
CN201710126476.3A CN107145362B (zh) 2016-03-01 2017-03-01 嵌入式设备以及程序更新方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016038574A JP6609199B2 (ja) 2016-03-01 2016-03-01 組込み機器

Publications (2)

Publication Number Publication Date
JP2017156908A JP2017156908A (ja) 2017-09-07
JP6609199B2 true JP6609199B2 (ja) 2019-11-20

Family

ID=58191317

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016038574A Active JP6609199B2 (ja) 2016-03-01 2016-03-01 組込み機器

Country Status (5)

Country Link
US (1) US10642596B2 (ja)
EP (1) EP3214545B1 (ja)
JP (1) JP6609199B2 (ja)
KR (1) KR20170102425A (ja)
CN (1) CN107145362B (ja)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10019567B1 (en) * 2014-03-24 2018-07-10 Amazon Technologies, Inc. Encoding of security codes
US10140117B2 (en) * 2016-06-30 2018-11-27 Microsoft Technology Licensing, Llc Fault-tolerant variable region repaving during firmware over the air update
US10185553B2 (en) * 2016-06-30 2019-01-22 Microsoft Technology Licensing, Llc Fault-tolerant variable region repaving during firmware over the air update
EP3435617B1 (en) * 2017-07-24 2021-05-26 Nxp B.V. A node, a vehicle, an integrated circuit and method for updating at least one rule in a controller area network
WO2019021064A1 (en) 2017-07-25 2019-01-31 Aurora Labs Ltd CONSTRUCTION OF SOFTWARE DELTA UPDATES FOR VEHICLE ECU SOFTWARE AND TOOL-BASED ANOMALY DETECTION
US10834206B2 (en) * 2018-02-27 2020-11-10 Excelfore Corporation Broker-based bus protocol and multi-client architecture
JP7231807B2 (ja) * 2018-04-27 2023-03-02 日本電信電話株式会社 通信装置及び情報処理方法
US20190370439A1 (en) * 2018-05-29 2019-12-05 Sunasic Technologies, Inc. Secure system on chip for protecting software program from tampering, rehosting and piracy and method for operating the same
CN108920168B (zh) * 2018-06-15 2022-03-11 先进储能材料国家工程研究中心有限责任公司 支持多个同类ECU同时升级且具防程序不匹配功能的Bootloader方法
CN110737603B (zh) * 2018-07-18 2023-08-01 炬力(珠海)微电子有限公司 一种替换rom中函数的方法及装置
JP7346956B2 (ja) * 2018-08-10 2023-09-20 株式会社デンソー 車両用プログラム書換えシステム、車両用マスタ装置、進捗状態の同期制御方法及び進捗状態の同期制御プログラム
JP7354631B2 (ja) * 2018-08-10 2023-10-03 株式会社デンソー 電子制御装置、車両用電子制御システム、差分データの整合性判定方法及び差分データの整合性判定プログラム
JP7439402B2 (ja) * 2018-08-10 2024-02-28 株式会社デンソー 表示制御装置、書換え進捗状況の表示制御方法及び書換え進捗状況の表示制御プログラム
JP7115429B2 (ja) * 2018-08-10 2022-08-09 株式会社デンソー 車両用マスタ装置、ロールバックの実行制御方法及びロールバックの実行制御プログラム
JP7047819B2 (ja) * 2018-08-10 2022-04-05 株式会社デンソー 電子制御装置、車両用電子制御システム、アクティベートの実行制御方法及びアクティベートの実行制御プログラム
JP6973450B2 (ja) * 2018-08-10 2021-12-01 株式会社デンソー 車両用マスタ装置、インストールの指示判定方法及びインストールの指示判定プログラム
JP6823027B2 (ja) * 2018-09-18 2021-01-27 ファナック株式会社 数値制御装置
US11561786B2 (en) * 2018-12-04 2023-01-24 Mitsubishi Electric Corporation Update management device, update management system, and update management method
US10866747B2 (en) 2019-02-10 2020-12-15 Hewlett Packard Enterprise Development Lp Securing a memory drive
US11086769B2 (en) 2019-03-25 2021-08-10 Aurora Labs Ltd. Proving whether software functionality has changed following a software change
US10871960B2 (en) * 2019-04-23 2020-12-22 EMC IP Holding Company LLC Upgrading a storage controller operating system without rebooting a storage system
JP7263101B2 (ja) * 2019-04-26 2023-04-24 キヤノン株式会社 情報処理装置、データ検証方法
JP7331456B2 (ja) 2019-05-22 2023-08-23 株式会社デンソー 車両用装置
WO2020261340A1 (ja) * 2019-06-24 2020-12-30 日本電信電話株式会社 情報処理装置、制御方法及び制御プログラム
US11016755B2 (en) * 2019-07-31 2021-05-25 Dell Products L.P. System and method to secure embedded controller flashing process
CN110413348B (zh) * 2019-07-31 2023-01-06 中国工商银行股份有限公司 数据处理方法、装置、系统及介质
JP6821101B1 (ja) * 2019-09-12 2021-01-27 三菱電機株式会社 数値制御装置
CN110750283B (zh) * 2019-10-15 2023-05-02 青岛易触科技有限公司 一种自动售货机驱动程序远程升级方法及系统
CN113448596A (zh) * 2020-03-24 2021-09-28 上海汽车集团股份有限公司 一种车辆控制器刷写系统、方法及相关设备
KR20220028879A (ko) * 2020-08-31 2022-03-08 현대자동차주식회사 차량의 ecu 업데이트 관리 장치 및 그 방법
CN112596769A (zh) * 2020-12-21 2021-04-02 潍柴动力股份有限公司 一种变量管理方法及装置
CN113110860B (zh) * 2021-04-29 2024-05-24 苏州大学 一种嵌入式终端远程软件更新方法
US11644980B2 (en) * 2021-06-22 2023-05-09 Intel Corporation Trusted memory sharing mechanism
CN113553090B (zh) * 2021-07-26 2023-07-25 网易(杭州)网络有限公司 客户端应用程序的更新控制方法及装置
US11709937B2 (en) * 2021-08-25 2023-07-25 International Business Machines Corporation Inactivating basic blocks of program code to prevent code reuse attacks
CN114063931B (zh) * 2021-11-26 2023-04-25 重庆科创职业学院 一种基于大数据的数据存储方法
JP2023085002A (ja) * 2021-12-08 2023-06-20 株式会社オートネットワーク技術研究所 車載装置、プログラム、プログラムの更新方法、及び車載更新システム
CN114546445B (zh) * 2022-02-24 2024-05-24 重庆长安汽车股份有限公司 一种基于微服务架构的整车ota控制器升级系统及方法

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0772863B2 (ja) * 1986-10-30 1995-08-02 日本電気株式会社 プログラムカウンタ相対アドレス計算方式
JPH10260845A (ja) * 1997-03-19 1998-09-29 Fujitsu Ltd ファームウェアの更新処理機能を有するマルチcpuシステム
US6952823B2 (en) * 1998-09-01 2005-10-04 Pkware, Inc. Software patch generator using compression techniques
JP2001005658A (ja) * 1999-06-18 2001-01-12 Toshiba Corp 組込型データ処理システムおよびシステムプログラム修正方法
JP2001125781A (ja) * 1999-10-29 2001-05-11 Matsushita Electric Ind Co Ltd マイクロプロセッサ、およびマイクロプロセッサにおけるプログラム変更方法
US7082549B2 (en) 2000-11-17 2006-07-25 Bitfone Corporation Method for fault tolerant updating of an electronic device
JP2002312186A (ja) * 2001-04-16 2002-10-25 Matsushita Electric Ind Co Ltd 情報処理機器、そのファームウェア及びそのファームウェア書き換え方法
JP2003208359A (ja) * 2002-01-16 2003-07-25 Mitsubishi Electric Corp マイクロコンピュータ
JP3702231B2 (ja) * 2002-01-31 2005-10-05 株式会社東芝 ディスクアレイ装置及び同装置における動的記憶容量拡張方法
US7007049B2 (en) * 2002-11-18 2006-02-28 Innopath Software, Inc. Device memory management during electronic file updating
WO2004061551A2 (en) * 2002-12-18 2004-07-22 Bitfone Corporation Mobile handset with a fault tolerant update agent
US7269707B2 (en) * 2003-01-10 2007-09-11 Texas Instruments Incorporated Multiple patches to on-chip ROM in a processor with a multilevel memory system without affecting performance
JP2006018412A (ja) * 2004-06-30 2006-01-19 Fujitsu Ltd アドレス生成器および演算回路
US20070106873A1 (en) * 2005-11-04 2007-05-10 Stratus Technologies Bermuda Ltd. Apparatus and method for translating addresses
JP2007219883A (ja) * 2006-02-17 2007-08-30 Sony Ericsson Mobilecommunications Japan Inc 移動端末装置およびソフトウェア更新方法
CN101068212B (zh) * 2007-06-11 2010-12-29 中兴通讯股份有限公司 一种网络地址转换转发的装置及方法
US20090031121A1 (en) * 2007-07-24 2009-01-29 Via Technologies Apparatus and method for real-time microcode patch
US7844785B2 (en) * 2007-10-22 2010-11-30 Qimonda Ag Method and apparatus for memory access optimization
US8839225B2 (en) * 2008-01-23 2014-09-16 International Business Machines Corporation Generating and applying patches to a computer program code concurrently with its execution
JP5297848B2 (ja) 2009-03-18 2013-09-25 株式会社日立ソリューションズ プログラム動的更新システム、管理サーバ、組込み機器及びプログラム
JP5342302B2 (ja) * 2009-03-30 2013-11-13 株式会社日立ソリューションズ ファームウェア更新システム、ファームウェア配信サーバ、及びプログラム
CN102135859A (zh) * 2010-01-22 2011-07-27 智多星电子科技有限公司 用于差分数据传输的快闪存储卡
US8838935B2 (en) * 2010-09-24 2014-09-16 Intel Corporation Apparatus, method, and system for implementing micro page tables
CN103680610A (zh) * 2012-09-03 2014-03-26 北京兆易创新科技股份有限公司 差分存储NAND Flash存储器写操作的方法及装置
US9229854B1 (en) * 2013-01-28 2016-01-05 Radian Memory Systems, LLC Multi-array operation support and related devices, systems and software
CN104657170A (zh) * 2013-11-25 2015-05-27 腾讯科技(上海)有限公司 一种数据更新方法、装置及系统
KR20150074414A (ko) * 2013-12-24 2015-07-02 현대자동차주식회사 펌웨어 업그레이드 방법 및 그 시스템
US9653184B2 (en) * 2014-06-16 2017-05-16 Sandisk Technologies Llc Non-volatile memory module with physical-to-physical address remapping
US10747449B2 (en) * 2014-07-31 2020-08-18 Toshiba Memory Corporation Reduction of power use during address translation via selective refresh operations
US9864545B2 (en) * 2015-04-14 2018-01-09 Sandisk Technologies Llc Open erase block read automation

Also Published As

Publication number Publication date
CN107145362B (zh) 2021-08-06
EP3214545A1 (en) 2017-09-06
US20170255459A1 (en) 2017-09-07
EP3214545B1 (en) 2018-11-07
JP2017156908A (ja) 2017-09-07
CN107145362A (zh) 2017-09-08
KR20170102425A (ko) 2017-09-11
US10642596B2 (en) 2020-05-05

Similar Documents

Publication Publication Date Title
JP6609199B2 (ja) 組込み機器
US20180173643A1 (en) File Data Access Method and Computer System
KR101213275B1 (ko) 무선 장치에서 사용할모놀리식(monolithic)이미지를 제공하기 위한시스템 및 방법
US20090019437A1 (en) Application management and execution system and method thereof
JP2007058776A (ja) メモリアクセス制御装置
US20100082929A1 (en) Memory protection method, information processing apparatus, and computer-readable storage medium that stores memory protection program
KR20040076589A (ko) 메모리 카드
US20150012732A1 (en) Method and device for recombining runtime instruction
WO2019237866A1 (zh) 一种运行时访问控制方法及计算装置
CN112256396B (zh) 内存管理方法、系统及安全处理装置、数据处理装置
JP5158187B2 (ja) ストレージ装置、ストレージ制御装置およびストレージ制御方法
JP2016157270A (ja) ストレージ制御装置、およびストレージ制御プログラム
JP2014517376A (ja) 安全なデータ格納方法およびデバイス
US9262301B2 (en) Observability control with observability information file
CN111797390B (zh) 程序运行方法、装置、电子设备及计算机可读存储介质
CN113485716A (zh) 防内存越界的程序编译方法及装置
CN101441551B (zh) 计算机、外存储器以及处理外存储器中数据信息的方法
US11922158B2 (en) Unified local patch repository
US10956038B2 (en) Non-volatile memory drive partitions within microcontrollers
KR20170102635A (ko) 어플리케이션 사용패턴을 고려한 프라이버시 보호 방법 및 장치
CN115688119A (zh) 漏洞修复方法、装置、电子设备及存储介质
CN111752475B (zh) 在存储服务器中进行数据存取管理的方法与装置
JP5551868B2 (ja) 実行ファイル作成装置
KR100811559B1 (ko) 비휘발성 메모리의 데이터 저장영역 관리 방법 및 장치
JP7332249B2 (ja) 移行先決定プログラム、装置、及び方法

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160803

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180913

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190625

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190702

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190902

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20191001

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20191025

R150 Certificate of patent or registration of utility model

Ref document number: 6609199

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150