CN1732443B - 用于修补在存储器上驻留的代码和数据的方法和设备 - Google Patents

用于修补在存储器上驻留的代码和数据的方法和设备 Download PDF

Info

Publication number
CN1732443B
CN1732443B CN200380108019.8A CN200380108019A CN1732443B CN 1732443 B CN1732443 B CN 1732443B CN 200380108019 A CN200380108019 A CN 200380108019A CN 1732443 B CN1732443 B CN 1732443B
Authority
CN
China
Prior art keywords
address
code
rom
vector
register
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.)
Expired - Lifetime
Application number
CN200380108019.8A
Other languages
English (en)
Other versions
CN1732443A (zh
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.)
Google Technology Holdings LLC
Original Assignee
Motorola Inc
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 Motorola Inc filed Critical Motorola Inc
Publication of CN1732443A publication Critical patent/CN1732443A/zh
Application granted granted Critical
Publication of CN1732443B publication Critical patent/CN1732443B/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/328Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for runtime instruction patching
    • 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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0638Combination of memories, e.g. ROM and RAM such as to permit replacement or supplementing of words in one module by words in another module
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • G06F9/262Arrangements for next microinstruction selection
    • G06F9/268Microinstruction selection not based on processing results, e.g. interrupt, patch, first cycle store, diagnostic programs
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching

Abstract

举例说明了一种用于把修补程序应用于驻留在非易失存储器装置上代码或数据的方法和设备。可以由驻留在存储器映象中第二位置的代码来代替驻留在非易失性存储器中第一位置的代码。修补装置把第一代码的第一地址与由预先取出指令识别的地址相比较。如果所述第一地址与由预先取出指令识别的地址相匹配,那么发布预先取出的异常中止以便使由好的代码来代替驻留在第一地址的坏的代码便于进行。可以由向量表中的向量来指向所述好的代码,其中把所述向量的地址动态地载入程序计数器。

Description

用于修补在存储器上驻留的代码和数据的方法和设备
技术领域
本公开涉及存储器装置,并且特别涉及管理在只读存储器(ROM)装置上驻留的软件。
背景技术
存储器装置通常用于计算机及其它电子设备,诸如电话、个人数据助理等,以便存储包括数据和软件程序的各种信息。一般地,常常把需要长时间存储的数据和软件存储在诸如只读存储器(ROM)、可擦除可编程ROM(EPROM)等之类的非易失性存储器装置上。特别地是,很可能把由系统制造商设计的软件程序存储在这种非易失性存储器上,所述软件程序诸如计算机的操作系统,无线装置的操作码等。以永久基础来存储在非易失性存储器装置中的任何信息,以致即使当没有激活所述装置或者长时间没有供电所述装置时,仍然保存这种信息。另一方面,通常可能要求专用设备来改变非易失性存储器装置的内容。
通常,存储在非易失性存储器上的软件程序或数据可能具有永久特性;而实际上,常常十分有必要改变这种软件程序或数据。例如,可以在非易失性存储器装置上存储的软件程序中发现软件错误或病毒。在这种情况下,这种非易失性装置的用户通常将必须在所述非易失性存储器上重新写入整个程序。当已经把这种装置安装在大量的用户设备上时,对存储在非易失性存储器装置上的信息进行这种改变是尤为困难的。例如,如果已经由许多用户使用许多无线电话,其中在这种无线电话的ROM上具有操作码,并且如果出现需要改变部分这种操作码的情况时,那么对于这种无线电话的制造商来说将有必要收回所述电话并且改变它们的操作码,或者它们将必须发行新的无线电话以便所有用户都有正确的代码。
发明内容
根据本发明的一个方面,提供了一种把修补程序应用于驻留在只读存储器(ROM)上的代码的方法,用于用执行驻留在存储器映象内第二地址处的第二代码来替代执行驻留在ROM中第一地址处的第一代码,所述方法包括:在第一寄存器中存储所述第一代码的第一地址;预先取出第一指令;把所述第一指令的地址与所述第一代码的第一地址相比较;如果所述第一指令的地址与所述第一代码的地址相匹配,那么发布预先取出异常中止指令;并且取出所述第二代码的第二地址。
根据本发明的另一方面,提供了一种把修补程序应用于只读存储器(ROM)的方法,用于用驻留在存储器映象内第二地址的第二数据集来替代驻留在ROM中第一地址的第一数据集,所述方法包括:把第一地址存储在第一寄存器中,而把第二地址存储在第二寄存器中;预先取出第一指令;访问驻留在第三地址的、来自ROM的第一数据;把第三地址与第一地址相比较;并且如果所述第三地址与所述第一地址匹配那么用第二地址重写数据总线。
根据本发明的再一方面,提供了一种把修补程序应用于驻留在只读存储器(ROM)上代码的系统,用于用执行驻留在修补程序存储器内第二地址的第二代码来替代执行驻留在ROM中第一地址的第一代码,所述系统包括:第一寄存器,用于存储所述第一代码的第一地址;比较器,用于把所述第一代码的第一地址与在ROM中第一指令的地址相比较;和处理器,用于预先取出所述第一指令,把所述第一指令的地址输入到比较器中,如果所述第一指令的地址与所述第一代码的地址相匹配那么产生预先取出放弃,并且取出所述第二代码的第二地址。
根据本发明的又一方面,提供了一种把修补程序应用于只读存储器(ROM)的系统,用于用驻留在修补程序存储器内第二地址的第二数据集来替代驻留在ROM中第一地址的第一数据集,所述系统包括:第一寄存器,用于存储所述第一数据集的第一地址;比较器,用于把所述第一数据集的地址与来自ROM的第一数据的第一地址相比较;和处理器,用于从所述ROM中预先取出所述第一数据,把所述第一数据的地址输入到比较器中,如果所述第一数据的地址与所述第一数据集的地址相匹配那么产生预先取出放弃,并且取出所述第二数据集的第二地址。
附图说明
在附图中以举例形式而不是限制形式举例说明本专利,其中相同的参考标记表明相似的元素,并且其中:
图1是可以使用非易失性存储器的示例性计算机的框图;
图2是用于修补非易失性存储器一部分的示例性设备的框图;
图3是示例性的存储器扇区,其包含在用于修补非易失性存储器的一部分的方法中使用的向量表;
图4是举例说明用于修补非易失性存储器的一部分的示例性方法的流程图;
图5是举例说明用于修补非易失性存储器的一部分的有关操作码修补方法的流程图;和
图6是由有关操作码修补方法使用的示例性向量表,所述修补方法用于修补非易失性存储器的一部分。
具体实施方式
尽管下文阐述了本专利的大量不同实施例的详细说明,然而应当理解的是,由在本专利末尾所阐述的权利要求来定义本专利的法律范围。只应把详细说明理解为示例性的,并且不描述本专利的每个可能的实施例,这是因为描述每个可能的实施例往往是不切实际的,甚至是不可能的。可以使用现代技术或者在本专利的申请日之后开发出的技术来实施大量替代的实施例,但这仍属于定义本专利的权利要求书的范围。
还应当理解的是,在本专利中除非使用句子“如这里所用,据此定义术语‘____’来意指”或类似的句子来清楚地定义术语,否则除其简单或普通的意思之外,并不意味着明显地或隐含地限制该术语的意思,并且不应该根据在本专利任何部分的任何声明(除权利要求的语言之外)而把这种术语解释为对范围的限制。在这个意义上,在本专利所附权利要求中列举的任何术语指的是在本专利中依照与单个意思一致的方式,其只是为了使其更清楚而不混乱阅读,并且并不意在隐含地或以别的方式来把这种声称的术语限制为单个意思。
使用非易失性存储器来存储代码或数据的计算机或装置有时可能需要改变这种代码或数据。因为在不使用专用装置的情况下很难改变在非易失性存储器中的代码,所以提供了修补装置,其允许在实时操作期间非易失性存储器的一部分由易失或非易失性存储器的另一部分来替代。把在需要替代的易失性存储器上的代码或数据的地址存储在修补装置的寄存器上。由这里描述的例子举例说明的修补装置预先取出指令以便看看所述指令是否访问在可能需要替代的易失性存储器上的数据或代码。如果所述修补装置确定这种替代是必要的,那么它发布预先取出的异常中断指令并且把用于访问来自不同位置的数据或代码的指令加载到数据总线。
图1举例说明了示例性计算机10的框图。如这里所用,术语“计算机”指的是使用任何类型非易失性存储器的任何装置(例如便携式计算机、膝上型计算机、个人数据助理(PDA)、台式计算机、无线电话、服务器等)。本例子的计算机10包含通常用于计算机的许多常规的硬件组件。例如如图1所示,计算机10包括中央处理器(CPU)12、采用只读存储器(ROM)14形式的非易失性存储器、随机存取存储器(RAM)16、通信总线20、存储装置22、电源24和输入/输出(I/O)控制器26。尽管计算机10的本例子示出了这些组件在所述计算机内,但是本领域内普通技术人员将理解这些组件的一部分可以在计算机10外,或者这些组件的一部分可以根本不由计算机使用。例如,在无线电话装置上使用的计算机10的可替换例子可以不包含任何存储装置22。
示例性计算机10的非易失性存储器14可以具有任何替换形式,诸如闪速存储器、EPROM存储器等。如图1所示,ROM 14可以包含部分或所有代码28,诸如用于计算机10的操作系统代码等。作为选择,所述非易失性存储器14还可以包含由计算机10使用的数据30。可以由计算机10的制造商在计算机10上提供代码28,或者也可以由不同于所述计算机10制造商的出售商来提供该代码。一般地,代码28其中不包含任何软件错误或病毒,然而,在计算机10的特定实施方式中,所述代码28可能包含需要修改的一个或多个软件错误或病毒。作为选择,还可能因为许多原因而需要更新包含在非易失性存储器上的数据30,所述原因包括为了有效利用所述计算机10。
图2是用于修补包含在非易失性存储器14上代码28的一部分、或修补包含在非易失性存储器14上的数据30的一部分的示例性修补装置40的框图。可以安装所述修补装置40以致其在计算机10内或在计算机10外。修补装置40还可以利用计算机10的一个或多个组件,诸如RAM 16、通信总线20等。
使用示例性的修补装置40,用在修补存储器50中第二地址48处包含的第二代码46来修补在ROM 14中第一地址44处包含的第一代码42。修补存储器50可以位于修补装置40,或者作为选择,所述修补存储器50可以包含在计算机10的RAM 16中。示例性的修补装置40包括处理器60、第一寄存器62、第二寄存器64、第三寄存器66和比较器68。所述处理器60包括第一逻辑电路70、第二逻辑电路72和程序计数器74。所述修补装置40还包括第三逻辑电路76和第四逻辑电路78。
图3举例说明了包含向量表82的存储器扇区80,其中使用所述向量表82来包含包括第一向量84的多个向量。第一向量84包含驻留在修补存储器46上的第二代码的第二地址48。向量表82可以位于ROM 14、RAM 16或在计算机10上使用的任何其它存储器装置上。使用向量表偏移量86和向量索引90来定义第一向量84的地址,所述向量表偏移量86表明向量表82到存储器扇区80基础88的偏移量,所述向量索引90指定所述第一向量84在向量表82内的偏移量。
返回参照图2,用于修补装置40的处理器60可以是任何普及的处理器,包括复杂指令集代码(CISC)类型处理器,精简指令集代码(RISC)类型处理器等。所举例说明的修补装置40使用ARM7TDMI-S处理器,其是低功率32位RISC处理器,如处理器60。ARM7TDMI-S处理器是改进RISC机器(ARM)类型处理器,其一般用于传呼机、无线手机、个人数据助理(PDA)、数字照相机等。ARM7TDMI-S处理器包括具有用于处理RISC指令的三级流水线的整数核心。ARM7TDMI-S处理器还允许使用ARM指令集以及拇指(thumb)指令集,以及ARM指令集和拇指指令集的组合。在下面的图5中还描述了在修补装置40中使用的ARM7TDMI-S处理器的操作的例子。
使用第一寄存器62来存储第一代码42的第一地址44。作为选择,如果使用修补装置40来修补数据30的一部分,那么可以使用第一寄存器62来存储所述数据30的一部分的第一地址。例如,当用户确定驻留在ROM 14上的第一代码42包含软件错误或病毒并且需要由第二代码46来代替时,或者由于任何其它原因需要由第二代码46来代替所述第一代码42,所述用户把所述第一地址44的位置存储在第一寄存器62中。可以使用任何标准的寄存器设计技术来设计所述第一寄存器62,其为本领域内普通技术人员所公知。依据在修补装置40中使用的处理器60的类型,第一寄存器62可以存储32位地址、64位地址等。在所举例说明的修补装置40中,因为把32位ARM7TDMI-S处理器用作为处理器60,所以第一寄存器62能够保存32位地址。
使用第二寄存器64来存储向量表偏移量86,并且使用第三寄存器66来存储向量索引90。使用比较器68来把由CPU 12执行的代码的地址与第一寄存器62的内容相比较,所述代码诸如第一代码42。下面在图4中进一步描述了比较器68的操作。
使用第一逻辑电路70来把第一向量84加载到程序计数器中。第二逻辑电路72读取第二代码46的第二地址48,其存储在第一向量84中。如下面图4中所描述,第三逻辑电路76使用向量表偏移量86、基础88和向量索引90的值来计算所述第一向量84。当比较器68确定从数据总线20取出的指令的地址与第一地址44匹配时,第四逻辑78用把第一向量84的值加载到程序计数器74的命令来重写数据总线20。在下面的图4中进一步描述了在所述修补装置40内各种逻辑电路的操作。
图4是举例说明用于修补诸如ROM 14之类的非易失性存储器一部分的示例性修补方法100的流程图。所述修补方法100允许用户使用修补装置来修补非易失性存储器的一部分,所述修补装置使用预先取出周期来从连接到计算机CPU的数据总线上获取操作码或数据。使用预先取出周期使所述修补方法100能在几个周期之前认出将要由CPU执行的操作码的地址,并且如果所述操作码的地址指向坏的代码的地址或者坏的数据的地址,那么把预先取出的异常中止指令插入到数据总线上。
在块102,修补装置40的用户把坏的代码的地址存储到第一寄存器62上,所述坏的代码需要被另一代码替换。例如,可以把第一代码42的第一地址44存储在第一寄存器62中。在此修补装置连续地监视数据总线20。
所述数据总线20携带来自在计算机10内各个组件的以及来自附于计算机10的外围设备的指令和数据。例如,来自I/O控制器26的指令可被发送到请求数据的CPU 12。类似地,数据总线20还携带从CPU12到其它组件的指令。这种指令的例子可以是用于从ROM 14在这种指令识别的给定地址上取出确定内容的请求。
往返于CPU 12的指令可以采用通常由计算机使用的各种格式。例如,从CPU 12到ROM 14的指令可以包含操作码和操作数,其中操作码表示实际指令,而操作数包含任何相关联的数据,诸如参考指针或离散值。例如,来自CPU 12用于从ROM 14读取内容的指令中,这种指令的操作码可以包含用于读取ROM 14内容的实际指令,而操作数可以是在ROM 14中位置的地址。
计算机还可以使用预先取出队列来管理指令。例如,所述CPU 12可以在执行许多指令之前读取该指令。计算机可以使用这种预先取出算法来通过使一系列下一指令内部可用来改进性能。
在预先取出算法的一个特定变化中,CPU可以只预先取出计算指令的操作码部分,而不取出操作数部分。修补装置40的示例性实施方式使用类似的预先取出算法来监视数据总线20。
参照图4,在块104,修补装置40预先取出指令的操作码来确定这种指令是否意在从ROM 14中读取数据。如果发现所述指令用于从ROM 14读取内容,那么在块106,修补装置40使用比较器68来把包含在这种指令中的地址与第一寄存器62的内容相比较。
如果比较器68发现从数据总线20取出的指令的地址等于第一寄存器62的内容,那么在块108修补装置40把预先取出的异常中止指令插入到数据总线20上。因为修补装置40使用预先取出来读取指令,所以其识别在从ROM 14读取数据的实际操作之前几个周期,将执行这种操作。由修补装置40所发布的预先取出异常中止指令防止由CPU12读取ROM 14的内容。从而例如,如果把第一地址44存储在第一寄存器62中,那么每当修补装置发现用于读取第一地址44的内容的指令时,其将发布预先取出异常中止以便防止这样读取第一地址44的内容。
预先取出异常中止指令使修补装置40的处理器60产生异常。依据预先取出异常中止指令的类型,在块110,所述修补装置40确定什么指令写入数据总线20。例如,在特定的实施方式中,在块112,修补装置可以把用于从在ROM 14或RAM 16内修改位置读取数据的指令来加载到数据总线20。该修补方法被称为硬件加速修补。
在可替换实施方式中,在块114,所述修补装置40可以用第二指令加载数据总线20,所述第二指令用于使用有关操作码修补方法来从第二地址48取出数据。在图5中进一步描述了有关操作码修补方法114的运行。在块116,终止预先取出异常中止并且数据总线从由硬件加速修补或由有关操作码修补方法指定的地址取出所述内容。
无论修补装置40使用有关操作码修补方法还是硬件加速修补,都有必要使由好的代码执行的第一指令应该使得当完成执行代码时,从紧接着第一代码44的位置取出下一指令。例如,如果使用有关操作码修补方法以便加载数据总线20来从第二地址48取出内容,那么存储在第二地址48的代码应该是这样以致当完成执行第二代码46时,取出在紧接着第一代码42位置存储的指令。
因此,在块118,修补装置40在由修补装置40提供的RAM 16或许多临时寄存器中的位置上保存由CPU 12使用的各个状态寄存器的内容。在执行第二代码46之前的情况下,使用各个状态寄存器的内容来重建CPU 12。
在此,CPU 12将执行第二代码46,如块120所示。在完成执行第二代码46时,所述第二代码46必须确保能够还原CPU 12的所有状态寄存器,以致不影响在第一代码42的末尾正常执行代码。在块122,把CPU 12的这种状态寄存器还原到其原始情况。在此,CPU 12继续正常执行来自ROM 14的代码。从而,在块124,CPU执行来自ROM 14的、在第一代码42之后的代码。
图5举例说明了示例性的流程图130,用于实现可以在图4的块114使用的有关操作码修补方法。有关操作码修补方法允许修补装置40用位于RAM 16中不同位置的代码或数据来代替ROM 14的代码或存储器修补程序。有关操作码修补方法使用来自向量表82的各个向量来获得好的代码的地址,所述好的代码将代替在所述存储器中坏的代码。作为选择,所述向量表82还可以用于有关操作码修补方法以便获得将代替坏的数据的好的数据。
现在参照图5,在块132,所述修补装置40从第二寄存器64读取向量表偏移量86。如上所述,向量表偏移量86表明向量表82到存储器扇区80基础88的偏移量。接下来在块134,所述修补装置40从第三寄存器66读取向量索引90。如上所述,所述向量索引90指定在向量表82内第一向量84的偏移量。使用向量表偏移量86和向量索引90的值,在块136,所述修补装置40确定第一向量84的值。
可见看出使用这种有关操作码修补允许把许多不同的值分配给所述第一向量84。随后,分配给第一向量84的各个值中的每一个对应于不同的位置,在所述位置好的代码可以位于所述存储器上。因此位于许多位置的好的代码可用于代替在ROM 14中坏的代码。例如,可以把六十四个不同的值分配给第一向量84,然后六十四个唯一的好的代码可用于代替所述第一代码42。
在图6中举例说明了许多好的代码160的这种使用。图6还举例说明了向量表82的特定例子,所述向量表82可以位于在存储器扇区80中的任何位置,其中可以通过其向量表偏移量86来识别所述向量表82。在图6中举例说明的向量表82包含许多向量,诸如向量151、向量152、向量153,这些向量中的每个通过它们唯一的向量索引90来识别。如图6所示,向量151指向第一好的代码161,向量152指向第二好的代码162等。从而,使用向量表偏移量86和向量索引90的组合,在ROM 14中坏的代码可以由来自许多好的代码160中的任何好的代码161、162等来代替。
现在返回参照图5,在块138,所述修补装置40用命令来重写数据总线20,所述命令把如在块136计算的第一向量84值加载程序计数器74。这种命令的例子可以是“LDR PC,[PC,#-(276-4*(向量索引90)+4*(向量表偏移量86))]”。如果基础88的值是0x0000_000C,那么这种命令将使程序计数器74用位于0xFFFF_FF00+4*(向量索引90)的向量来加载。随后在块140,存储在这种向量中好的代码的地址位于0xFFFF_FF00+4*(向量索引90)。
在此,修补装置40开始准备执行好的代码,起始于图4的块118。如从上面说明可以看出,修补装置40可用于用在RAM或其它存储设备内好的代码来代替在ROM或其它非易失性存储器内坏的代码。尽管在上述例子中,代替驻留在非易失性存储器上的代码或数据,在实践中甚至可以通过使用上述修补装置或修补方法来代替驻留在易失性存储器上的代码或数据。
在上述说明中,参考具体实施例已经描述了本专利。然而,一个本领域内普通技术人员将理解在不脱离如下面权利要求所阐明的本专利范围的情况下,可以对这些实施例进行各种修改和改变。据此,应当认为说明书和附图是说明性的而并非是限制性的,并且所有这种修改意在包括在本专利的范围内。

Claims (20)

1.一种把修补程序应用于驻留在只读存储器(ROM)上的代码的方法,用于用执行驻留在存储器映象内第二地址处的第二代码来替代执行驻留在ROM中第一地址处的第一代码,所述方法包括:
在第一寄存器中存储所述第一代码的第一地址;
预先取出第一指令;
把所述第一指令的地址与所述第一代码的第一地址相比较;
如果所述第一指令的地址与所述第一代码的地址相匹配,那么发布预先取出异常中止指令;并且
取出所述第二代码的第二地址。
2.如权利要求1所述的方法,其中取出所述第二代码的第二地址包括:
用第一向量来加载程序计数器,所述第一向量包含所述第二代码的第二地址;并且
从由所述第一向量指向的位置读取所述第二代码的第二地址。
3.如权利要求2所述的方法,其中用所述第一向量来加载所述程序计数器包括:
从第二寄存器读取向量表偏移量,其中所述向量表偏移量指定包括许多向量的向量表的偏移量;
从第三寄存器读取向量索引,其中所述向量索引指定在所述向量表内第一向量的偏移量;
使用所述向量表偏移量和向量索引来确定所述第一向量的值;并且
用命令来重写数据总线,所述命令用于用第一向量加载所述程序计数器。
4.如权利要求3所述的方法,还包括:
把多个当前状态寄存器的内容保存到多个保存的状态寄存器;并且
执行所述第二代码。
5.如权利要求4所述的方法,还包括:
在完成执行第二代码时,把所述多个保存的状态寄存器中的内容还原为对应的所述多个当前状态寄存器;并且
按照第一代码来执行在ROM中的程序。
6.如权利要求5所述的方法,使用32位改进的精简指令集代码(RISC)机器(ARM)处理器来实现。
7.如权利要求1所述的方法,其中取出所述第二代码的位置包括:
把所述第二代码的第二地址存储在第二寄存器中;并且
运行处理程序以便从所述第二寄存器读取所述第二代码的第二地址。
8.一种把修补程序应用于只读存储器(ROM)的方法,用于用驻留在存储器映象内第二地址的第二数据集来替代驻留在ROM中第一地址的第一数据集,所述方法包括:
把第一地址存储在第一寄存器中,而把第二地址存储在第二寄存器中;
预先取出第一指令;
访问来自ROM并且驻留在第三地址的第一数据;
把第三地址与第一地址相比较;并且
如果所述第三地址与所述第一地址匹配那么用第二地址重写数据总线。
9.如权利要求8所述的方法,其中所述第一数据集驻留在非易失性存储器上。
10.如权利要求9所述的方法,其中所述非易失性存储器是只读存储器(ROM)。
11.一种把修补程序应用于驻留在只读存储器(ROM)上代码的系统,用于用执行驻留在修补程序存储器内第二地址的第二代码来替代执行驻留在ROM中第一地址的第一代码,所述系统包括:
第一寄存器,用于存储所述第一代码的第一地址;
比较器,用于把所述第一代码的第一地址与在ROM中第一指令的地址相比较;和
处理器,用于预先取出所述第一指令,把所述第一指令的地址输入到比较器中,如果所述第一指令的地址与所述第一代码的地址相匹配那么产生预先取出放弃,并且取出所述第二代码的第二地址。
12.如权利要求11所述的系统,其中所述处理器包括:
程序计数器,用于存储包含第二代码的第二地址的第一向量,
第一逻辑电路,用于把第一向量加载到所述程序计数器中;和
第二逻辑电路,用于从由第一向量指向的位置读取所述第二代码的第二地址。
13.如权利要求12所述的系统,还包括:
第二寄存器,用于存储向量表偏移量,所述向量表偏移量指定包括许多向量的向量表的偏移量;
第三寄存器,用于存储向量索引,所述向量索引指定在所述向量表内第一向量的偏移量;
第三逻辑电路,用于使用所述向量表偏移量和向量索引来确定第一向量的值;和
第四逻辑电路,用于用命令重写数据总线,所述命令用于用第一向量加载所述程序计数器。
14.如权利要求13所述的系统,其中所述处理器还用于把多个当前状态寄存器的内容保存到多个保存的状态寄存器,并且用于执行所述第二代码。
15.如权利要求14所述的系统,其中在完成执行第二代码时,所述处理器还用于把所述多个保存的状态寄存器的内容还原为对应的多个当前状态寄存器,并且执行在第一代码之后的ROM修补程序中的程序。
16.如权利要求15所述的系统,其中所述处理器是32位改进精简指令集(RISC)机器(ARM)处理器。
17.如权利要求15所述的系统,其中所述向量表位于随机存取存储器(RAM)。
18.如权利要求15所述的系统,其中所述处理器用于在其执行第二代码至少两个周期之前预先取出第一指令。
19.一种把修补程序应用于只读存储器(ROM)的系统,用于用驻留在修补程序存储器内第二地址的第二数据集来替代驻留在ROM中第一地址的第一数据集,所述系统包括:
第一寄存器,用于存储所述第一数据集的第一地址;
比较器,用于把所述第一数据集的地址与来自ROM的第一数据的第一地址相比较;和
处理器,用于从所述ROM中预先取出所述第一数据,把所述第一数据的地址输入到比较器中,如果所述第一数据的地址与所述第一数据集的地址相匹配那么产生预先取出放弃,并且取出所述第二数据集的第二地址。
20.如权利要求19所述的系统,其中所述处理器包括:
程序计数器,用于存储包含第二数据集的第二地址的第一向量,
第一逻辑电路,用于把第一向量加载到所述程序计数器中;和
第二逻辑电路,用于从由第一向量指向的位置读取所述第二代码的第二地址。
CN200380108019.8A 2002-12-31 2003-12-09 用于修补在存储器上驻留的代码和数据的方法和设备 Expired - Lifetime CN1732443B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/334,260 2002-12-31
US10/334,260 US6931477B2 (en) 2002-12-31 2002-12-31 Method and apparatus for patching code and data residing on a memory
PCT/US2003/039383 WO2004061585A2 (en) 2002-12-31 2003-12-09 Method and apparatus for patching code and data residing on a memory

Publications (2)

Publication Number Publication Date
CN1732443A CN1732443A (zh) 2006-02-08
CN1732443B true CN1732443B (zh) 2010-04-28

Family

ID=32654995

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200380108019.8A Expired - Lifetime CN1732443B (zh) 2002-12-31 2003-12-09 用于修补在存储器上驻留的代码和数据的方法和设备

Country Status (5)

Country Link
US (1) US6931477B2 (zh)
CN (1) CN1732443B (zh)
AU (1) AU2003297866A1 (zh)
BR (1) BR0317846A (zh)
WO (1) WO2004061585A2 (zh)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7062598B1 (en) * 2003-04-29 2006-06-13 Advanced Micro Devices, Inc. Bypass custom array and related method for implementing ROM fixes in a data processor
TW200513850A (en) * 2003-10-13 2005-04-16 Design Technology Inc G Patch and expansion method of memory program for digital signal processor
US7596721B1 (en) * 2004-01-09 2009-09-29 Maxtor Corporation Methods and structure for patching embedded firmware
US7424570B2 (en) * 2004-04-08 2008-09-09 Incard Sa Method for patching ROM instructions in an electronic embedded system including at least a further memory portion
DE602005005289T2 (de) * 2005-01-31 2009-07-09 Stmicroelectronics S.R.L., Agrate Brianza Verfahren, System und Computerprogrammprodukt zur Korrektur von Fehlern in einem Festwertspeicher
US7464248B2 (en) * 2005-04-25 2008-12-09 Mediatek Incorporation Microprocessor systems and bus address translation methods
TW200719142A (en) * 2005-11-08 2007-05-16 Mstar Semiconductor Inc Content correction method of an ROM build-in program code
US7739469B2 (en) * 2005-11-08 2010-06-15 Freescale Semiconductor, Inc. Patching ROM code
US7984432B2 (en) * 2006-05-30 2011-07-19 Infineon Technologies Ag Method for patching a read-only memory and a data processing system comprising a means of patching the read-only memory based on patch contexts
JP2008198060A (ja) * 2007-02-15 2008-08-28 Seiko Epson Corp 情報処理装置、パッチコード実装システム、電子機器及びパッチコードの実装方法
US8266597B2 (en) * 2008-06-16 2012-09-11 International Business Machines Corporation Dynamically patching computer code using breakpoints
JP2010140167A (ja) * 2008-12-10 2010-06-24 Toshiba Corp 半導体集積回路
US8689204B2 (en) * 2009-02-28 2014-04-01 Blackberry Limited Methods and tools for creation of read-only-memory software binary images and corresponding software patches
US9536090B2 (en) * 2013-05-26 2017-01-03 Check Point Software Technologies Ltd. Method of defending a computer from malware
US10496410B2 (en) * 2014-12-23 2019-12-03 Intel Corporation Instruction and logic for suppression of hardware prefetchers
CN106354524B (zh) 2015-07-17 2021-01-01 恩智浦美国有限公司 实时更新固件的系统和方法
GB2551523B (en) 2016-06-20 2019-07-03 Imagination Tech Ltd Livelock recovery circuit
US10831393B2 (en) * 2018-02-08 2020-11-10 Micron Technology, Inc. Partial save of memory
CN112231136A (zh) * 2020-11-04 2021-01-15 炬芯科技股份有限公司 SoC芯片、获取修复信息的方法、存储介质及电子设备
CN113485948B (zh) * 2021-06-29 2023-11-14 成都忆芯科技有限公司 Nvm坏块管理方法与控制部件

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623608A (en) * 1994-11-14 1997-04-22 International Business Machines Corporation Method and apparatus for adaptive circular predictive buffer management
US6463549B1 (en) * 2000-09-28 2002-10-08 Motorola, Inc. Device and method for patching code residing on a read only memory module utilizing a random access memory for storing a set of fields, each field indicating validity of content of a group, and for receiving an address of a memory portion of the read only memory

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5446904A (en) * 1991-05-17 1995-08-29 Zenith Data Systems Corporation Suspend/resume capability for a protected mode microprocessor
US6865667B2 (en) * 2001-03-05 2005-03-08 Freescale Semiconductors, Inc. Data processing system having redirecting circuitry and method therefor

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623608A (en) * 1994-11-14 1997-04-22 International Business Machines Corporation Method and apparatus for adaptive circular predictive buffer management
US6463549B1 (en) * 2000-09-28 2002-10-08 Motorola, Inc. Device and method for patching code residing on a read only memory module utilizing a random access memory for storing a set of fields, each field indicating validity of content of a group, and for receiving an address of a memory portion of the read only memory

Also Published As

Publication number Publication date
WO2004061585A3 (en) 2005-05-19
BR0317846A (pt) 2005-12-06
AU2003297866A8 (en) 2004-07-29
CN1732443A (zh) 2006-02-08
US20040128471A1 (en) 2004-07-01
WO2004061585A2 (en) 2004-07-22
US6931477B2 (en) 2005-08-16
AU2003297866A1 (en) 2004-07-29

Similar Documents

Publication Publication Date Title
CN1732443B (zh) 用于修补在存储器上驻留的代码和数据的方法和设备
US8296535B2 (en) Generating incremental program updates
US7895569B2 (en) System and method for implementing software breakpoints in an interpreter
US7444630B2 (en) Method and apparatus for changing microcode to be executed in a processor
JP3233163B2 (ja) メモリ拡張スキームを切り替える疑似直線バンクを有するマイクロコントローラ
CN112905242B (zh) 分支路径跳转方法、装置、存储介质及电子装置
JPH10222397A (ja) シミュレーション装置、シミュレーション方法、及び、シミュレーションプログラムを記録した機械読み取り可能な記録媒体
CN105975816A (zh) 移动终端下基于虚拟技术的代码保护方法及系统
US6412081B1 (en) System and method for providing a trap and patch function to low power, cost conscious, and space constrained applications
US7546596B2 (en) Non-disruptive method, system and program product for overlaying a first software module with a second software module
CN104699453A (zh) 用于改变控制单元的存储器中的软件的方法和计算机系统
CN110554998A (zh) 一种通过替换函数内部指令的钩子方法、装置、终端及存储介质
US20080263533A1 (en) Implementation of patches by a processing unit
KR100777753B1 (ko) 코프로세서를 사용한 데이터 처리
US6925522B2 (en) Device and method capable of changing codes of micro-controller
US20030005212A1 (en) Method and apparatus for dynamically modifying a stored program
US8392888B2 (en) Method of translating n to n instructions employing an enhanced extended translation facility
US20040181777A1 (en) Method and device for programming electronic devices using a uniform parameter format
Kwon et al. Low-power fast partial firmware update technique of on-chip flash memory for reliable embedded IoT microcontroller
US6704865B1 (en) Microprocessor conditional deterministic reset vector method
CN114047952B (zh) 用于单片机的处理器、方法、单片机和存储介质
US6886159B2 (en) Computer system, virtual machine, runtime representation of object, storage media and program transmission apparatus
Karacali et al. Full efficient NVM usage for MCU
CN112905498A (zh) 一种处理方法、装置、电子设备及存储介质
CN111984320B (zh) 一种pdo数据读写方法、装置、设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: MOTOROLA MOBILE CO., LTD.

Free format text: FORMER OWNER: MOTOROLA INC.

Effective date: 20110113

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20110113

Address after: Illinois State

Patentee after: MOTOROLA MOBILITY, Inc.

Address before: Illinois, USA

Patentee before: Motorola, Inc.

C56 Change in the name or address of the patentee
CP01 Change in the name or title of a patent holder

Address after: Illinois State

Patentee after: MOTOROLA MOBILITY LLC

Address before: Illinois State

Patentee before: MOTOROLA MOBILITY, Inc.

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20161018

Address after: California, USA

Patentee after: Google Technology Holdings LLC

Address before: Illinois State

Patentee before: MOTOROLA MOBILITY LLC

CX01 Expiry of patent term
CX01 Expiry of patent term

Granted publication date: 20100428