CN1200347C - 一种动态加载单板芯片firmware程序的实现方法 - Google Patents

一种动态加载单板芯片firmware程序的实现方法 Download PDF

Info

Publication number
CN1200347C
CN1200347C CN 02123679 CN02123679A CN1200347C CN 1200347 C CN1200347 C CN 1200347C CN 02123679 CN02123679 CN 02123679 CN 02123679 A CN02123679 A CN 02123679A CN 1200347 C CN1200347 C CN 1200347C
Authority
CN
China
Prior art keywords
firmware program
single board
board chip
program
chip firmware
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 - Fee Related
Application number
CN 02123679
Other languages
English (en)
Other versions
CN1467629A (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN 02123679 priority Critical patent/CN1200347C/zh
Publication of CN1467629A publication Critical patent/CN1467629A/zh
Application granted granted Critical
Publication of CN1200347C publication Critical patent/CN1200347C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明涉及一种动态加载单板芯片FIRMWARE程序的实现方法,包括:将单板芯片FIRMWARE程序压缩、转换成常量字符数组的C语言程序,再编译链接到主机程序中;在需要加载单板芯片FIRMWARE程序的时候,在主机内存中先申请一大小等同于单板芯片FIRMWARE程序的空间;再对该常量字符数组的C语言程序进行解压缩,并存储到主机内存中的该空间中;将主机内存该空间中的单板芯片FIRMWARE程序动态加载到单板芯片中,并在加载结束后,释放所述主机内存中的该空间。通过分别计算解压缩后的FIRMWARE程序和加载到芯片中的FIRMWARE程序的校验和,并比较两者间的一致性,可判断加载是否成功。本发明让主机程序与单板芯片FIRMWARE程序既合为一体又互相独立,便于两者的版本管理,且在执行动态加载时互不影响工作。

Description

一种动态加载单板芯片FIRMWARE程序的实现方法
技术领域
本发明涉及集成电路芯片的运行程序动态加载实现方法,更确切地说是涉及一种动态加载单板芯片FIRMWARE(目前无专门的中文名称)程序的实现方法。
背景技术
随着集成芯片技术的发展,芯片的复杂程度也越来越大。许多芯片本身也就是一个处理器,有自己的运行程序,这种运行程序就是芯片的FIRMWARE程序。FIRMWARE程序需要在芯片上电运行或芯片异常复位时进行加载,加载成功后,通过运行FIRMWARE程序使芯片正常工作起来。本发明涉及的就是进行动态加载芯片FIRMWARE程序的一种实现方法。
路由器上有很多种单板,单板上的许多芯片都有自己的FIRMWARE程序,在路由器上电启动或单板异常复位的时候就需要进行单板芯片FIRMWARE程序的加载。由于有些芯片的FIRMWARE程序比较大,例如达到5M字节以上,这就产生了FIRMWARE程序的存储方式和加载速度的问题。同时,单板或FIRMWARE程序在运行过程中由于某种原因而出现故障,为了使出现异常的芯片重新工作而又不影响主机以及其它单板的正常运行,就必须对芯片进行动态FIRMWARE程序的加载。由于厂家提供的FIRMWARE程序可能还存在着很多的缺陷(BUG),在使用的过程中就需要对发现的缺陷(BUG)进行修改,那么在修改缺陷(BUG)后或在增加新功能时就需要对单板的FIRMWARE程序进行更新。
目前,实现单板芯片FIRMWARE程序加载的方案有如下几种:
方案1:将FIRMWARE程序存储在主机快闪存储器(FLASH)的固定地址中,在需要加载FIRMWARE程序的时候,从主机FLASH的该固定地址中读出,送到单板上并加载到芯片中。
该方案的缺点是:FIRMWARE程序保存在主机FLASH的固定地址中,主机的程序和FIRMWARE程序是分离的,这将不利于程序版本的管理。同时,由于要占用主机FLASH的固定地址空间,在需要进行主机程序升级或要对主机FLASH地址空间进行重新分配的时候,就有可能要修改存储该FIRMWARE程序的固定地址,同时还需要修改相应的主机程序,还要对主机程序和FIRMWARE程序分别进行升级更新,很可能会出现主机版本和FIRMWARE程序版本不兼容的问题。
方案2:将FIRMWARE程序存储在单板上的FLASH中,在需要加载的时候,从单板上的FLASH中读出进行加载。
该方案的缺点是:将FIRMWARE程序存储在单板上的FLASH中,这就需要在单板上增加一个FLASH,将会增加产品的成本,同时也需要在软件和硬件上增加对FLASH处理的部分。
发明内容
本发明的目的是设计一种动态加载单板芯片FIRMWARE程序的实现方法,FIRMWARE程序与主机程序既合为一体又互相独立,便于版本管理且可降低硬件成本。
实现本发明目的的技术方案是这样的:一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于包括以下处理步骤:
A.压缩单板芯片FIRMWARE程序,转换成C语言程序,再编译链接到主机程序中,所述的C语言程序是一个常量字符数组;
B.在需要加载单板芯片FIRMWARE程序的时候,向主机内存申请一空间,该空间的大小等同于所述的单板芯片FIRMWARE程序;
C.对该常量字符数组的C语言程序进行解压缩,并存储到主机内存中的该空间中;
D.将主机内存该空间中的单板芯片FIRMWARE程序动态加载到单板芯片中,并在加载结束后,释放所述主机内存中的该空间。
所述的步骤A中所述的压缩处理是用压缩软件ARJ(这是一个常用的名称为ARJ的软件)将单板芯片FIRMWARE程序压缩处理成压缩文件;所述的转换是利用编写的转换应用程序将压缩文件转换成所述的常量字符数组的C语言程序;所述的编译链接是在编译主机程序时将所述的常量字符数组的C语言程序链接到主机程序中。
所述的步骤B是在主机上电启动或在单板异常复位需要加载单板芯片FIRMWARE程序时进行的。
上述步骤B的执行进一步包括:设置一个单板异常状态标志位,在定时检查到该异常状态标志位为表明单板处于异常状态的“真”时,需要进行复位重启、重新动态加载单板芯片FIRMWARE程序。
所述的步骤B进一步包括:是从经步骤A压缩处理、转换生成的常量字符数组的C语言程序中读出单板芯片FIRMWARE程序文件的大小,再动态申请同样大小的主机内存。
所述的读出文件的大小从所述C语言程序的固定位置处获得,该固定位置处存储压缩前FIRMWARE程序各被压缩文件的名称、大小和压缩后各压缩文件的名称。
所述的步骤C中,还包括在解压缩时,对内存空间中解压缩后的FIRMWARE程序计算其校验和;所述的步骤D中,还包括对加载到单板芯片中的FIRMWARE程序进行校验和计算,在判断两校验结果不一致时,返回执行步骤A至D,在判断两校验结果一致时,结束加载,释放所述的主机内存中的该空间。
本发明的动态加载FIRMWARE的方法,先将FIRMWARE程序用压缩软件ARJ压缩,利用一个编写的转换程序,将FIRMWARE程序的压缩文件转换成一个常量字符数组的C语言程序,在编译主机程序时将压缩、转换后的FIRMWARE文件链接到主机程序中;在主机上电启动或单板异常复位等需要加载单板芯片FIRMWARE程序的时候,先根据FIRMWARE文件的大小在主机的存储区(MEMORY)中申请同样大小的空间,将该常量字符数组的C语言程序解压缩到主机的该存储区(MEMORY)中,然后对芯片进行动态加载,加载结束后再将该申请到的存储区(MEMORY)释放。
本发明动态加载单板芯片FIRMWARE的方法,是通过将压缩后的FIRMWARE程序转换成一个常量字符数组的C语言程序再编译链接到主机的程序中,不需要在单板上增加一个存储FIRMWARE程序的FLASH芯片,可以降低硬件的成本,降低单板的元件密度;由于FIRMWARE程序是和主机的程序合为一体的,可以很方便地进行版本的管理,对主机程序的修改不会影响FIRMWARE程序,同时FIRMWARE程序的升级也不会影响到主机的其它程序;FIRMWARE程序和主机程序虽然合为一体,但又相互独立,一旦单板检测到本单板处于异常状态时,重新加载该单板的FIRMWARE程序,使该单板重新正常工作,不会影响到主机及其它单板的正常工作。
附图说明
图1是本发明动态加载单板芯片FIRMWARE程序的流程框图。
具体实施方式
下面结合实施例附图进一步说明本发明的方法。
参见图1,是按本发明的方案动态加载单板芯片FIRMWARE的总体流程框图。
步骤11,将单板芯片的FIRMWARE程序用压缩软件ARJ进行压缩(压缩成ARJ文件),得到压缩后的文件FIRMWARE.ARJ,对单板芯片的FIRMWARE程序进行压缩的目的是为了节省单板芯片FIRMWARE程序在主机程序中所占的空间;
步骤12,编写一个转换应用程序(可采用专门的技术实现,这是一个特定的转换,将一个文件转换成专门格式的文件,是一种常规技术),将FIRMWARE.ARJ文件转换成一个C语言程序:FIRMWARE.C,该C语言程序就是一个常量字符数组,其转换后的常量字符数组的C语言程序组成形式如下:
const char FIRMWARE[]=
{
0x60,0xea,0x25,0x0,0x1e,0x7,0x1,0x0,0x10,0x0,0x2,0x54,0x54,0x95,0x76,0x2b,
                          ...............
0x2a,0xed,0x9e,0xc3,0xfa,0xb3,0x10,0x60,0xea,0x0,0x0
}
通过将FIRMWARE程序转换成常量字符数组的C语言程序,可以将比较大(如1.5M左右)的FIRMWARE压缩文件链接到主机程序中,并得到相应的地址,供主机程序在其它函数中使用。同时,一次编译成功后就不用再对该文件进行编译了,除非文件升级时(但如果转换成*.h文件,那么在包含该*.h的文件一旦修改时,就要重新进行编译,由于FIRMWARE文件比较大,会导致编译链接的时间很长);
步骤13,修改主机程序的工程文件,将FIRMWARE.C文件添加到主机工程文件中,进行编译链接,即将FIRMWARE.C文件编译链接进主机程序中;
步骤14,在主机上电启动或单板异常复位等需要加载单板芯片FIRMWARE程序的时候,要将FIRMWARE的压缩文件解压缩并加载到单板上的芯片中,在解压缩的时候,先从单板芯片程序FIRMWARE的压缩、转换后的FIRMWARE.C中读出该文件的大小,然后向主机申请相应大小的内存空间,将FIRMWARE.C文件解压缩并存储到所申请的该内存空间地址中;
步骤15,运行加载流程,将FIRMWARE程序加载到单板芯片中,加载完毕后释放该申请到的内存空间,在每个ARJ压缩文件中各相应的位置,都存储着压缩前FIRMWARE程序中各被压缩文件的名称、大小和压缩后该被压缩文件的名称。运行加载流程时,在压缩文件的相应位置处先将被压缩文件的大小读出,该相应位置可以是压缩文件中压缩文件名称之后从第29字节开始的前四个字节。由于FIRMWARE文件比较大,而且进行FIRMWARE程序升级后文件的大小还会发生变化,根据其大小动态申请主机的内存,可以避免申请到的主机内存和FIRMWARE程序文件的大小不匹配,若申请的内存小则会导致解压缩不成功,若申请的主机内存太大则又会浪费主机的资源;
步骤16,FIRMWARE程序加载结束后要对加载到芯片SDRAM中的FIRMWARE程序进行校验,进行校验的方法是:在解压缩时,对内存空间中解压缩后的FIRMWARE程序计算其校验和,在加载结束后,再读出加载到芯片SDRAM中的FIRMWARE程序并计算其校验和,如果二者的校验和相等,表示加载成功,运行FIRMWARE程序,启动程序使芯片正常工作,如果校验和不相等,表示加载失败,返回步骤11,重新进行FIRMWARE的加载流程。
在FIRMWARE程序动态加载的实现过程中,可在主机程序中设置一个表征单板异常状态的标志位,当单板处于正常状态的时候该标志位为“假”,当单板异常的时候设置该标志位为“真”,定时检查该标志位,如果该标志位为“真”,则表明单板处于异常状态,对单板复位,重新执行步骤11至15的过程,加载单板芯片FIRMWARE程序,使单板重新恢复正常的工作状态。
整个动态加载过程不会影响主机和其它单板的正常工作。
本发明经在路由器的单板中实验性使用,证明可靠可行。

Claims (7)

1.一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于包括以下处理步骤:
A.压缩单板芯片FIRMWARE程序,转换成C语言程序,再编译链接到主机程序中,所述的C语言程序是一个常量字符数组;
B.在需要加载单板芯片FIRMWARE程序的时候,向主机内存申请一空间,该空间的大小等同于所述的单板芯片FIRMWARE程序;
C.对该常量字符数组的C语言程序进行解压缩,并存储到主机内存中的该空间中;
D.将主机内存该空间中的单板芯片FIRMWARE程序动态加载到单板芯片中,并在加载结束后,释放所述主机内存中的该空间。
2.根据权利要求1所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于:所述的步骤A中所述的压缩处理是用压缩软件ARJ将单板芯片FIRMWARE程序压缩处理成压缩文件;所述的转换是利用编写的转换应用程序将压缩文件转换成所述的常量字符数组的C语言程序;所述的编译链接是在编译主机程序时将所述的常量字符数组的C语言程序链接到主机程序中。
3.根据权利要求1所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于:所述的步骤B是在主机上电启动或在单板异常复位需要加载单板芯片FIRMWARE程序时进行的。
4.根据权利要求3所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于所述步骤B的执行进一步包括:设置一个单板异常状态标志位,在定时检查到该异常状态标志位为表明单板处于异常状态的“真”时,需要进行复位重启、重新动态加载单板芯片FIRMWARE程序。
5.根据权利要求1所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于所述的步骤B进一步包括:是从经步骤A压缩处理、转换生成的常量字符数组的C语言程序中读出单板芯片FIRMWARE程序文件的大小,再动态申请同样大小的主机内存。
6.根据权利要求5所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于:所述的读出文件的大小从所述C语言程序的固定位置处获得,该固定位置处存储压缩前FIRMWARE程序各被压缩文件的名称、大小和压缩后各压缩文件的名称。
7.根据权利要求1所述的一种动态加载单板芯片FIRMWARE程序的实现方法,其特征在于:所述的步骤C中,还包括在解压缩时,对内存空间中解压缩后的FIRMWARE程序计算其校验和;所述的步骤D中,还包括对加载到单板芯片中的FIRMWARE程序进行校验和计算,在判断两校验结果不一致时,返回执行步骤A至D,在判断两校验结果一致时,结束加载,释放所述的主机内存中的该空间。
CN 02123679 2002-07-08 2002-07-08 一种动态加载单板芯片firmware程序的实现方法 Expired - Fee Related CN1200347C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 02123679 CN1200347C (zh) 2002-07-08 2002-07-08 一种动态加载单板芯片firmware程序的实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 02123679 CN1200347C (zh) 2002-07-08 2002-07-08 一种动态加载单板芯片firmware程序的实现方法

Publications (2)

Publication Number Publication Date
CN1467629A CN1467629A (zh) 2004-01-14
CN1200347C true CN1200347C (zh) 2005-05-04

Family

ID=34142446

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 02123679 Expired - Fee Related CN1200347C (zh) 2002-07-08 2002-07-08 一种动态加载单板芯片firmware程序的实现方法

Country Status (1)

Country Link
CN (1) CN1200347C (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100362473C (zh) * 2006-03-14 2008-01-16 华为技术有限公司 一种网元设备运行方法及网元设备

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100342335C (zh) * 2004-09-23 2007-10-10 华为技术有限公司 芯片程序加载方法
CN100383737C (zh) * 2005-01-12 2008-04-23 华为技术有限公司 单片机在线加载升级方法及系统
US7930693B2 (en) 2005-04-04 2011-04-19 Cisco Technology, Inc. Method and system for accessing and launching a java based applet as a locally installed application
US20070226724A1 (en) * 2006-03-24 2007-09-27 Mediatek Inc. Method and apparatus for firmware execution and provision
CN102446134B (zh) * 2010-10-13 2015-04-08 无锡江南计算技术研究所 一种实现编译器错误的自动定位方法和装置
CN114911533A (zh) * 2022-05-19 2022-08-16 长沙金维信息技术有限公司 基于NorFlash接口的芯片启动方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100362473C (zh) * 2006-03-14 2008-01-16 华为技术有限公司 一种网元设备运行方法及网元设备

Also Published As

Publication number Publication date
CN1467629A (zh) 2004-01-14

Similar Documents

Publication Publication Date Title
EP0996059B1 (en) Class loading model
US8566372B2 (en) Method and device for dynamically loading relocatable file
Clausen et al. Java bytecode compression for low-end embedded systems
US6349344B1 (en) Combining multiple java class files into a run-time image
US20110023020A1 (en) Method and system for automated code-source indexing in java virtual machine environment
US20070180444A1 (en) External registration for function configuration within a client platform application
CN1834918A (zh) 一种组件间调用方法
CN1200347C (zh) 一种动态加载单板芯片firmware程序的实现方法
US8042103B2 (en) Pre-translated files used in a virtual machine
CN100549957C (zh) 一种类装载隔离的方法及一种类装载隔离的装置
CN112783558B (zh) 一种加快Linux内核启动的自解压阶段的方法
US20060059477A1 (en) Method and system for dynamically loading data structures into memory with global constant pool
US20100199268A1 (en) Application of platform dependent routines in virtual machines by embedding native code in class files
US20070028224A1 (en) Program initiation methods and embedded systems utilizing the same
CN111240765A (zh) 一种linux压缩应用程序的加载方法
Wagner et al. “Slimming” a Java virtual machine by way of cold code removal and optimistic partial program loading
US10733095B2 (en) Performing garbage collection on an object array using array chunk references
CN100478889C (zh) 一种嵌入式系统版本的自解压方法
CN1269034C (zh) 一种嵌入式系统中可执行文件的压缩及其加载方法
CN101256501A (zh) 软件解压缩启动方法
Okafor et al. Transforming SQLITE to Run on a Bare PC.
FI113708B (fi) Menetelmä ja laite suoritettavien ohjelmien tallentamiseksi ja käyttämiseksi
CN1783003A (zh) 一种程序在线加载方法
WO2007099324A1 (en) Duplicate code detection
CN1582431A (zh) 已编译程序的安装,尤其是在芯片卡中的安装

Legal Events

Date Code Title Description
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20050504

Termination date: 20150708

EXPY Termination of patent right or utility model