CN100442234C - 用于嵌入式系统的软件包构建方法和系统 - Google Patents
用于嵌入式系统的软件包构建方法和系统 Download PDFInfo
- Publication number
- CN100442234C CN100442234C CNB2005100774342A CN200510077434A CN100442234C CN 100442234 C CN100442234 C CN 100442234C CN B2005100774342 A CNB2005100774342 A CN B2005100774342A CN 200510077434 A CN200510077434 A CN 200510077434A CN 100442234 C CN100442234 C CN 100442234C
- Authority
- CN
- China
- Prior art keywords
- goal systems
- cross compile
- server
- instrument
- compiler
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 102
- 230000008569 process Effects 0.000 claims abstract description 73
- 230000008878 coupling Effects 0.000 claims description 5
- 238000010168 coupling process Methods 0.000 claims description 5
- 238000005859 coupling reaction Methods 0.000 claims description 5
- 230000003993 interaction Effects 0.000 claims description 2
- 230000005540 biological transmission Effects 0.000 claims 1
- 230000007246 mechanism Effects 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 241000406668 Loxodonta cyclotis Species 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000009885 systemic effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
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/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种软件包构建方法和系统,该方法包括:在要构建软件包的目标系统中创建远程编译服务器中交叉编译工具的存根;在目标系统上启动软件包构建过程;其中,在所述构建过程中,所述交叉编译工具的存根截获来自所述软件包构建过程的编译命令,并将该编译命令转发给所述远程编译服务器,由所述远程编译服务器中的相应的交叉编译工具对源文件进行编译。本发明的软件包构建方法和系统可以使嵌入式系统的软件开发者能够象在本机编译中那样在目标系统上启动软件包构建过程,而同时对软件包中源文件的实际编译则如交叉编译中那样由另外一台高性能计算机上的交叉编译工具来完成。
Description
技术领域
本发明涉及嵌入式系统的开发,具体地,涉及嵌入式软件包的构建过程。
背景技术
嵌入式系统是嵌入于各种设备及应用产品内部,用以控制这些设备和应用产品的计算机系统。通常,嵌入式系统的开发会涉及到交叉编译问题。所谓交叉编译就是在一个平台上生成在另一个平台上执行的代码。采用交叉编译技术的原因可能是:目标平台(产生的程序将在其上运行的系统)上不允许或不能够安装所需的编译器,而在为目标平台开发软件时又需要这个编译器的某些特征;或目标平台上的资源贫乏,无法运行所需的编译器;或目标平台还未建立,甚至还没有操作系统,更不能运行所需的编译器。
就嵌入式系统来说,通常不具有对应用软件进行编译和优化所需的资源,也没有足够的空间进行全面开发或纠错,所以在嵌入式软件的开发过程中经常需要采用交叉编译技术。
但是,对于嵌入式系统的软件开发人员来说,交叉编译并不是一个简单的过程。一方面,基于交叉编译的构建过程通常比在目标平台上的本机构建过程在编译速度上快得多。另一方面,它又比本机构建过程困难和复杂得多。以移植一个第三方软件为例,在本机构建的情况下,很少需要开发者去编辑构建过程,所需要的只是键入一个构建命令。但是,在交叉编译的情况下,开发人员经常需要在看到构建过程成功运行到结尾之前花费几个小时到几天的时间调试构建过程本身。在交叉编译中遇到麻烦的根本原因在于,运行构建过程的编译时平台不是所构建的程序将要运行的目标平台,即:运行时平台。更具体地,编译时平台与运行时平台之间的不同将引起下面两种情况中的问题:
1)构建过程中的某些步骤会试图运行前面步骤中所构建的某些中间程序,这是很常见的现象。此中间程序可能是用于探查目标平台的某些方面的特征,且构建过程可根据中间程序的执行结果相应地调整某些程序的编译选项。这种中间程序的一个例子是用于测试目标平台的位字段顺序的程序。这种中间程序的另一个可能的用途是用于生成要在后面的步骤中编译的源代码段。
很明显地,在交叉编译设置中,这些步骤将引起错误,因为所生成的目标二进制代码通常在构建平台,即:编译时平台,上是不可执行的。
2)在编译一个源文件之前,构建过程一般都会试图探查目标系统上是否存在待构建软件包所依赖的库及该库存在于目标系统的哪里。如果构建过程不能发现某些所依赖的库,则在进一步的编译中可能不会将相应的调用代码包括进去。相反,如果构建过程能找到必需的库,则应该将这些库的对象文件和头文件的正确路径通知给编译器。
但是,在交叉编译情况下,这种库探查不是一项简单的任务。这种任务经常是以安装在构建平台上但具有相同名字的“伪”库而错误结束。这无疑将在后面的步骤中引起编译错误。
可从http://www.research.att.com/~gsf/download/crosscomp.html处获得的、标题为“交叉编译”的文章中披露了一种解决上述交叉编译的第一种情况中问题的方法。该方法的主要思想是在构建过程需要运行一个中间程序时,不是在编译平台上运行该中间程序,而是在目标系统上远程执行该中间程序。但是,这种方案并没有解决上述第二种情况中的问题。
发明内容
本发明为了解决在嵌入式系统软件开发中使用交叉编译时容易产生编译错误的问题,同时又为了能够充分利用软件本机构建过程的简易性,提出了一种用于嵌入式系统的既具有交叉编译的高效特点,又具有本机构建的用户友好特点的软件包构建方案。
与交叉编译类似,本发明的软件包构建方案除了目标系统之外,还涉及到另一台计算机系统,其具有比目标系统高得多的性能,但是具有与目标系统不相同的体系结构。在本发明中,将该高性能计算机称作编译服务器。与交叉编译不同的是,本发明的软件包构建过程象本机编译中那样在目标系统上启动。此外,优选地,目标系统的根文件系统驻留在编译服务器中,目标系统通过网络从编译服务器上加载其根文件系统。
本发明的主要思想是实现一种机制,每当目标系统上的构建过程试图调用一个本地编译器以将源文件包中的源文件编译成可执行文件时,便截获此调用并将其重定向到远程编译服务器上运行的相应交叉编译工具。因为编译服务器的高性能,利用其上运行的交叉编译工具对源文件进行编译将比使用目标系统上相应的本机编译工具要花费更少的时间。此外,由于目标系统的文件系统实际存储在编译服务器上,所以在编译服务器上的交叉编译工具读输入文件及写输出文件时,不会涉及到网络IO操作。因此,在本发明中,源文件的编译速度与单纯的交叉编译情况是一样快的。
于是,根据本发明的一个方面,提供了一种软件包构建方法,包括:在要构建软件包的目标系统中创建远程编译服务器中交叉编译工具的存根;在目标系统上启动软件包构建过程;其中,在所述构建过程中,所述交叉编译工具的存根截获来自所述软件包构建过程的编译命令,并将该编译命令转发给所述远程编译服务器,由所述远程编译服务器中的相应的交叉编译工具对源文件进行编译。
优选地,根据本发明的软件包构建方法还包括:将所述目标系统中文件系统的映象储存在所述编译服务器中。所述调用远程编译服务器中相应的交叉编译工具的步骤进一步包括:所述交叉编译工具存根将目标系统上构建过程中的编译命令和命令行参数转发给所述编译服务器上的构建守护进程;所述构建守护进程利用接收到的命令行参数调用所述编译服务器中相应的交叉编译工具;所述被调用的相应的交叉编译工具根据上述命令行参数从编译服务器中目标系统的文件系统映象中读出所述源文件包中待编译的源文件并对该源文件进行编译,以生成目标系统上可执行的二进制代码。
优选地,根据本发明的软件包构建方法还包括:所述被调用的相应的交叉编译工具将对所述源文件的编译结果写入编译服务器中目标系统的文件系统映象中;所述目标系统上的构建过程从所述编译服务器中目标系统的文件系统映象中读出软件编译结果,并继续进行后续的软件包构建工作。
优选地,根据本发明的软件包构建方法还包括:将所述命令行参数及待编译的源文件的“#include”行中出现的绝对路径转换为所述编译服务器的文件名称空间中有效的相应路径;或将编译服务器上所调用的交叉编译工具的根目录设置为与目标系统的文件系统根目录相同的路径,并将与该调用的交叉编译工具相关的可执行文件和库复制到该根目录下;将编译服务器上所调用的交叉编译工具的当前工作目录设置为与目标系统上的构建过程调用相应交叉编译工具存根时所在的当前目录匹配的路径。
根据本发明的另一个方面,还提供了一种软件包构建系统,包括:编译服务器,该编译服务器包括:构建守护进程,用于接收来自目标系统的编译工具调用请求,并根据该请求调用相应的交叉编译工具;以及至少一个交叉编译工具,用于将指定的源文件编译成目标系统上可执行的二进制代码;以及布置于目标系统中的至少一个交叉编译工具存根,每一交叉编译工具存根对应于编译服务器上的一个相应的交叉编译工具,用于截获来自软件包构建过程的编译命令,并将其转发给编译服务器,由编译服务器上对应的交叉编译工具对目标系统上相应的源文件进行编译。
优选地,所述编译服务器还包括:目标系统的文件系统映象,所述交叉编译工具从该目标系统的文件系统映象中读取指定的源文件包中待编译的源文件以及相关文件,并将编译结果写入该文件系统映象中,其可由目标系统立即访问。
优选地,所述编译服务器还包括:网络文件系统,所述目标系统通过该网络文件系统来访问驻留在编译服务器上的该目标系统的文件系统映象中的文件。
优选地,所述目标系统包括:交叉编译工具存根创建模块,用于与远程编译服务器交互,以在目标系统上创建远程编译服务器上每一交叉编译工具的存根。
本发明所提供的软件包构建方法和系统相对于本机编译来说,能够使嵌入式软件的开发者在软件构建过程中获得与利用交叉编译时近似的较短编译周期,同时相对于交叉编译来说,该方法和系统又能够保留本机构建的简易性。也就是说,由于本发明中主要的构建过程是在实际的目标系统上执行的,所以其不会使嵌入式软件的开发者遇到在使用交叉编译时将会出现的那些问题,更具体地:
1)如果构建过程中的某个步骤需要执行一个前面步骤中编译出的中间程序,则本发明可以使该步骤照常在目标系统上执行该程序;
2)本发明的构建过程中对库或其他相关文件的探查不会象在交叉编译中那样以“伪”库或文件结束。
通过结合交叉编译的速度优势和本机构建的简易性优势,本发明可在大多数情况下为嵌入式软件的开发者带来最佳编译效率。
通过以下结合附图对根据本发明的优选实施例的详细说明,会使本发明的这些或其他方面将变得更加清楚。
附图说明
图1是根据本发明一个优选实施例的用于嵌入式系统的软件包构建系统的示意图;
图2是根据本发明一个优选实施例的图1系统中编译服务器的方框图;
图3是根据本发明一个优选实施例的图1系统中布置于目标系统中的部分的方框图;
图4是根据本发明一个优选实施例的用于嵌入式系统的软件包构建方法的流程图。
具体实施方式
下面就结合附图对本发明的优选实施例进行详细的说明。
图1是根据本发明一个优选实施例的用于嵌入式系统的软件包构建系统的示意图。
如图1所示,该软件包构建系统由编译服务器10和布置于嵌入式目标系统11中的系统部分组成。编译服务器10用于将目标系统上软件源文件包中的源文件编译成目标系统上可执行的二进制代码。布置于嵌入式目标系统11中的部分则用于在目标系统11上执行嵌入式软件包的整个构建过程,并在需要对源文件包中的源文件进行编译时请求编译服务器10对该源文件进行编译。编译服务器10和目标系统11之间可通过有线或无线网络(未示出)连接。本领域的一般技术人员容易理解,目标系统11也可以为一虚拟的目标系统。
图2示出了图1的实施例中编译服务器10的详细方框图。如图所示,编译服务器10中包括构建守护进程101、一个或多个交叉编译工具102、网络文件系统(NFS)103、目标文件系统映象104及文件系统适配器105。
构建守护进程101用于接收来自目标系统11上的交叉编译工具存根的编译工具调用请求,并利用该请求中所附的命令行参数调用编译服务器上相应的交叉编译工具102。此外,构建守护进程101还将编译服务器10上所调用的交叉编译工具102的标准输入和输出桥接到相应的交叉编译工具存根上。
一个或多个交叉编译工具102用于将指定的源文件编译成目标系统上可执行的二进制代码。所述交叉编译工具102包括编译工具链中用于将某一高级语言源文件逐步翻译成可执行文件的各种程序,例如交叉预处理器、交叉编译器、交叉链接器、交叉汇编器及任何常规交叉编译工具链中将提供的其他必需工具。在一个实施例中,交叉编译工具102是GNU编译工具链中所提供的那些编译工具,包括预处理器、C/C++编译器、汇编器、链接器,和二进制工具等。交叉编译工具102的输出文件采用的格式是目标系统11中的文件格式。例如,当编译服务器10是运行Windows的PC,而目标系统11运行Linux on PowerPC时,交叉编译工具102应该生成在PowerPC上有效的代码。
为了使交叉编译工具102能够对目标系统11上的源文件进行编译,应使交叉编译工具102能够访问到目标系统11中的文件。更具体地,交叉编译工具102应该能够根据构建守护进程101的指示读取目标系统11上待编译的输入文件,并将编译后的输出文件写回到目标系统11的文件系统中,而目标系统11应该能够立即读取到该编译后的输出文件。但是,由于文件输入输出的速度也是影响整体编译速度的一个很大因素,因此,在本实施例中将目标系统11的文件系统存储在编译服务器10上,以使交叉编译工具102能够以很小的开销读和写它们的工作文件。而目标系统11将通过网络从编译服务器10上安装其文件系统。
因此,本实施例中,在编译服务器10中还包括一网络文件系统(NFS)103。网络文件系统(NFS)是由Sun Microsystems公司最早实现的,用于在不同的操作系统、不同的网络结构及不同的传输协议之间共享文件。目标系统通过该网络文件系统(NFS)103可以访问驻留在编译服务器10上的目标系统11的文件系统映象104中的文件。编译服务器10中的每一交叉编译工具102从该目标文件系统映象104中读取指定源文件包中的待编译源文件以及相关文件(相关库、相关头文件等),并将编译结果写入该文件系统映象中,以使目标系统11能够立即访问到编译后的输出文件。
此外,编译服务器10中的文件系统适配器105用于在编译服务器10本地不支持目标系统11的文件系统类型时,提供编译服务器10与目标文件系统映象104的文件类型之间的转换,以使交叉编译工具102能够访问处于编译服务器10上的目标系统11的文件系统映象104中的文件。
驻留在编译服务器上的目标文件系统映象通过编译服务器上的网络文件系统(NFS)服务输出,而且目标系统可以通过该网络文件系统的客户端程序将其加载为根文件系统,这样,编译服务器10上的交叉编译工具102与目标系统11上的构建过程能够有效地工作于同一文件系统环境下。但是,编译服务器与目标系统通常是具有不同的文件系统名称空间的。例如,在编译服务器上可能需要以诸如“/opt/target_root”之类的路径名称来访问目标系统的根目录。在目标系统上的构建过程指定一个文件路径时,该路径只在目标系统上的文件系统名称空间中有效。因此,在编译服务器上的交叉编译工具试图根据目标系统上的构建过程所指定的路径访问编译服务器的目标文件系统映象中的一个文件或目录之前,必须根据编译服务器上的文件系统名称空间对该路径进行转换。因此,在本实施例中,构建守护进程101还包括路径转换模块1011,并且每一交叉编译工具102也包括相应的路径转换模块1021,用来完成目标系统上所指定路径到编译服务器中有效路径的转换。在软件构建过程中,可能会使用三种类型的文件路径,包括绝对路径、标准系统目录路径,和当前工作目录相对路径。下面分别描述对这几种路径的转换。
1)绝对路径
绝对路径在unix上是以“/”,而在windows上是以“\”开头的路径。
在本发明的一个实施例中,守护进程101中的路径转换模块1011扫描从目标系统11的构建过程接收到的命令行参数,而各交叉编译工具102中的路径转换模块1021则扫描目标系统的待编译源文件中的“#include”行,以找出所有这样的绝对路径,并将它们转换成编译服务器的文件名称空间中有效的相应路径。例如,如果目标系统11的构建过程以参数“-L/usr/local/xine/lib-I/usr/local/xine/nclude/home/xwk/src/xine/xine.c…”调用一个编译器,则路径转换模块1011应将该路径转换为编译服务器上的路径“-L/opt/target_root/usr/local/xine/lib-I/opt/target_root/usr/local/xine/include/opt/target_root/home/xwk/src/xine/xine.c…”。
在本发明的另一实施例中,对绝对路径的转换方法与前面实施例不同。本实施例中,不转换文件的绝对路径,而是由守护进程101将所调用的交叉编译工具102的根目录设为与目标文件系统的根目录相同的位置。这在unix上通常由“chroot”命令来实现。这样,在此情况下,前面例子中所调用的交叉编译工具102的根目录将被设为“/opt/target_root”。这样,编译服务器上所调用的交叉编译工具102将实际看到与目标系统11上相同的文件名称空间。但是,在此情况下,在改变所调用的交叉编译工具102的根目录时,在所调用的交叉编译工具102执行过程中可能调用的所有可执行文件和库都应同时被复制到新的根目录下的相应目录处,且PATH和LD PATH环境变量也应相应被更新,否则,所调用的交叉编译工具102在执行时将不能找到这些文件。
2)标准系统目录路径
“标准系统目录路径”是传统的C语言和C编译器概念。当软件开发者在源文件中指定一个“#include<header>”指令或指定一个“-include header”或“-library lib”编译器选项时,编译工具将会在预定的标准系统目录中搜索指定的头文件或库。例如,在交叉编译工具102为GNU编译工具的情况下,这些目录是“/include”、“/usr/include”、“/usr/lib”等。
为了应对该转换,交叉编译工具102的标准系统目录路径应被正确地设置为目标系统的标准系统目录。仍以前面前面的文件系统命名空间配置为例,交叉编译工具102的标准系统目录路径应被设置为“/opt/target_root/include”、“/opt/target_root/usr/include”及“/opt/target_root/usr/lib”等。交叉编译工具102的标准系统目录路径是在生成这些交叉编译工具时静态指定的。
3)当前工作目录相对路径
除了上面描述的两种路径之外,所有其他路径都属于“当前工作目录相对路径”的范围内。对于这些路径,守护进程101中的路径转换模块1011将所调用的交叉编译工具102的当前工作目录设为与目标系统上的构建过程调用相应交叉编译工具存根时所在的当前目录匹配的路径。
图3中示出了图1的实施例中布置于目标系统11中的部分的详细方框图。如图所示,本实施例中布置于目标系统11中的部分包括软件包构建过程脚本111、交叉编译工具存根创建模块112、一个或多个交叉编译工具的存根113、以及相关库114、相关头文件115、构建中的软件包116、中间可执行程序117等。
软件包构建过程脚本111用于调用相关库114、相关头文件115、中间可执行程序117等对目标系统11中软件的源文件包进行编译、链接及优化等整个构建过程,以最终构建成目标系统上可执行的软件包。在对源文件包中的源文件进行编译时,软件包构建过程脚本111调用目标系统11上相应的交叉编译工具存根113,进而调用编译服务器10上相应的交叉编译工具102对该源文件进行编译。
在目标系统上创建编译服务器上的交叉编译工具的存根是指将具有与所替代的本机编译工具相同的文件名的交叉编译工具存根拷贝到目标系统上,从而替换对应的本机编译工具。该交叉编译工具存根的创建过程既可以由系统管理员手工创建的,即在目标系统建立时,由系统管理员将具有与所替代的本机编译工具相同的文件名的交叉编译工具存根拷贝到目标系统上,从而替换对应的本机编译工具,也可以由一交叉编译工具存根创建模块112在目标系统建立时,通过与远程编译服务器10的交互,在目标系统11上自动创建远程编译服务器10上每一交叉编译工具102的存根。
对于编译服务器10上的每一交叉编译工具102来说,在目标系统上都存在与其对应的交叉编译工具存根113。这些存根并不进行实际的编译工作,而是将来自软件包构建过程脚本111的编译命令和命令行参数转发给编译服务器10上的构建守护进程101,由其调用编译服务器10上相应的交叉编译工具102来进行工作。此外,这些交叉编译工具存根113还将它们的标准输入和输出重定向到远程的构建守护进程101上,因为目标系统11上的构建过程脚本111有时将使用这些标准输入向编译服务器10上的交叉编译工具102馈送除了命令行参数之外的信息,或使用标准输出从这些交叉编译工具102获得执行状态报告等。
以上结合附图对根据本发明的优选实施例的用于嵌入式系统的软件包构建系统进行了详细的说明。
在同一发明构思下,根据本发明的另一方面,提供了一种用于嵌入式系统的软件包构建方法。下面就结合附图对该方法进行详细说明。
图4是根据本发明优选实施例的用于嵌入式系统的软件包构建方法的流程图。
如图所示,该方法包括以下步骤。
在步骤401,在目标系统上创建编译服务器上的交叉编译工具的存根。具体来说,该交叉编译工具存根的创建过程既可以由系统管理员手工创建,即在目标系统建立时,由系统管理员将具有与所替代的本机编译工具相同的文件名的交叉编译工具存根拷贝到目标系统上,从而替换对应的本机编译工具,也可以由一交叉编译工具存根创建模块在目标系统建立时,通过与远程编译服务器的交互,在目标系统上自动创建远程编译服务器上每一交叉编译工具的存根
在步骤402,配置编译服务器上的网络文件系统服务,使得可以在编译服务器和目标系统之间共享驻留在编译服务器上的目标文件系统的映象。
然后,在步骤403,嵌入式系统的软件开发者在目标系统上启动对源文件包的可执行软件包构建过程。
在步骤404,在构建过程中,目标系统上的相应的交叉编译工具存根截获构建过程所发出的编译工具调用请求。
在步骤405,目标系统上的交叉编译工具存根将该编译工具调用请求通过网络转发给编译服务器上的构建守护进程。该构建守护进程在对调用请求中的文件路径及将要调用的交叉编译工具的相关工作目录进行匹配转换之后,利用编译工具调用请求中的命令行参数本地调用与目标系统上发来调用请求的交叉编译工具存根相对应的交叉编译工具。
在步骤406,编译服务器上调用的交叉编译工具以目标文件系统映象为基础,并结合相关头文件和相关库对目标文件系统映象中的指定源文件进行编译,以生成目标系统上可执行的二进制代码,并将编译后的输出文件写入映象中,然后通过构建守护进程将编译状态报告给目标系统上的构建过程。
然后,在步骤407,目标系统上的构建过程在源文件编译结束后,继续进行其他的构建工作。
需要说明的是,在目标系统上的软件包构建过程中,可能会需要执行某些已经编译过的中间可执行程序,此时,构建过程可根据指定路径直接执行这些中间程序,而不会象传统交叉编译方案中那样产生在软件构建平台上不能执行已经生成的中间程序的问题。
此外,需要说明的是,图4所示实施例中的步骤顺序只是示例性的,在具体实现中可以按不同步骤顺序来实现本发明。例如,当需要在同一目标系统上多次执行软件包构建过程时,只需在系统建立时执行一次步骤401和402,而不需要重复执行步骤401和402。即,只在目标系统建立时在目标系统上创建交叉编译工具的存根和在编译服务器上配置网络文件系统服务。
利用上面结合附图描述的用于嵌入式系统的软件包构建方法和系统,软件开发人员只需将软件的源文件包复制到目标文件系统中,并象本机编译方案中那样在目标系统上键入构建命令,便可实现软件包的整个构建过程。
以上,结合实施例对本发明的用于嵌入式系统的软件包构建方法和系统进行了描述。对于本领域一般技术人员来说很明显,本发明适合一切需要采用交叉编译的系统。还应当指出的是,这些实施例只是示例性的,本领域的技术人员可以在此基础上做出各种改变。
Claims (15)
1.一种软件包构建方法,包括:
在要构建软件包的目标系统中创建远程编译服务器中交叉编译工具的存根;
将所述目标系统中文件系统的映象储存在所述编译服务器中;以及
在目标系统上启动软件包构建过程;
其中,在所述构建过程中,所述交叉编译工具的存根截获来自所述软件包构建过程的编译命令,并将该编译命令转发给所述远程编译服务器,由所述远程编译服务器中的相应的交叉编译工具从所述目标系统的文件系统的映象中读取指定的待编译源文件,以对该源文件进行编译。
2.根据权利要求1的方法,其中在所述构建过程中进一步包括:
所述交叉编译工具存根将目标系统上构建过程中的编译命令和命令行参数转发给所述编译服务器上的构建守护进程;
所述构建守护进程利用接收到的命令行参数调用所述编译服务器中相应的交叉编译工具;以及
所述被调用的相应的交叉编译工具根据所述命令行参数从编译服务器中目标系统的文件系统映象中读出待编译的源文件,并且对该源文件进行编译,以生成目标系统上可执行的二进制代码。
3.根据权利要求2的方法,还包括:
所述被调用的相应的交叉编译工具将对所述源文件的编译结果写入编译服务器中目标系统的文件系统映象中;以及
所述目标系统上的构建过程从所述编译服务器中目标系统的文件系统映象中读出软件编译结果,并继续进行后续的软件包构建过程。
4.根据权利要求2或3的方法,还包括:
将所述命令行参数及待编译的源文件的“#include”行中出现的绝对路径转换为所述编译服务器的文件名称空间中有效的相应路径。
5.根据权利要求2或3的方法,还包括:
将编译服务器上所调用的交叉编译工具的根目录设置为与目标系统的文件系统根目录相同的路径,并将与该调用的交叉编译工具相关的可执行文件和库复制到该根目录下。
6.根据权利要求2或3的方法,还包括:
将编译服务器上所调用的交叉编译工具的当前工作目录设置为与目标系统上的构建过程调用相应的交叉编译工具存根时所在的当前目录匹配的路径。
7.根据权利要求2的方法,还包括:
将所述目标系统上交叉编译工具存根的标准输入和输出重定向到所述编译服务器的构建守护进程上,以相互传送构建过程中的信息。
8.根据权利要求1的方法,其中所述创建交叉编译工具的存根的步骤进一步包括在目标系统中创建远程编译服务器中每一交叉编译工具的存根。
9.根据权利要求8的方法,其中所述编译服务器中的交叉编译工具包括交叉预处理程序、交叉编译器、交叉汇编器和交叉链接程序。
10.一种软件包构建系统,包括:
编译服务器,该编译服务器包括:构建守护进程:用于接收来自目标系统的编译工具调用请求,并根据该请求调用相应的交叉编译工具;至少一个交叉编译工具,用于将指定的源文件编译成目标系统上可执行的二进制代码;以及目标系统的文件系统映象,所述交叉编译工具从该目标系统的文件系统映象中读取指定的待编译源文件以及相关文件,并将编译结果写入该文件系统映象中;以及
布置于目标系统中的至少一个交叉编译工具存根,用于截获来自软件包构建过程的编译命令,并将其转发给编译服务器,由编译服务器上对应的交叉编译工具对目标系统上相应的源文件进行编译。
11.根据权利要求10的系统,其中所述编译服务器还包括:
网络文件系统,用于在所述编译服务器和所述目标系统之间共享所述目标系统的文件系统映像。
12.根据权利要求10的系统,其中所述构建守护进程包括:
路径转换模块,用于将从目标系统接收到的调用请求的命令行参数中出现的绝对路径转换为该编译服务器的文件名称空间中有效的相应路径;将编译服务器上所调用的交叉编译工具的当前工作目录设置为与目标系统上的构建过程调用相应的交叉编译工具存根时所在的当前目录匹配的路径。
13.根据权利要求10的系统,其中所述构建守护进程包括:
路径转换模块,用于将编译服务器上所调用的交叉编译工具的根目录设置为与目标系统的文件系统根目录相同的路径,并将与所调用的交叉编译工具相关的可执行文件和库复制到该根目录下;将编译服务器上所调用的交叉编译工具的当前工作目录设置为与目标系统上的构建过程调用相应的交叉编译工具存根时所在的当前目录匹配的路径。
14.根据权利要求12或13的系统,其中所述每一交叉编译工具包括:
路径转换模块,用于将待编译的源文件的“#include”行中出现的路径转换为所述编译服务器的文件名称空间中有效的相应路径。
15.根据权利要求10的系统,其中所述目标系统中还包括:
交叉编译工具存根创建模块:用于与远程编译服务器交互,以在目标系统上创建远程编译服务器上每一交叉编译工具的存根。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100774342A CN100442234C (zh) | 2005-06-21 | 2005-06-21 | 用于嵌入式系统的软件包构建方法和系统 |
US11/472,014 US8028268B2 (en) | 2005-06-21 | 2006-06-21 | System and method for building software package for embedded system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100774342A CN100442234C (zh) | 2005-06-21 | 2005-06-21 | 用于嵌入式系统的软件包构建方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1885264A CN1885264A (zh) | 2006-12-27 |
CN100442234C true CN100442234C (zh) | 2008-12-10 |
Family
ID=37583425
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100774342A Active CN100442234C (zh) | 2005-06-21 | 2005-06-21 | 用于嵌入式系统的软件包构建方法和系统 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8028268B2 (zh) |
CN (1) | CN100442234C (zh) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100860963B1 (ko) * | 2007-03-08 | 2008-09-30 | 삼성전자주식회사 | 컴포넌트 기반의 소프트웨어 개발을 위한 장치 및 방법 |
US8775577B1 (en) * | 2007-12-18 | 2014-07-08 | Amazon Technologies, Inc. | System and method for configuration management service |
US20100332996A1 (en) * | 2009-06-25 | 2010-12-30 | Nokia Corporation | Method and apparatus of acquiring information regarding applications for display on a user interface |
CA2698066A1 (en) * | 2009-07-31 | 2011-01-31 | Nitobi Software Inc. | System and method for remotely compiling multi-platform native applications for mobile devices |
CN102148654A (zh) * | 2010-02-10 | 2011-08-10 | 北京易路联动技术有限公司 | 一种基于网络侧编译的系统及方法 |
US9992055B2 (en) * | 2010-12-31 | 2018-06-05 | Openpeak Llc | Disseminating commands from a DMS server to fielded devices using an extendable command architecture |
US9235458B2 (en) | 2011-01-06 | 2016-01-12 | International Business Machines Corporation | Methods and systems for delegating work objects across a mixed computer environment |
US9052968B2 (en) * | 2011-01-17 | 2015-06-09 | International Business Machines Corporation | Methods and systems for linking objects across a mixed computer environment |
CN102207866B (zh) * | 2011-05-25 | 2014-07-09 | 上海盛轩网络科技有限公司 | 基于WebOS的应用程序开发、发布、安装、运行系统及方法 |
US10044522B1 (en) | 2012-08-21 | 2018-08-07 | Amazon Technologies Inc. | Tree-oriented configuration management service |
CN103777929A (zh) * | 2012-10-18 | 2014-05-07 | 中国移动通信集团公司 | 用于程序开发的模拟开发系统的实现方法及模拟开发系统 |
CN103077063B (zh) * | 2012-12-18 | 2019-02-19 | 中兴通讯股份有限公司 | 微码编译方法及装置 |
US9910684B2 (en) * | 2013-03-25 | 2018-03-06 | Hewlett Packard Enterprise Development Lp | Extensible firmware abstraction |
KR102156371B1 (ko) * | 2013-11-27 | 2020-09-15 | 한국전자통신연구원 | 네이티브 빌드 기반의 임베디드 소프트웨어 개발 환경을 지원하기 위한 임베디드 소프트웨어 개발 도구 제공 방법 및 장치 |
CN103744684B (zh) * | 2014-01-24 | 2017-01-11 | 中国科学院自动化研究所 | 一种异构软硬件协同开发的方法及系统 |
CN103984541B (zh) * | 2014-04-14 | 2018-04-27 | 美的集团股份有限公司 | 基于终端源代码生成应用程序的方法和系统 |
CN107729083B (zh) * | 2014-04-30 | 2021-02-12 | 华为技术有限公司 | 一种加载驱动程序的方法及嵌入式设备 |
CN105260169A (zh) * | 2014-07-16 | 2016-01-20 | 中兴通讯股份有限公司 | 一种跨平台移植python程序的方法及装置 |
CN105700861A (zh) * | 2014-11-27 | 2016-06-22 | 迈普通信技术股份有限公司 | 一种嵌入式程序运行符号表的生成方法及装置 |
CN104461880B (zh) * | 2014-12-04 | 2018-01-09 | 福建星网视易信息系统有限公司 | 一种嵌入式系统中自动检测内存越界的方法及系统 |
CN104572238A (zh) * | 2015-01-23 | 2015-04-29 | 烽火通信科技股份有限公司 | 一种高效的生成可执行软件包的方法及系统 |
CN107526587A (zh) * | 2017-08-02 | 2017-12-29 | 中国航空无线电电子研究所 | 一种综合模块化航空电子系统的构建方法 |
CN109739506B (zh) * | 2018-12-27 | 2022-02-18 | 郑州云海信息技术有限公司 | 一种高性能应用编译中库函数缺失的处理方法及系统 |
CN112486505B (zh) * | 2019-09-12 | 2022-11-25 | 无锡江南计算技术研究所 | 容器化跨平台操作系统映像构建方法 |
CN110659030B (zh) * | 2019-09-23 | 2023-07-14 | 深圳市众学科技有限公司 | Unity项目编译方法、系统、计算机设备及存储介质 |
CN111367811B (zh) * | 2020-03-12 | 2023-08-08 | 超越科技股份有限公司 | 一种提高bmc的管理网页调试效率的方法及系统 |
CN112612754A (zh) * | 2020-12-31 | 2021-04-06 | 深圳市大富网络技术有限公司 | 一种文件搜索方法、系统、装置及计算机存储介质 |
CN112988161B (zh) * | 2021-03-19 | 2024-05-28 | 广联达科技股份有限公司 | 编译产物的绝对路径的构建方法、装置和可读存储介质 |
CN114168153B (zh) * | 2022-02-10 | 2022-05-20 | 统信软件技术有限公司 | 一种编译方法、计算设备及存储介质 |
CN116069668B (zh) * | 2023-03-07 | 2023-06-09 | 中科方德软件有限公司 | 分布式编译构建任务的调试方法、装置、设备及存储介质 |
CN116931954B (zh) * | 2023-09-18 | 2023-12-19 | 浙江简捷物联科技有限公司 | 一种嵌入式软件包编译构建方法、装置、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4791558A (en) * | 1987-02-13 | 1988-12-13 | International Business Machines Corporation | System and method for generating an object module in a first format and then converting the first format into a format which is loadable into a selected computer |
JP2001511283A (ja) * | 1997-12-12 | 2001-08-07 | サン・マイクロシステムズ・インコーポレーテッド | ソースコードをクロス−コンパイルする装置及び方法 |
CN1341238A (zh) * | 1999-11-17 | 2002-03-20 | 布尔Cp8公司 | 在配备数据处理资源的多用途平台式系统中加载应用的方法,对应的执行系统和方法 |
US20050055665A1 (en) * | 2003-09-04 | 2005-03-10 | Woo Duk Kyun | System and method for developing target application on target system in cross development environment |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5430876A (en) * | 1989-06-27 | 1995-07-04 | Digital Equipment Corporation | Remote procedure callback system and method |
US5953514A (en) * | 1995-10-23 | 1999-09-14 | Apple Computer, Inc. | Method and apparatus for transparent remote execution of commands |
US5881289A (en) * | 1996-11-26 | 1999-03-09 | Hewlett-Packard Company | Remote compiling of source code for cross development |
US6279151B1 (en) * | 1998-01-20 | 2001-08-21 | International Business Machines Corporation | Method and apparatus for remote source code inclusion |
-
2005
- 2005-06-21 CN CNB2005100774342A patent/CN100442234C/zh active Active
-
2006
- 2006-06-21 US US11/472,014 patent/US8028268B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4791558A (en) * | 1987-02-13 | 1988-12-13 | International Business Machines Corporation | System and method for generating an object module in a first format and then converting the first format into a format which is loadable into a selected computer |
JP2001511283A (ja) * | 1997-12-12 | 2001-08-07 | サン・マイクロシステムズ・インコーポレーテッド | ソースコードをクロス−コンパイルする装置及び方法 |
CN1341238A (zh) * | 1999-11-17 | 2002-03-20 | 布尔Cp8公司 | 在配备数据处理资源的多用途平台式系统中加载应用的方法,对应的执行系统和方法 |
US20050055665A1 (en) * | 2003-09-04 | 2005-03-10 | Woo Duk Kyun | System and method for developing target application on target system in cross development environment |
Non-Patent Citations (2)
Title |
---|
基于GCC的交叉编译器研究与开发. 冯钢,郑扣根.计算机工程与设计,第25卷第11期. 2004 |
基于GCC的交叉编译器研究与开发. 冯钢,郑扣根.计算机工程与设计,第25卷第11期. 2004 * |
Also Published As
Publication number | Publication date |
---|---|
US20070011494A1 (en) | 2007-01-11 |
CN1885264A (zh) | 2006-12-27 |
US8028268B2 (en) | 2011-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100442234C (zh) | 用于嵌入式系统的软件包构建方法和系统 | |
US5339435A (en) | Heterogenous software configuration management apparatus | |
US6886024B1 (en) | Distributed application control system, control method and a program | |
O'Kane | A gentle introduction to ROS | |
JP3875999B2 (ja) | 総称データ交換環境において動的データ参照を提供するシステムと方法 | |
CN102279765B (zh) | 预编译托存托管代码 | |
US7152229B2 (en) | Workflow code generator | |
US20030093420A1 (en) | Method and system for retrieving sharable information using a hierarchically dependent directory structure | |
KR100546742B1 (ko) | 타겟 시스템 기반 소스 프로그램 개발장치 및 방법 | |
CN101027639A (zh) | 用于在软件应用程序储存库内提取和创建应用程序元信息的系统和方法 | |
JP2002132739A (ja) | スタブ検索ローディングシステム及び方法、サーバ装置、クライアント装置並びにコンピュータ可読記録媒体 | |
AU2004200048A1 (en) | Method and system for recording macros in a language independent syntax | |
CN101477485B (zh) | 一种基于ASP.net远程备份和还原MySQL数据库方法 | |
CN114153463B (zh) | 基于脚本编译器的管理系统业务功能创建方法及系统 | |
Dincer et al. | Building a world-wide virtual machine based on Web and HPCC technologies | |
JP2006309697A (ja) | コンピュータシステム、コンピュータシステム用プログラム、及びこれらのプログラムのうち表計算プログラムに基づくアプリケーションプログラムを生成するプログラム | |
US20020194399A1 (en) | Method and device for retrieving library in execution, and dynamic linker, and program | |
US20050097531A1 (en) | Method of compiling a source code program into a machine-readable target object program in a network environment | |
CN116991380B (zh) | 一种应用程序的构建方法、装置、电子设备及存储介质 | |
JP2004192038A (ja) | 情報処理装置、情報処理システム、情報処理プログラム、および該プログラムを記録した記録媒体 | |
CN113094033B (zh) | 一种mcu集成开发环境的工程结构适配方法 | |
EP1437647B1 (en) | Method and system for recording macros in a language independent syntax | |
WO2007144891A1 (en) | A method for the distribution of software processes to a plurality of computers | |
JP2002132502A (ja) | 言語機能解釈による分散オブジェクト自動生成システム及び方法 | |
Getov et al. | Aspects of portability and distributed execution for JNI‐wrapped message passing libraries |
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 |