CN101026826A - 用于提供在无线装置中使用的整体映像的系统和方法 - Google Patents
用于提供在无线装置中使用的整体映像的系统和方法 Download PDFInfo
- Publication number
- CN101026826A CN101026826A CNA2006100644771A CN200610064477A CN101026826A CN 101026826 A CN101026826 A CN 101026826A CN A2006100644771 A CNA2006100644771 A CN A2006100644771A CN 200610064477 A CN200610064477 A CN 200610064477A CN 101026826 A CN101026826 A CN 101026826A
- Authority
- CN
- China
- Prior art keywords
- assembly
- symbol
- assemblies
- reflection
- redirection mechanism
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04B—TRANSMISSION
- H04B1/00—Details of transmission systems, not covered by a single one of groups H04B3/00 - H04B13/00; Details of transmission systems not characterised by the medium used for transmission
- H04B1/38—Transceivers, i.e. devices in which transmitter and receiver form a structural unit and in which at least one part is used for functions of transmitting and receiving
- H04B1/40—Circuits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
- G06F9/44563—Sharing
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明一般来说涉及提供在无线装置中使用的整体映像的系统和方法。该方法包括:识别形成映像的多个组件,识别可以从每个组件输出的所有符号和从另一个组件中由每个组件输入的所有符号。重定向机制被建造,其包含有由一个组件输出的而由令一个组件输入的每个符号的地址,以及每个组件被修改来改变相对于与另一个组件相关的符号的每个直接引用为相对于重定向机制的引用。链接器被调用以基于修改的组件来链接最终映像。
Description
技术领域
本发明涉及更新无线装置的软件的系统和方法,更具体的,涉及用于提供在无线装置中使用的整体映像(monolithic image)的系统和方法。
背景技术
一般来说,手机和其他无线装置包括在形式上为存储在存储器中的可执行指令和不可执行数据的软件。所述软件提供这样一种具有执行各种功能的能力的装置,例如通过无线网络进行通信,处理诸如呼叫等待和呼叫转移之类的呼叫特性,以及维持日历和地址簿。
然而,一旦无线装置被提供给终端用户,那么提供附加的软件或对已经安装在装置内的软件进行修正就变得非常困难。为了解决这个问题,开发了无线固件(firmware over the air,FOFA)使得服务提供者通过无线网络向无线装置发送软件更新。这种更新可以向已经存在于无线装置上的软件提供附加的功能或提供错误修正(bug fix)来解决现有软件存在的问题。然而,虽然诸如FOFA之类的更新方法提供了向无线终端发送软件的方法,但是采用这种更新过程还存在问题。因此,向无线终端通过无线接口来有效提供软件是富于挑战的问题。
发明内容
因此,本发明被提出来解决现有技术中发生的上述问题,以及本发明的目的是提供用于补丁最小化工具(patch minimization tool)的系统和方法,其在提供在无线装置中使用的映像中配置最终的映像,采用这种方式将对于最终映像的下次更新的影响最小化。
在本发明的一个实施例中,提出了提供在无线装置中使用的整体映像的方法。该方法包括:识别形成以机器代码表示的映像的多个组件,以及对多个组件中的每一个组件,建造包含对于其它组件可访问的该组件内的所有符号的输出符号列表,和包含在组件所需要的、其他组件内的所有符号的输入符号列表。该方法还包括建造重定向机制,该机制包含有对在每个组件的输出符号列表中的每个符号的、在至少一个其他组件的输入符号列表中的间接引用(reference)。对于多个组件中的每个组件,改变对另一个组件中的符号的每个直接引用来引用与重定向机制中的符号相关联的间接引用,其中组件内的引用不被改变。创建包含有已改变的组件和重定向机制的最终映像。
在本发明的另一个实施例中,提供了用于向移动装置提供可执行映像的方法。该方法包括:从汇编器接收映像,并识别形成映像的多个组件。从每个组件中识别可输出的所有符号以及从另一个组件中识别被每个组件输入的所有符号。建造包含有由一个组件输出而被另一个组件输入的每个符号的地址的重定向机制;修改每个组件来改变对与另一个组件相关联的符号的每个直接引用为对重定向机制的引用。调用链接器来基于修改后的组件链接最终映像。
在本发明的另一个实施例中,方法包括从形成以机器语言代码接收的映像的多个模块中建造至少第一和第二组件。为第一和第二个组件的每一个建造输出符号列表和输入符号列表。将第一组件的输出符号列表与第二组件的输入符号列表相比较,并且将第二组件的输出符号列表与第一组件的输入符号列表相比较,来识别第一和第二组件中的一个的输出列表以及第一和第二组件中的另一个的输入列表上的任何符号。建造包含有每个被识别的符号的位置的重定向机制。修改第一组件来将对第二个组件的输出符号的每个引用改变为对重定向机制的引用,以及修改第二个组件来将对第一个组件的输出符号的每个引用改变为对重定向机制的引用。
在本发明的另一个实施例中,提供了用于由不支持动态链接或动态共享的操作系统控制的移动装置的静态的整体映像。该映像包括至少一包括有从构成该映像的任何其它组件由形成该映像的任何组件输入的映像中的每个符号的地址的重定向机制。该映像还包括多个组件,其中每个组件具有相对于组件本身所包含的任何符号的直接引用,以及具有相对于用于从另一个组件输入的任何符号的重定向机制的引用。
在本发明的另一个实施例中,系统包含有处理器,与处理器相耦合的存储器单元,以及多个存储在存储器中,由处理器执行的指令。该指令包括用于完成以下功能的指令:将用于无线装置的整体映像从汇编代码转换为机器代码,基于用机器代码所识别的模块建造多个组件。该指令包括这样的指令:识别每个组件可输出的每个符号和每个组件输入的每个符号,建造包含有可由一个组件输出的、由另一个组件输入的每个符号的重定向机制。该指令还包括这样的指令:修改每个组件将对与另一个组件相关联的输出符号的每个引用改变为对重定向机制的引用,以及链接已修改的组件和重定向机制来创建整体映像的最终版本。
附图说明
从下面结合附图的详细描述中本发明的各方面将会更好的理解本发明。依照产业实践标准,各个特征不必依照比例进行绘出。实际上,为了论述的清楚,各个特征的尺寸可以任意的放大或缩小。
图1为示出了根据本发明优选实施例的系统的视图。
图2为图1中映像创建系统的一个实施例的方框图。
图3为图1中无线装置的一个实施例的方框图。
图4A-4C描述了各种包含有整体映像的存储器的实施例。
图5为根据本发明的优选实施例提供静态整体映像的重定向机制的方法的流程图。
图6描述了用于创建可执行文件的编辑系统的实施例。
图7为根据本发明的优选实施例向静态整体映像提供伪DLL功能的方法的流程图。
图8A和8B描述了各种包含有整体映像和重定向机制的存储器的实施例。
图9为根据本发明的优选实施例的用于更新具有重定向机制的现存的整体映像的方法的流程图。
具体实施方式
应该理解在下面的描述中提供了多种不同的实施例,或实例,用来实现本发明的不同特征。在下面将描述组件和设备的详细实例用来简化本发明。当然,这些仅是示例并不倾向用于限制。另外,本发明将在各种实例中重复参考标记和/或字母。这种重复用于简化和分类的目的,而不是在本质上指示各种实施例和/或所讨论的构造之间的关系。
参考图1,描述了根据本发明的一个实施例的系统100。根据本发明的该系统100包括映像创建系统102、无线网络104、和无线设备106。在下面将会作出更加详细的描述,映像创建系统102提供创建包含有可执行指令和/或数据的映像的功能。该映像通过无线网络104被传递到无线设备106。然后无线设备106使用所传递的映像来向用户提供各种各样的功能,并通过无线网络104和其他设备进行通信。该映像可以包括各种功能和数据的组合,而且附加特性和错误修正被采用来更新由映像创建系统102创建的映像。网络104可以是任何类型的网络,包括集中式和专门(ad hoc)网络,以及可以采用任何类型的网络技术,包括码分多址(CDMA),全球移动通信系统(GSM),正交频分多址(OFDM),或类似的通信技术。在本实例中,该网络被描述为基于分组的网络,但是应该理解,本发明公开应用于任何类型的传输。
参考图2,计算机被图示为图1中的映像创建系统102的一个实施例。该映像创建系统102可以包括中央处理单元(“CPU”)202、存储器单元204、输入/输出(“I/O”)装置206和网络接口208。该网络接口208可以是,例如,一个或多个无线和/或有线网络接口卡(NIC),其每一个都与媒介访问控制(MAC)地址相关联。该网络接口208可以和网络104直接耦合,或通过一个或多个其它网络(未示出)被耦合。每个组件202、204、206和208可以通过总线系统210相互连接。
应该理解,映像创建系统102可以被不同地配置,以及所列出的每个组件实际上代表多个不同的组件。例如,CPU202可以代表多个处理器或分布式处理系统;存储器单元204可以包括不同级别的高速缓冲存储器、主存储器、硬盘以及远端存储位置;以及I/O设备206可以包括监控器、键盘以及类似的器件。而且,虽然已经在映像创建系统102中示出,但是应该理解,一些组件(例如键盘)可以在物理上位于映像创建系统的外面。此外,组件202、204、206和208的一些或所有可以是分布式的。因此,映像创建系统可以被非常灵活地配置。
参考图3,描述了图1的无线设备106的一个实施例。该无线装置106包括处理器302、存储器304、和无线通信系统306。应该理解,该无线装置106可以是任何移动设备等,包括蜂窝电话、个人数字助理以及膝上型电脑。另外,给定操作系统被用来控制无线装置106,还可以提供用户接口,通过该用户接口,该装置的用户可以访问和利用各种功能。
无线装置106的存储器304包括可执行指令的二进制映像以及包括在无线装置内的数据,虽然已知并不是所有的指令和数被包括在映像中。在本实例中,该映像为整体映像,该整体映像包含静态关系中的指令和数据,其在被传递到无线装置之前被创建。
虽然这种映像经常被用于具有相对简单的操作系统的装置中,其中该操作系统不支持动态链接,例如动态连接库(DLL)或动态共享对象(DSO),但是当更新无线装置106时,静态整体映像的使用带来了许多问题。这些问题常常是源于当存在于装置的映像采用新映像被更新时所发生的映像更新。当映像更新发生时,装置上的映像和被传递到装置的新映像之间的差别被称作两个映像间的映像增量(例如变化量)。
这种问题是发生在当映像的更新导致映像的两部分间的引用发生改变时的引用改变传播问题。因为映像是静止的,所以当调用不再在同一地址的程序模块时,改变映像的一部分会破坏映像的功能。
该引用改变传播问题一般说来不是支持动态链接,例如通过使用DLL或DSO,的操作系统的问题。众所周知,一般说来DLL可被定义为包含有可执行代码和/或数据的文件,其在加载时和运行时而不是在链接期间绑定到程序。多个应用程序可以同时共享DLL中的代码和数据。DLL与WINDOWS操作系统相关联。在此,WINDOWS为华盛顿州Redmond的微软公司的注册商标。DSO一般被定义为提供将运行时进行加载的特定格式的程序代码的片段建造(build)至可执行程序的地址空间中的方式的机制。DSO获得对可执行程序符号集的认识,就像它已经被静态链接到其上一样。DSO与UNIX/LINUX操作系统相关联。
当映像被更新时缺少对DLL和DSO的支持可能会发生问题。因为整体映像为指令和数据的固定的二进制表示,因此一旦映像完成各种单元的地址是静态的。这使得很难支持映像的增量更新,因为当这种更新发生时会引起地址的改变。例如,当映像被创建时,映像中的子程序与固定的地址相关。该地址被插入到需要调用子程序的映像的其他部分中。然而,更新将使得子程序从原始地址移动到新地址。因为映像的其他部分被静态地链接到原始地址,所以他们不再能够调用子程序,并且错误可能会发生。因此,在执行增量更新时在整个整体映像中无法传播引用改变,在无线装置的操作中会导致很严重的问题。这个问题将在图4A-4C中作更加详细的描述。
参考图4A,描述了整体映像400的一个实施例。整体映像400包括第一和第二指令部分402和406,以及数据部分404。应该理解,部分402、404和406仅是为了描述的目的,可以提供指令和数据的各种组合或组织。如所描述,整体映像的每个部分402、404和406和下一个部分相邻,而且在之后有存储器的可用部分408,并与第二指令部分406相邻。然而,如果除了第二指令部分406之外的任何部分被更新,那么就不会存在和正在更新的部分相邻的、可以存储更新的可用存储器。
另外参考图4B,图4A的映像将采取分段的链接结构被描述。分段的链接结构将映像400分成多个部分(例如,第一、第二和第三部分402、404和408),并采用可用存储器块将各个部分分离。例如,有可用部分410与第一指令部分402相邻,可用部分412与第二指令部分404相邻,和先前被描述的分离的可用部分408。应该注意,可用部分408因为可用部分410和412的存在变小了。可用部分准许在不需要来重新创建整个整体映像的情况下部分402和404的一些扩展。这种解决方法在一些情况下是可行的,但是没能解决引用改变传播问题,这是因为分段继续保持链接,而且一般来说不能解决当更新需要比被已经保留的存储器更多的存储器时发生的问题,如图4C所示的。
另外参考图4C,指令部分402需要比在可用部分412原始被分配的更多的空间。因此,如果指令部分402继续作为一个邻近块,它将与重叠部分414指示的数据部分404相重叠。在该实例中,该重叠部分414会盖写数据部分404,重叠部分414会被分成不相邻的部分或单独的部分,不相邻的部分和单独的部分被部分地存储在不相邻的可用存储器中,或数据部分404将会被移动。明显地,盖写数据部分404的开头部分将会破坏功能。如先前所述的,移动数据部分404也会损害功能,这是因为静态链接的引用会被破坏。
虽然分段的链接结构一般来说是比采用不具有由分段的链接结构所提供的可用相邻存储器空间的映像文件更好的解决方案,但是该结构不能很满意地解决与整体映像相关的问题。例如,为了产生分段的链接结构,将采用诸如分散文件(scatter file)之类的文件。众所周知,分散文件被用来告知链接器从哪里将文件或对象装载到存储器。一般来说,形成分散文件要耗费时间。而且,分段的链接结构趋向于耗费相对较大量的存储器,这是因为各分段间剩余的可用部分应该大到足够能够在相应的分段中接收预期的容量(size)增加。尽管那样,可用部分因为更新和错误修正会相对比较快地溢出,这就意味着新的分散文件必须产生。在各分段间移动函数还需要创建新的分散文件。分段的链接结构所需要的复杂性和空闲存储器一般来说和代码大小成比例。一般来说,不可能关于第三方程序库来执行分段的链接。并且,分段的链接结构维持分段间的引用,因此修改分段将会导致需要更新映像中所有的引用。因为这样或其它的原因,对读写数据、只读数据和非初始化数据的改变将导致映像的大变化。
一般来说,对于整体映像所体现的软件几乎不存在灵活性。采用无线装置以外的工具来创建映像然,后当完成时被传递到该无线装置。因为无线装置的相对比较简单的操作系统和整体映像的使用,所以诸如附加特性和错误修正之类的更新可能需要修改整个映像以及被传递到无线装置。这由于一些原因经常是不切实际的。不但在较长周期的时间内利用消费者的带宽是不切实际的,而且政府法规可能限制进行更新的时间量。例如,政府托管(mandate)的911限制可能需要更新不超过5分钟。同样,更新移动装置上现有映像的大部分经常是不可行的。
参考图5,方法500描述了当创建静态的整体映像时用于解决引用改变传播问题的过程的一个实施例。根据方法500,在步骤502,方法500识别组成映像的多个组件。如同在之后将详细描述那样,组件表示构成映像的模块并且可以与从相同映像中构成的分段的链接结构的分段几乎没有关系或毫无关系。组件或模块可以是默认型的或用户定义的。
在步骤504,输出符号列表和输入符号列表需要被针对每个组件建造。该输出符号列表包含所有组件外面可用的符号,例如变量和函数。该输入符号列表包含该组件所需要从其它组件调用的所有符号。应该理解,输出符号列表和输入符号列表被用于该例子的目的,识别和跟踪符号的其它过程也可被采用。例如,包含有所有输出符号的单个的列表和它们相应的组件可被采用,以及另一个列表可包含所有输入符号和它们相应的组件。在另一个实例中,两个列表会合并为单个列表。识别可从组件输出的符号和由组件从另一个组件输入的符号的其它机制也可被采用。
在步骤506,一个或多个重定向机制,例如跳转表(jump table)或镶面(veneer)代码,基于输出和输入符号列表被建造。跳转表是包含有子程序地址的阵列(array)。例如,跳转表向每个子程序提供间接的引用。因此,如果组件引用该阵列的具体元素,则该组件将会被重定向到相应的子程序。镶面是指令的短序列,被用来进行子程序调用。调用组件采用诸如有限范围分支指令之类的指令来传递控制到镶面。然后镶面通过允许传递到适当目的地的机制来传递控制到目的地子程序。因此,跳转表和镶面都使能重定向。应该理解,可以采用其它重定向机制来代替,虽然需要一些修改,这取决于所采用的具体的重定向机制。
为了建造重定向机制,该方法500检查输出和输入符号列表来识别既包含在输出符号列表又包含在输入符号列表的符号。仅是既包含在输出符号列表又包含在输入符号列表中的符号可被包括在重定向机制中。在步骤508,组件间的所有的直接引用都被更改来指向重定向机制。例如,包含有对另一个组件中的函数的直接引用调用的组件会被修改来包含有对重定向机制的引用调用,那么这将会将调用组件重定向到适当的函数。因此,组件间的所有的直接引用都被去除并且映像被提供有伪DLL功能。对组件的任何改变将会通过改变重定向机制中的适当地址被反映,而不用改变需要访问改变的组件的每个组件。
参考图6,编译(compiling)系统600的一个实施例采用各种模块来编译图1中的映像创建系统102的可执行程序612。一般来说,软件程序采用高级语言(例如源代码)来编写,并被转换为机器可读语言,例如目标代码。虽然在术语和实际处理中会发生一些变化,但是编译系统600提供用于公用转换处理的模块,包括预处理程序602、编译器604、汇编器606和链接器610。这些预处理程序602、编译器604、汇编器606和链接器610是被共同使用的模块,该模块一般说来与具体的编程语言和/或平台相关。
伪DLL链接器608被插入到汇编器606和链接器610间的处理来修改在链接前的汇编器的输出,这将在后面做更加详细的讨论。这种安排使伪DLL链接器608能够在各种文件变得太大而不容易操作前操作各种文件。
预处理程序602负责收集将要被编译的源程序的不同部分。编译器604获得预处理程序602的输出,并将它转换为汇编语言代码,而且汇编器606将汇编语言代码翻译成机器语言代码。传统上,链接器610随后会获得机器语言代码,识别机器语言代码所参考到的任何程序库或其它外部模块,并将这些模块绑定到机器语言代码从而构成最终的映像612。
在本实例中,伪DLL链接器608接收由汇编器606所创建的机器语言代码,修改该代码,然后调用链接器610来链接被修改的代码。应该注意,汇编器606和链接器610基本上不会从即使是不包含有伪DLL链接器608的系统而改变。例如,汇编器606可以被修改来调用伪DLL链接器608而不是链接器610,或者伪DLL链接器可以从汇编器截取调用。在另一个实施例中,汇编器输出可被写入文件,而且伪DLL链接器608按照调用链接器610之前的文件操作。在此,链接器610可以不被改变。
按照这种方法,因为需要识别和操作机器代码级的代码以及实际上一般说来机器代码被创建用于具体的平台/架构,所以应该理解,不同的伪DLL链接器608需要被写出用于被提供有伪DLL功能的每个平台。例如,不同的伪DLL链接器可被作为插件或者模块被提供给用来操作目标代码的编程工具,例如BFD(二进制文件描述符)。众所周知,BFD为采用程序库来准许应用程序采用一组子程序来操作目标文件而不管目标文件的格式的软件工具。新的目标文件格式可以通过创建新的BFD后台(back end)以及将其加入到BFD程序库而被支持。BFD被分成前台(front end)和一个或多个后台,每个目标文件格式有一个前台。该前台提供用户界面并管理存储器和各种标准的数据结构,同时决定采用哪个前台以及何时调用后台子程序。每个后台提供一组前台可以使用的调用来维持它的标准形式。因此,用于具体平台/结构的每个伪DLL链接器可被提供作为对诸如BFD之类的工具的后台。
参考图7,在另一个实施例中,方法700被用来处理当在映像中存在对整体映像效果(impact)直接引用的变化时所引起的问题。在本实例中,在编译最终映像期间方法700发生在汇编过程和链接过程之间,如上参考图6所述。在方法700完成后,最终映像是静态的、具有重定向机制的整体映像。虽然为了描述的目的在本实例中跳转表被用作重定向机制,但是应该理解,跳转表可被其它重定向机制,例如镶面,代替,虽然要依据所采用的具体的重定向机制需要做一些修改。
在步骤702,从汇编器接收映像。伪DLL链接器应能够识别和操作由汇编器创建的机器语言代码的部分。如上所述,需要不同的伪DLL链接器用于所支持的每个具体的平台/结构。
在步骤704,方法700确定是否存在定义文件,例如组件描述文件。该组件描述文件使用户能够定义将要用来形成最终映像的一些或所有的组件。在本实例中,组件并不限于由汇编器定义的文件或对象,虽然如果希望的话可以将其进行定义。每个组件可以是模块的集合,其中模块可以是可再定位的文件,而集合可以被重新定义,例如,可以是档案。例如,具有*.a或*.lib的名称的档案可以是包含有多个模块的程序库,而程序库本身可以被识别为组件。为了识别组件,方法700检查机器语言代码来识别各段代码间的相似性(affinity),然后,除非有另外的指引,基于这些相似性来构造组件。
如果不存在组件描述文件,方法700进入到步骤706,在此采用默认的定义来识别和构造组件。例如,默认的定义可定义组件为带有被合并为单个组件的任何非程序库文件的相关模块的集合。例如,默认定义可定义组件为单个程序库或其它被定义的集合。因此,如果存在有两个程序库和多个非程序库文件,在步骤706将会识别出三个组件。
然而,如果存在组件描述文件,方法700转到步骤708,在此其采用组件描述文件722来识别和构造组件如同文件中所描述的。这使得用户能够像希望的那样来定义组件。例如,用户可以将多个程序库组合成单一组件,将程序库分割成多个组件等。应该理解,采用用户定义某些组件和允许其它组件根据默认定义被定义,可以将用户定义和默认定义相混合。为了示例的目的,另外参考图4A,指令部分402和数据部分404为组件(“组件A”),以及指令部分406是组件(“组件B”)。
在步骤710,方法700为每个组件构造输出符号列表。在本实例中,符号是变量或函数。输出符号列表是对于其他组件可以访问的、组件内所有符号的列表(例如,与组件的应用程序接口(API)相关的任何符号)。
继续先前图4A的实例,假设指令部分402包括三个函数func1,func2和func3,数据部分404包括变量X,指令部分406包括函数func4和变量Y和Z。这将在下面的表1中示出。
表1
组件A | 组件B(指令部分406) | ||
指令部分402 | 数据部分404 | ||
所有函数/变量 | func1,func2,func3 | [X,Y] | func4,Z |
函数func1和func3都是在组件A以外可以访问的(即,func1和func3都在组件A的API),但是func2不是。变量X在组件A以外可以访问,但是Y不是。函数func4和变量Z都是在组件B以外可以访问的。从它们的组件以外可得到的每个函数和变量被放置在该组件的输出列表中。这将在下面的表2中示出。
表2
组件A | 组件B(指令部分406) | ||
指令部分402 | 数据部分404 | ||
所有函数/变量 | func1,func2,func3 | X,Y | func4,Z |
输出符号列表 | func1,func3,X | func4,Z |
在步骤712,方法700为每个组件构造输入符号列表。该输入符号列表是组件需要从其他组件调用的所有符号的列表。同时,输出和输入符号列表包含组件间所有可能的引用。
继续先前的实例,函数func1和func2仅调用函数func1、func2和func3,但是func3调用func4,func4被包含在组件B中。例如,调用在组件A的内部。另外,组件A需要访问变量X(组件A内)以及组件Z(组件B内)。组件B需要从组件A访问func1。被组件从另一个组件调用的每个函数和变量被放置在调用组件的输入列表中。例如,变量Z将被放置在组件A的输入列表中,这是因为它被包含在组件B内,但是变量X将不会在输入列表中,这是因为它被包含在相同的组件内(虽然是不同的模块)。这将在下面的表3中示出。
表3
组件A | 组件B(指令部分406) | ||
指令部分402 | 数据部分404 | ||
所有函数/变量 | func1,func2,func3 | X,Y | func4,Z |
输出符号列表 | func1,func3,X | func4,Z | |
输入符号列表 | func4,Z | func1 |
在步骤714,既包含在输出符号列表又包含在输入符号列表的所有符号被识别,而且在步骤716,所识别的符号和它们相应的地址被放在跳转表中。因此,该跳转表仅包含相应于输入符号的每个输出符号的引用。仅是对调用组件以外的符号的调用具有跳转表中的引用。例如,对于调用组件以外的符号的调用参考不引用包含在组件本身内的符号的任何调用。
虽然func1和func3都可从组件A以外访问,但是在当前的程序中仅是func1将会被调用,因为没有其它的组件需要调用func3。因此,func3将不会被放置在跳转表中。函数func4和Z也会被放置在跳转表中因为它们都被外部组件调用。这将在下面的表4中示出。
表4
组件A | 组件B(指令部分406) | ||
指令部分402 | 数据部分404 | ||
所有函数/变量 | func1,func2,func3 | X,Y | func4,Z |
输出符号列表 | func1,func3,X | func4,Z | |
输入符号列表 | func4,Z | func1 |
跳转表中的符号 | func1,func4,Z |
在步骤718,方法700变更组件间的所有直接引用而指向跳转表。例如,相对于func4和Z的组件A中的所有引用将被修改指向跳转表而不是直接指到组件B,以及相对于func1的组件B中的所有引用将被修改指向跳转表而不是直接指到组件A。因此,导致func1、func4或Z的不同地址的映像的改变可通过修改跳转表中相应的间接地址被修改而不是需要修改调用组件中的每个直接引用。
在步骤720,链接器(例如图6的链接器610)被调用来链接最终映像。该最终映像将包括被修改过的组件以及跳转表。一旦完成,该映像将被传递到无线装置。
另外参考图8A,在本实例中,单个映像800包括组件A(由参考标记802表示)以及组件B(由参考标记804表示)。组件A与邻近的存储器空间806相关,组件B与邻近的存储器空间808相关。存储器空间806和808将一些邻近的扩展空间提供给它们相应的组件。存在有相对于整体映像800的单个跳转表810,或可以使用多个跳转表(如图8B中的跳转表810和812所示)。例如,在一些实施例中,小的跳转表会需要更小的空间,这是因为它能够提供相应于符号的位置的地址以及单独指令的转移指令。相反的,大的跳转表可能需要分离的装载地址以及转移指令。如果使用较小的跳转表,应该理解,包含在每个表中的符号可被分离以便特定的组件仅需采用一个或两个跳转表。然而,可以采用符号和跳转表的任何组合。
为了示例的目的,映像本身可以大约是二十二兆字节(MB),虽然应该理解,可以采用任何尺寸的映像。每个跳转表(假设每个组件都有跳转表)可以大约是四千字节(KB)。可用存储器空间806和808的大小可以大约是四到十六KB并可以位于包含一个或多个组件的每个四MB空间之后。剩余的存储器可以构成大约两百和五十KB以及八百KB之间的邻近的存储器空间。应该理解,这些值仅为了示例的目的,而映像、跳转表、可用存储器空间和剩余的存储器的大小可以是任何希望的大小。
参考图9,在另一个实施例中,方法900可被用在映像补丁中以执行诸如先前采用重定向机制创建并且被存储在无线装置上的现有映像的更新之类的行为。方法900例如可以在图1的映像创建系统102上被执行。在步骤902,方法900确定现有映像和新映像间的映像增量来识别两个映像间的差别。在步骤904,对包含在映像的重定向机制中的任何符号的地址的任何改变都基于映像增量被识别。在步骤906,重定向机制中的地址被更新来反映被识别的改变。在步骤908,任何组件和重定向机制更新被传递到无线装置。
根据本发明,当在无线装置中使用的映像被更新时,可以通过经由补丁最小化模块来最小化补丁大小以最小化更新的影响。
虽然在上文中仅详细描述了本发明的几个示例性实施例,但是本领域技术人员很容易想到在本质上不脱离本发明的新颖性教导和本发明的优点的情况下可以对示例性实施例做出任何的修改。并且,与一些实施例相关的上文描述和讨论的特征可以和与其它实施例相关的上文中描述和讨论的特征相结合。因此,所有这样的修改都倾向于包括在本发明的范围内。
Claims (18)
1.一种用于提供在无线装置中使用的整体映像的方法,该方法包括:
识别形成用机器代码表示的映像的多个组件;
对于多个组件中的每个组件,建造包含有其它组件可访问的该组件内所有符号的输出符号列表和包含有该组件所需要的其它组件内所有符号的输入符号列表;
建造包含有对在每个组件的输出符号列表中的每个符号的、在至少一个其他组件的输入符号列表中的间接引用的重定向机制;
对于多个组件中的每个组件,改变对另一个组件中的符号的每个直接引用来引用与重定向机制中的符号相关联的间接引用,其中组件内的引用不被改变;和
创建包含有已改变的组件和重定向机制的最终映像。
2.根据权利要求1所述的方法,进一步包括在用来识别多个组件的组件描述文件中为组件定义至少一个准则。
3.根据权利要求2所述的方法,进一步包括确定用来识别多个组件的组件描述文件是否存在。
4.根据权利要求3所述的方法,进一步包括:如果不存在组件描述文件,则使用至少一个默认组件定义来识别多个组件。
5.根据权利要求1所述的方法,其中建造重定向机制包括创建至少一个跳转表。
6.根据权利要求1所述的方法,其中建造重定向机制包括创建至少一个镶面。
7.根据权利要求1所述的方法,其中以机器代码表示的映像直接从汇编器接收,以及其中最终映像通过调用通常被汇编器直接调用的链接器来创建。
8.根据权利要求1的方法,进一步包括采用无线固件过程传递映像到无线装置。
9.一种用于提供在无线装置中使用的整体映像的方法,该方法包括:
从汇编器接收映像;
识别形成映像的多个组件;
从每个组件中识别可输出的所有符号以及从另一个组件中识别被每个组件输入的所有符号;
建造包含有由一个组件输出而被另一个组件输入的每个符号的地址的重定向机制;
修改每个组件来改变对与另一个组件相关联的符号的每个直接引用为对重定向机制的引用;以及
调用链接器来基于修改后的组件链接最终映像。
10.根据权利要求9所述的方法,其中识别多个组件使用包含在由用户准备的组件描述文件中的至少一个组件定义。
11.根据权利要求9所述的方法,其中识别多个组件使用包含在默认描述文件中的至少一个组件定义。
12.根据权利要求9所述的方法,其中符号是变量或函数。
13.根据权利要求9所述的方法,其中多个组件中的至少一个包括多个模块,该方法进一步包括对多个模块进行分组从而形成组件。
14.一种用于提供在无线装置使用的整体映像的方法,该方法包括:
从形成以机器语言代码接收的映像的多个模块中建造至少第一和第二组件;
为第一和第二个组件的每一个建造输出符号列表和输入符号列表;
将第一组件的输出符号列表与第二组件的输入符号列表相比较,并且将第二组件的输出符号列表与第一组件的输入符号列表相比较,来识别第一和第二组件中的一个的输出列表以及第一和第二组件中的另一个的输入列表上的任何符号;
建造包含有每个被识别的符号的位置的重定向机制;以及
修改第一组件来将对第二个组件的输出符号的每个引用改变为对重定向机制的引用,以及修改第二个组件来将对第一个组件的输出符号的每个引用改变为对重定向机制的引用。
15.根据权利要求14所述的方法,进一步包括调用链接器以基于修改后的组件和重定向机制创建可执行映像。
16.根据权利要求14所述的方法,进一步包括基于预定的一组组件定义来组织多个模块成为第一和第二个组件。
17.一种用于提供在无线装置中使用的整体映像的系统,该系统包括:
处理器;
与处理器相耦合的存储器单元;以及
多个存储在存储器中,由处理器执行的指令,该指令包括用于完成以下功能的指令:
将用于无线装置的整体映像从汇编代码转换为机器代码;
基于用机器代码所识别的模块建造多个组件;
识别每个组件可输出的每个符号和每个组件输入的每个符号;
建造包含有可由一个组件输出的、由另一个组件输入的每个符号的重定向机制;
修改每个组件将对与另一个组件相关联的输出符号的每个引用改变为对重定向机制的引用;以及
链接已修改的组件和重定向机制来创建整体映像的最终版本。
18.根据权利要求17所述的系统,进一步包括传递整体映像的最终版本到无线设备的装置。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US74133405P | 2005-12-01 | 2005-12-01 | |
US60/741,334 | 2005-12-01 | ||
US11/334,600 US7735075B2 (en) | 2005-12-01 | 2006-01-18 | System and method for a pseudo dynamic link library (DLL) linker for a monolithic image in a wireless device |
US11/334,600 | 2006-01-18 | ||
KR1020060118496A KR101213275B1 (ko) | 2005-12-01 | 2006-11-28 | 무선 장치에서 사용할모놀리식(monolithic)이미지를 제공하기 위한시스템 및 방법 |
KR118496/06 | 2006-11-28 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101026826A true CN101026826A (zh) | 2007-08-29 |
CN101026826B CN101026826B (zh) | 2011-11-30 |
Family
ID=38120236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006100644771A Expired - Fee Related CN101026826B (zh) | 2005-12-01 | 2006-12-01 | 用于提供在无线装置中使用的整体映像的系统和方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7735075B2 (zh) |
KR (1) | KR101213275B1 (zh) |
CN (1) | CN101026826B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101916194A (zh) * | 2010-06-01 | 2010-12-15 | 浙江大学 | 一种无线传感网节点程序的部署方法 |
CN103218428A (zh) * | 2013-04-09 | 2013-07-24 | 深圳市九洲电器有限公司 | 一种动态链接方法及系统 |
CN101782860B (zh) * | 2009-01-21 | 2013-10-09 | 华为技术有限公司 | 一种程序链接方法及装置 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070132774A1 (en) * | 2005-12-01 | 2007-06-14 | Samsung Electronics Co., Ltd. | System and method for a patch minimization tool |
US7921206B2 (en) * | 2007-04-18 | 2011-04-05 | Nec Laboratories America, Inc. | Visibility and control of wireless sensor networks |
US8281294B1 (en) * | 2007-11-12 | 2012-10-02 | Nvidia Corporation | System and method for representing and managing a multi-architecture co-processor application program |
US8276132B1 (en) * | 2007-11-12 | 2012-09-25 | Nvidia Corporation | System and method for representing and managing a multi-architecture co-processor application program |
CN101697131B (zh) * | 2009-11-04 | 2013-07-03 | 中兴通讯股份有限公司 | 一种可重定位文件动态加载的方法及装置 |
WO2011130869A1 (en) * | 2010-04-19 | 2011-10-27 | Hewlett-Packard Development Company, L.P. | Object linking based on determined linker order |
US9753710B2 (en) * | 2013-11-07 | 2017-09-05 | Netronome Systems, Inc. | Resource allocation with hierarchical scope |
US20150379064A1 (en) * | 2014-06-25 | 2015-12-31 | Linkedin Corporation | Dependency management during model compilation of statistical models |
US10248545B2 (en) * | 2016-02-17 | 2019-04-02 | Parasoft Corporation | Method for tracking high-level source attribution of generated assembly language code |
CN113204377B (zh) | 2020-01-31 | 2022-12-06 | 华为技术有限公司 | 一种动态链接库的加载方法及装置 |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5206951A (en) * | 1987-08-21 | 1993-04-27 | Wang Laboratories, Inc. | Integration of data between typed objects by mutual, direct invocation between object managers corresponding to object types |
US5193191A (en) * | 1989-06-30 | 1993-03-09 | Digital Equipment Corporation | Incremental linking in source-code development system |
US5623604A (en) * | 1992-11-18 | 1997-04-22 | Canon Information Systems, Inc. | Method and apparatus for remotely altering programmable firmware stored in an interactive network board coupled to a network peripheral |
US5835743A (en) * | 1994-06-30 | 1998-11-10 | Sun Microsystems, Inc. | Application binary interface and method of interfacing binary application program to digital computer |
US5701491A (en) * | 1995-05-31 | 1997-12-23 | Microsoft Corporation, Inc. | Method and system for transitioning the network mode of a workstation |
US6002876A (en) * | 1996-09-27 | 1999-12-14 | Texas Instruments Incorporated | Maintaining code consistency among plural instruction sets via function naming convention |
US5938766A (en) * | 1997-03-21 | 1999-08-17 | Apple Computer, Inc. | System for extending functionality of a digital ROM using RAM/ROM jump tables and patch manager for updating the tables |
US7080371B1 (en) * | 1998-03-03 | 2006-07-18 | Siebel Systems, Inc. | Method, system, apparatus and program product for distribution and instantiation of software upgrades |
DE19915135A1 (de) * | 1998-03-27 | 1999-11-04 | Nec Corp | Verfahren zur Erzeugung einer Verknüpfungshinweis-Datei und Tool/Instrument dafür |
US6701356B1 (en) * | 1998-04-15 | 2004-03-02 | Ciena Corporation | Method and apparatus for automatically downloading profile and image files for optical network elements |
US6079015A (en) * | 1998-04-20 | 2000-06-20 | Motorola, Inc. | Data processing system having selectable exception table relocation and method therefor |
FR2781582B1 (fr) * | 1998-07-21 | 2001-01-12 | Technical Maintenance Corp | Systeme de telechargement d'objets ou de fichiers pour mise a jour de logiciels |
US6298481B1 (en) * | 1998-10-30 | 2001-10-02 | Segasoft, Inc. | System for modifying the functionality of compiled computer code at run-time |
US6698016B1 (en) * | 2000-08-29 | 2004-02-24 | Microsoft Corporation | Method for injecting code into another process |
US6684395B2 (en) * | 2000-12-28 | 2004-01-27 | Intel Corporation | Multiple image dynamic bind and load procedure for a multi-processor |
TW575262U (en) * | 2001-04-16 | 2004-02-01 | Interdigital Tech Corp | A frequency division duplex/code division multiple access (FDD/CDMA) user equipment |
US7155710B2 (en) * | 2001-06-08 | 2006-12-26 | Igt | Method and apparatus for gaming device software configuration |
US7251812B1 (en) * | 2001-10-31 | 2007-07-31 | Microsoft Corporation | Dynamic software update |
US7844734B2 (en) * | 2002-11-18 | 2010-11-30 | Innopath Software, Inc. | Dynamic addressing (DA) using a centralized DA manager |
WO2004091207A1 (ja) * | 2003-04-02 | 2004-10-21 | Matsushita Electric Industrial Co., Ltd. | データ再生装置、映像表示装置、それらを用いたソフトウェア更新システムおよびソフトウェア更新方法 |
US7089270B2 (en) * | 2003-06-20 | 2006-08-08 | Innopath Software | Processing software images for use in generating difference files |
CN1973262B (zh) | 2003-10-23 | 2012-08-22 | 创道软件有限公司 | 使用集中动态寻址(da)管理器的动态寻址 |
US7376945B1 (en) * | 2003-12-02 | 2008-05-20 | Cisco Technology, Inc. | Software change modeling for network devices |
WO2005074621A2 (en) | 2004-02-02 | 2005-08-18 | Innopath Software, Inc. | Dynamic addressing (da) using a centralized da manager |
US7266805B2 (en) * | 2004-12-22 | 2007-09-04 | Timesys Corporation | Systems and methods for generating software and hardware builds |
-
2006
- 2006-01-18 US US11/334,600 patent/US7735075B2/en not_active Expired - Fee Related
- 2006-11-28 KR KR1020060118496A patent/KR101213275B1/ko not_active IP Right Cessation
- 2006-12-01 CN CN2006100644771A patent/CN101026826B/zh not_active Expired - Fee Related
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101782860B (zh) * | 2009-01-21 | 2013-10-09 | 华为技术有限公司 | 一种程序链接方法及装置 |
CN101916194A (zh) * | 2010-06-01 | 2010-12-15 | 浙江大学 | 一种无线传感网节点程序的部署方法 |
CN103218428A (zh) * | 2013-04-09 | 2013-07-24 | 深圳市九洲电器有限公司 | 一种动态链接方法及系统 |
CN103218428B (zh) * | 2013-04-09 | 2016-07-06 | 深圳市九洲电器有限公司 | 一种动态链接方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
KR101213275B1 (ko) | 2012-12-17 |
US7735075B2 (en) | 2010-06-08 |
KR20070057666A (ko) | 2007-06-07 |
US20070130565A1 (en) | 2007-06-07 |
CN101026826B (zh) | 2011-11-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101026826B (zh) | 用于提供在无线装置中使用的整体映像的系统和方法 | |
US20070132774A1 (en) | System and method for a patch minimization tool | |
US6571388B1 (en) | Building a custom software environment including pre-loaded classes | |
US7542758B2 (en) | Field downloading of wireless device software | |
US7657886B1 (en) | Mobile device with a MMU for faster firmware updates in a wireless network | |
US5790860A (en) | Method and apparatus for patching code residing on a read only memory device | |
KR100940178B1 (ko) | 무선 통신 장치의 현장 업그레이드형 소프트웨어 조직시스템 및 방법 | |
CN101160564B (zh) | 用于实现有双端序能力的编译器的方法和装置 | |
EP0709767A1 (en) | Method and apparatus for multiplatform instruction set architecture | |
WO1994027220A1 (en) | Method and apparatus for vectorizing the contents of a read only memory device without modifying underlying source code | |
US20060070053A1 (en) | Dynamic linking of modules in a pre-operating system environment | |
US20090172338A1 (en) | Feedback linker for increased delta performance | |
CN112015522B (zh) | 系统功能扩展方法、装置及计算机可读存储介质 | |
CN102722387A (zh) | 动态打补丁的方法和装置 | |
US7814467B2 (en) | Program optimization using object file summary information | |
KR101036675B1 (ko) | Efi 기반 펌웨어에서의 프리 efi 초기화 모듈의 전역변수 사용법 | |
WO2008054074A1 (en) | Terminal device having function of interfacing compilation libraries in heterogeneous languages, method of calling api, and method of creating compile function | |
US20040123308A1 (en) | Hybird of implicit and explicit linkage of windows dynamic link labraries | |
US7634762B1 (en) | Selective post-compile conversion | |
US20060164269A1 (en) | Adaptive dispatch table based on templates | |
US20180129490A1 (en) | Object ordering preservation during lto link stage | |
US20030022665A1 (en) | System and method for organizing field upgradable wireless communication device software | |
US20030088865A1 (en) | Apparatus and method for incrementally performing remote loading | |
US20040117787A1 (en) | Reorganized storing of applications to improve execution | |
KR100478463B1 (ko) | 응용 프로그램의 동적링크 방법 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20111130 Termination date: 20171201 |