CN107391085A - 一种rom代码补丁运行方法和*** - Google Patents

一种rom代码补丁运行方法和*** Download PDF

Info

Publication number
CN107391085A
CN107391085A CN201710469792.0A CN201710469792A CN107391085A CN 107391085 A CN107391085 A CN 107391085A CN 201710469792 A CN201710469792 A CN 201710469792A CN 107391085 A CN107391085 A CN 107391085A
Authority
CN
China
Prior art keywords
code
patch
function pointer
rom
interface
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.)
Pending
Application number
CN201710469792.0A
Other languages
English (en)
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.)
SHENZHEN CHIPSBANK TECHNOLOGY Co Ltd
Original Assignee
SHENZHEN CHIPSBANK TECHNOLOGY Co Ltd
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 SHENZHEN CHIPSBANK TECHNOLOGY Co Ltd filed Critical SHENZHEN CHIPSBANK TECHNOLOGY Co Ltd
Priority to CN201710469792.0A priority Critical patent/CN107391085A/zh
Publication of CN107391085A publication Critical patent/CN107391085A/zh
Pending legal-status Critical Current

Links

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/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

Landscapes

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

Abstract

本发明公开了一种ROM代码补丁运行方法和***,适用于C语言环境,包括:为原始代码内的函数设置基于函数指针的接口,所述原始代码存储于ROM;从非易失性存储器读取补丁代码并将其存储于RAM;根据接口的函数指针选择读取原始代码或补丁代码并运行。该***用于执行对应方法。本发明通过为存储于ROM的原始代码的函数预设函数指针型接口,当运行函数时,会根据函数指针的变量选择对应位置的原始代码或者补丁代码运行,能够在ROM环境下有效的导入补丁代码并使用。

Description

一种ROM代码补丁运行方法和***
技术领域
本发明涉及一种ROM代码补丁运行方法和***,属于计算机领域。
背景技术
汇编语言,一种软件开发用的低级语言,用它编写出来的程序代码运行效率高,但存在可读性差等缺点,不适合开发大型软件工程;C语言,一种软件开发用的高级语言,用它编写出来的程序代码运行效率较高,可读性好,适合开发大型软件工程。
消费类电子产品更新换代快,并且消费者要求成本尽可能的低,产品面市速度快。而消费类电子产品所使用的专用智能控制芯片研发周期长,流片费用昂贵。智能控制芯片内部的微控制器运行着庞大的客户定制程序,为了控制成本,这些程序会被固化到廉价的ROM中。为了能够满足不断变化的市场需求,厂商会不断修改控制器的运行代码,代码更新后如果选择重新流片,则需要支付较高的费用而且等待较长的时间,这就造成了严重供需矛盾。
虽然ROM中的内容无法修改,但可以绕开ROM中的部分代码而执行RAM中的代码来实现功能的修改。这种做法在使用汇编语言的开发环境下实现起来比较方便,直接使用跳转指令即可,但在C语言的环境下无法使用跳转指令,从而很少被使用。
发明内容
为了解决上述问题,本发明通过提供一种ROM代码补丁运行方法和***。
本发明采用的技术方案一方面为一种ROM代码补丁运行方法,适用于C语言环境,包括:为原始代码内的函数设置基于函数指针的接口,所述原始代码存储于ROM;从非易失性存储器读取补丁代码并将其存储于RAM;根据接口的函数指针选择读取原始代码或补丁代码并运行。
优选地,检查接口的ACK响应以检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
优选地,所述配置信息包括函数指针列表、待修改接口的数量和编号。
优选地,基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
优选地,函数指针为空值时,选择读取原始代码并运行;函数指针为非空值时,选择读取补丁代码并运行。
本发明采用的技术方案另一方面为一种ROM代码补丁运行***,用于实现上述方法,包括:编译器,用于为原始代码内的函数设置基于函数指针的接口;微处理器,用于从非易失性存储器读取补丁代码并将其存储于RAM,根据接口的函数指针选择读取原始代码或补丁代码并运行;ROM,用于存储原始代码;RAM,用于存储从非易失性存储器获取的补丁代码。
优选地,所述微处理器还用于检查接口的ACK响应以检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
优选地,所述配置信息包括函数指针列表、待修改接口的数量和编号。
优选地,所述微处理器还用于基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
优选地,函数指针为空值时,选择读取原始代码并运行;函数指针为非空值时,选择读取补丁代码并运行。
本发明的有益效果为通过为存储于ROM的原始代码的函数预设函数指针型接口,当运行函数时,会根据函数指针的变量选择对应位置的原始代码或者补丁代码运行,能够在ROM环境下有效的导入补丁代码并使用。
附图说明
图1所示为基于本发明实施例的一种ROM代码补丁运行方法示意图。
具体实施方式
以下结合实施例对本发明进行说明。
基于发明的实施例1,如图1所示一种ROM代码补丁运行方法,适用于C语言环境,包括:为原始代码内的函数设置基于函数指针的接口,所述原始代码存储于ROM;从非易失性存储器读取补丁代码并将其存储于RAM;根据接口的函数指针选择读取原始代码或补丁代码并运行。
在编写ROM代码的时候,先为可能需要更改的各个C语言函数预留一些接口,这些接口采用函数指针的形式,处理器在处理代码的时序上,需要优先处理函数指针,然后根据函数指针读取对应代码(本实施例中,包括ROM的原始代码和RAM的补丁代码);处理器在上电时,RAM中的数据是不确定的,因此补丁代码必须先存放在其它位置,然后通过初始化代码复制到RAM中来才能正确执行;由于补丁代码相对整个工程来说体积很小,选择容量适合的非易失性存储器(比如EEPROM)来存储它,从整体成本上来考虑依然是非常廉价的;处理器在读取ROM代码中带有接口的函数时,会先判断对应的函数指针,根据函数指针的值(空值或者非空)决定是要选择位于ROM的原始代码还是位于RAM的补丁代码来运行。
基于发明的实施例1所述的方法,检查接口的ACK响应以检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
所述配置信息包括函数指针列表、待修改接口的数量和编号。
处理器按照接口时序检测是否有ACK应答信号反馈。如果有,则说明已经安装了非易失性存储器,然后从中读取配置信息并进行校验标记核查(例如校验信息合法性,更新版本信息等资料),再读取需要修改的接口数量以及接口编号,再将各个编号对应的函数指针进行修改,最后将补丁代码复制到RAM中,各个函数指针指向对应补丁代码。
基于发明的实施例1所述的方法,基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
函数指针列表记录了所有预设接口的函数指针,而待修改接口是其中的一部分(可能在一次补丁中,只有一部分原始代码需要选择补丁代码来替换运行),改变函数指针的值(由空值改为非空值),而处理器则运行函数指针指向的代码。
函数指针为空值时,选择读取原始代码并运行;函数指针为非空值时,选择读取补丁代码并运行。
基于发明的实施例2,补丁代码和原始代码的烧录方法。
在编写ROM代码的时候,先为可能需要更改的各个C语言函数预留接口,这些接口采用函数指针的形式。
C语言源码如下:
通过设置编译器,将Rom.c文件编译到ROM所在的物理地址,将Ram.c文件编译到RAM所在的物理地址,从而得到两段机器码。
不需要修改原始功能的时候,我们在初始化代码中将函数指针ExtPtrVoidFunc[1]设置成NULL(空),Rom_Func1函数将执行ROM内的代码做加法运算。如果将函数指针ExtPtrVoidFunc[1]设置成Ram_Func1,则本模块将执行RAM中的代码做减法运算。从而实现了功能的改变。
编译器完成对代码的编译后,生成ROM代码和RAM补丁代码,制作一个工具将补丁代码中各个函数的指针提取出来,然后根据补丁函数的个数和接口编号,将补丁代码做成一个完整的烧录文件写入非易失性存储器。
基于发明的实施例3,一种ROM代码补丁运行***,用于实现上述方法,包括:编译器,用于为原始代码内的函数设置基于函数指针的接口;微处理器,用于从非易失性存储器读取补丁代码并将其存储于RAM,根据接口的函数指针选择读取原始代码或补丁代码并运行;ROM,用于存储原始代码;RAM,用于存储从非易失性存储器获取的补丁代码。
所述微处理器还用于检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
所述配置信息包括函数指针列表、待修改接口的数量和编号。
所述微处理器还用于基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
函数指针为空值时,选择读取原始代码并运行;函数指针为非空值时,选择读取补丁代码并运行。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。

Claims (10)

1.一种ROM代码补丁运行方法,适用于C语言环境,其特征在于,包括:
为原始代码内的函数设置基于函数指针的接口,所述原始代码存储于ROM;
从非易失性存储器读取补丁代码并将其存储于RAM;
根据接口的函数指针选择读取原始代码或补丁代码并运行。
2.根据权利要求1所述的一种ROM代码补丁运行方法,其特征在于,检查接口的ACK响应以检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
3.根据权利要求2所述的一种ROM代码补丁运行方法,其特征在于,所述配置信息包括函数指针列表、待修改接口的数量和编号。
4.根据权利要求2所述的一种ROM代码补丁运行方法,其特征在于,基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
5.根据权利要求1所述的一种ROM代码补丁运行方法,其特征在于,函数指针为空值时,选择读取原始代码并运行;
函数指针为非空值时,选择读取补丁代码并运行。
6.一种ROM代码补丁运行***,用于实现权利要求1所述方法,其特征在于,包括:
编译器,用于为原始代码内的函数设置基于函数指针的接口;
微处理器,用于从非易失性存储器读取补丁代码并将其存储于RAM,根据接口的函数指针选择读取原始代码或补丁代码并运行;
ROM,用于存储原始代码;
RAM,用于存储从非易失性存储器获取的补丁代码。
7.根据权利要求6所述的一种ROM代码补丁运行***,其特征在于,所述微处理器还用于检查接口的ACK响应以检测是否存在非易失性存储器,如果出现ACK反馈则从中读取补丁数据,补丁数据包括配置信息和补丁代码,将补丁代码存储于RAM。
8.根据权利要求7所述的一种ROM代码补丁运行***,其特征在于,所述配置信息包括函数指针列表、待修改接口的数量和编号。
9.根据权利要求7所述的一种ROM代码补丁运行***,其特征在于,所述微处理器还用于基于配置信息修改函数指针,其步骤包括读取待修改接口的数量和编号以对函数指针进行修改。
10.根据权利要求6所述的一种ROM代码补丁运行***,其特征在于,函数指针为空值时,选择读取原始代码并运行;
函数指针为非空值时,选择读取补丁代码并运行。
CN201710469792.0A 2017-06-20 2017-06-20 一种rom代码补丁运行方法和*** Pending CN107391085A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710469792.0A CN107391085A (zh) 2017-06-20 2017-06-20 一种rom代码补丁运行方法和***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710469792.0A CN107391085A (zh) 2017-06-20 2017-06-20 一种rom代码补丁运行方法和***

Publications (1)

Publication Number Publication Date
CN107391085A true CN107391085A (zh) 2017-11-24

Family

ID=60333444

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710469792.0A Pending CN107391085A (zh) 2017-06-20 2017-06-20 一种rom代码补丁运行方法和***

Country Status (1)

Country Link
CN (1) CN107391085A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110187920A (zh) * 2019-04-01 2019-08-30 深圳市德名利电子有限公司 基于otp的主控芯片的boot代码扩展方法
CN110308953A (zh) * 2019-04-01 2019-10-08 深圳市德名利电子有限公司 基于32位mcu主控的rom代码函数修改方法
CN111814209A (zh) * 2019-04-12 2020-10-23 恩智浦有限公司 用于将补丁应用于可执行代码的***和方法
CN112231136A (zh) * 2020-11-04 2021-01-15 炬芯科技股份有限公司 SoC芯片、获取修复信息的方法、存储介质及电子设备
CN114730245A (zh) * 2019-09-11 2022-07-08 红松信号公司 用于降低处理器中的功耗的闪存和ram分配的***和方法
CN117743011A (zh) * 2023-12-20 2024-03-22 无锡众星微***技术有限公司 一种RomCode运行错误修复方法和装置
WO2024108339A1 (zh) * 2022-11-21 2024-05-30 河南许继仪表有限公司 一种消息注册订阅的方法及***

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009156790A1 (en) * 2008-06-23 2009-12-30 Freescale Semiconductor, Inc. Patching of a read-only memory
CN102063634A (zh) * 2010-12-24 2011-05-18 北京握奇数据***有限公司 一种掩膜智能卡的功能扩展方法及智能卡
CN102479265A (zh) * 2010-11-25 2012-05-30 上海华虹集成电路有限责任公司 修改硬掩膜产品固件错误功能的方法
CN103632185A (zh) * 2012-08-21 2014-03-12 北京同方微电子有限公司 一种具有扩展功能的掩膜智能卡
CN104424008A (zh) * 2013-08-30 2015-03-18 飞思卡尔半导体公司 安全引导 rom 补丁的***及方法
CN106021089A (zh) * 2015-10-30 2016-10-12 北京中电华大电子设计有限责任公司 一种补丁接口的测试方法及装置

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009156790A1 (en) * 2008-06-23 2009-12-30 Freescale Semiconductor, Inc. Patching of a read-only memory
CN102479265A (zh) * 2010-11-25 2012-05-30 上海华虹集成电路有限责任公司 修改硬掩膜产品固件错误功能的方法
CN102063634A (zh) * 2010-12-24 2011-05-18 北京握奇数据***有限公司 一种掩膜智能卡的功能扩展方法及智能卡
CN103632185A (zh) * 2012-08-21 2014-03-12 北京同方微电子有限公司 一种具有扩展功能的掩膜智能卡
CN104424008A (zh) * 2013-08-30 2015-03-18 飞思卡尔半导体公司 安全引导 rom 补丁的***及方法
CN106021089A (zh) * 2015-10-30 2016-10-12 北京中电华大电子设计有限责任公司 一种补丁接口的测试方法及装置

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110187920A (zh) * 2019-04-01 2019-08-30 深圳市德名利电子有限公司 基于otp的主控芯片的boot代码扩展方法
CN110308953A (zh) * 2019-04-01 2019-10-08 深圳市德名利电子有限公司 基于32位mcu主控的rom代码函数修改方法
CN111814209A (zh) * 2019-04-12 2020-10-23 恩智浦有限公司 用于将补丁应用于可执行代码的***和方法
CN114730245A (zh) * 2019-09-11 2022-07-08 红松信号公司 用于降低处理器中的功耗的闪存和ram分配的***和方法
CN114730245B (zh) * 2019-09-11 2023-05-09 红松信号公司 用于降低处理器中的功耗的闪存和ram分配的***和方法
CN112231136A (zh) * 2020-11-04 2021-01-15 炬芯科技股份有限公司 SoC芯片、获取修复信息的方法、存储介质及电子设备
WO2024108339A1 (zh) * 2022-11-21 2024-05-30 河南许继仪表有限公司 一种消息注册订阅的方法及***
CN117743011A (zh) * 2023-12-20 2024-03-22 无锡众星微***技术有限公司 一种RomCode运行错误修复方法和装置

Similar Documents

Publication Publication Date Title
CN107391085A (zh) 一种rom代码补丁运行方法和***
CN101814318B (zh) 多层存储单元与非型闪存储存***及其控制器与存取方法
CN102629237B (zh) 非易失性半导体存储器及搜索最后写入地址的方法
CN107506219A (zh) 一种基于Android***的通用版本升级方法
CN109840215A (zh) 未对齐写入的处理
CN109410998A (zh) 存储器装置及其操作方法
CN102623069B (zh) 随机激励闪存模型验证方法
CN113672515A (zh) 一种基于符号执行的wasm智能合约漏洞检测方法
JP6157637B2 (ja) リードライトメモリデバイスのデータイメージ中の仮想境界コード
CN102306127B (zh) 一种ddriii内存识别和初始化方法
CN103902461A (zh) 不同Nand闪存兼容方法及装置
CN106776391A (zh) 一种NAND Flash控制器的控制方法和装置
EP2278501A2 (en) Portable electronic device, smartcard and control method for portable electronic device
US9129137B2 (en) Method, computer program and device for providing security for intermediate programming code for its execution by a virtual machine
CN103678115A (zh) 在混合模式程序中检测源代码差错的位置的设备和方法
CN109686391A (zh) 非易失性存储器装置及其操作方法及非易失性存储器封装
CN104915287A (zh) 单元测试方法及***
CN115098139A (zh) 固件更新方法、***、下位机和存储介质
CN107247587A (zh) 一种网页模板生成方法及装置
CN106775778A (zh) 嵌入式程序开发中程序更新识别方法及***
CN108197351A (zh) 一种受单片机控制的集成电路的仿真验证方法
CN103593252B (zh) 具有动态错误侦测及更正的存储器
CN108255510A (zh) 一种基于iap在线升级待升级固件传输校验设计方法
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

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20171124