CN112650501A - 编译、终端设备及其客户应用程序的编译链接和加载方法 - Google Patents
编译、终端设备及其客户应用程序的编译链接和加载方法 Download PDFInfo
- Publication number
- CN112650501A CN112650501A CN202011625642.2A CN202011625642A CN112650501A CN 112650501 A CN112650501 A CN 112650501A CN 202011625642 A CN202011625642 A CN 202011625642A CN 112650501 A CN112650501 A CN 112650501A
- Authority
- CN
- China
- Prior art keywords
- file
- application program
- execution file
- application execution
- loading
- 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/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- 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/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种编译、终端设备及其客户应用程序的编译链接和加载方法,该方法包括:对客户应用程序的各源文件进行编译以获取可重定位文件;根据链接脚本文件,对可重定位文件进行重定位操作以生成一应用执行文件;输出应用执行文件以使终端设备根据链接加载地址加载应用执行文件;获取应用执行文件;将应用执行文件烧录至应用程序存储分区中;根据链接加载地址,将应用程序存储分区中的应用执行文件加载至应用程序内存分区中;调用应用执行文件的入口函数,将系统函数映射表的起始地址传递给应用执行文件,以使应用执行文件根据系统函数映射表访问对应的系统函数。本发明通过链接脚本文件将必需内容导入应用执行文件,从而提升编译加载效率。
Description
技术领域
本发明涉及嵌入式操作系统技术领域,尤其涉及一种编译、终端设备及其客户应用程序的编译链接和加载方法。
背景技术
传统的嵌入式RTOS(Real Time Operating System,实时操作系统)分散加载方案,主要步骤如下:
1.为系统映像在存储器中划分合适大小的系统存储分区,在内存器中划分合适大小的系统内存分区。
2.编译RTOS系统代码,在链接系统映像时使用链接脚本文件将加载地址指定为系统内存分区的首地址,然后生成系统映像。
3.将系统映像烧录至系统存储分区。
4.启动后,由BootLoader(启动装载)从系统存储分区中读取系统映像,加载到链接时指定的系统内存分区,然后BootLoader转移控制权到系统映像的入口函数,开始RTOS系统初始化,初始化结束即表示RTOS系统运行成功。
客户应用程序只能和RTOS系统代码一起编译成一个整体的系统映像,系统映像的文件约有6MB(兆字节)大小,文件太大,完整编译时间大约需要20-30分钟。客户应用程序进行修改后,都需要和RTOS系统代码一起重新编译,缺乏灵活性,花费时间长,降低了开发效率。
发明内容
本发明要解决的技术问题是为了克服现有技术中客户应用程序进行修改后,都需要和RTOS系统代码一起重新编译,整体的系统映像的文件太大,降低了开发效率的缺陷,提供一种编译、终端设备及其客户应用程序的编译链接和加载方法。
本发明是通过下述技术方案来解决上述技术问题:
本发明提供一种终端设备上客户应用程序的编译链接和加载方法,
在所述终端设备的存储器中划分有应用程序存储分区,在所述终端设备的内存器中划分有应用程序内存分区;
在所述内存器中设置占用连续空间的系统函数映射表,所述系统函数映射表用于存储系统函数地址;
在链接脚本文件中写有链接加载地址以及所述系统函数映射表中的各系统函数名称符号的链接信息,所述链接加载地址为所述客户应用程序内存分区的起始地址,所述链接信息用于声明该系统函数名称符号已在外部定义并提供所述系统函数名称符号在所述系统函数映射表中的对应地址;
所述编译链接方法包括:
对所述客户应用程序包含的各源文件进行编译以获取各可重定位文件;
根据链接脚本文件,对所述各可重定位文件进行重定位操作,以生成一应用执行文件;
输出所述应用执行文件以使得终端设备根据所述链接加载地址加载所述应用执行文件;
所述加载方法包括:
获取所述应用执行文件;
将所述应用执行文件烧录至所述应用程序存储分区中;
根据所述链接加载地址,将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中;
调用所述应用执行文件的入口函数,将所述系统函数映射表的起始地址作为所述入口函数的参数传递给所述应用执行文件,以使所述应用执行文件根据所述系统函数映射表中的系统函数地址访问对应的系统函数。
较佳地,所述将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中的步骤具体包括:
对所述应用程序存储分区中的所述应用执行文件进行校验以获取校验结果,根据所述校验结果将校验通过的所述应用执行文件加载至所述应用程序内存分区中。
较佳地,所述应用执行文件包括CRC(Cyclic Redundancy Check,循环冗余校验)校验值;
所述对所述应用程序存储分区中的所述应用执行文件进行校验的步骤具体包括:根据所述CRC校验值对所述应用程序存储分区中的所述应用执行文件进行CRC校验以获取CRC校验结果。
较佳地,所述将校验通过的所述应用执行文件加载至所述应用程序内存分区中的步骤之后还包括:
判断所述应用程序存储分区中的所述应用执行文件中的所述CRC验证值与所述应用程序内存分区中的所述应用执行文件中的所述CRC验证值是否一致,若否,则重新将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中。
较佳地,在所述应用执行文件的头部添加文件头,所述文件头中记录有原始的应用执行文件的长度以及所述CRC校验值。
较佳地,所述将校验通过的所述应用执行文件加载至所述应用程序内存分区中的步骤之后还包括:
判断所述应用程序存储分区中的所述应用执行文件与所述应用程序内存分区中的所述应用执行文件是否一致,若否,则重新将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中。
较佳地,所述系统函数映射表设置为共享以向所述客户应用程序提供所述系统函数映射表的访问权限。
本发明还提供一种客户应用程序的编译链接方法,应用于编译设备;
所述编译链接方法包括:
对所述客户应用程序包含的各源文件进行编译以获取各可重定位文件;
根据链接脚本文件,对所述各可重定位文件进行重定位操作,以生成一应用执行文件,其中,在所述链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息,所述链接加载地址为所述客户应用程序内存分区的起始地址,所述链接信息用于声明该系统函数名称符号已在外部定义并提供所述系统函数名称符号在所述系统函数映射表中的对应地址;
输出所述应用执行文件以使得终端设备根据所述链接加载地址加载所述应用执行文件。
本发明还提供一种客户应用程序的加载方法,应用于终端设备,在所述终端设备的存储器中划分有应用程序存储分区,在所述终端设备的内存器中划分有应用程序内存分区;
所述加载方法包括:
获取一应用执行文件,所述应用执行文件为根据链接脚本文件,对各可重定位文件进行重定位操作以生成的文件,其中,在所述链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息;
将所述应用执行文件烧录至所述应用程序存储分区中;
根据所述链接加载地址,将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中;
调用所述应用执行文件的入口函数,将所述系统函数映射表的起始地址作为所述入口函数的参数传递给所述应用执行文件,以使所述应用执行文件根据所述系统函数映射表中的系统函数地址访问对应的系统函数。
本发明还提供一种编译设备,所述编译设备包括:编译模块、文件生成模块和文件输出模块;
所述编译模块用于对客户应用程序包含的各源文件进行编译以获取各可重定位文件;
所述文件生成模块用于根据链接脚本文件,对所述各可重定位文件进行重定位操作,以生成一应用执行文件,其中,在所述链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息,所述链接加载地址为所述客户应用程序内存分区的起始地址,所述链接信息用于声明该系统函数名称符号已在外部定义并提供所述系统函数名称符号在所述系统函数映射表中的对应地址;
所述文件输出模块用于输出所述应用执行文件以使得终端设备根据所述链接加载地址加载所述应用执行文件。
本发明还提供一种终端设备,在所述终端设备的存储器中划分有应用程序存储分区,在所述终端设备的内存器中划分有应用程序内存分区;
所述终端设备还包括:获取模块、烧录模块、加载模块和函数调用模块;
所述获取模块用于获取一应用执行文件,所述应用执行文件为根据链接脚本文件,对各可重定位文件进行重定位操作以生成的文件,其中,在所述链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息;
所述烧录模块用于将所述应用执行文件烧录至所述应用程序存储分区中;
所述加载模块用于根据所述链接加载地址,将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中;
所述函数调用模块用于调用所述应用执行文件的入口函数,将所述系统函数映射表的起始地址作为所述入口函数的参数传递给所述应用执行文件,以使所述应用执行文件根据所述系统函数映射表中的系统函数地址访问对应的系统函数。
本发明的积极进步效果在于:通过链接脚本文件将加载以及与RTOS系统交互所必需的内容导入生成的客户应用程序对应的应用执行文件,使得应用执行文件能够和RTOS系统交互,在RTOS系统上加载成功,从而提升了客户应用程序的编译和加载效率,进而提升了客户应用程序的开发效率。
附图说明
图1为本发明的实施例1的终端设备上客户应用程序的编译链接和加载方法的流程图。
图2为本发明的实施例2的客户应用程序的编译链接方法的流程图。
图3为本发明的实施例3的客户应用程序的加载方法的流程图。
图4为本发明的实施例4的编译设备的模块示意图。
图5为本发明的实施例5的终端设备的模块示意图。
具体实施方式
下面通过实施例的方式进一步说明本发明,但并不因此将本发明限制在所述的实施例范围之中。
实施例1
本实施例提供一种终端设备上客户应用程序的编译链接和加载方法。
在终端设备的存储器中划分有应用程序存储分区,在终端设备的内存器中划分有应用程序内存分区。
在内存器中设置占用连续空间的系统函数映射表,系统函数映射表用于存储系统函数地址。
在链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息,链接加载地址为客户应用程序内存分区的起始地址,链接信息用于声明该系统函数名称符号已在外部定义并提供系统函数名称符号在系统函数映射表中的对应地址。
参照图1,编译链接方法包括以下步骤:
S101、对客户应用程序包含的各源文件(例如C文件,C为文件扩展名)进行编译以获取各可重定位文件(例如O文件,O为文件扩展名)。
S102、根据链接脚本文件(例如scatter文件,scatter为文件扩展名),对各可重定位文件进行重定位操作,以生成一应用执行文件(例如bin文件,bin为文件扩展名)。其中,bin文件为customer_app.bin,customer_app为文件名,可以根据需要自定义文件名,bin文件的应用程序二进制接口与系统映像的应用程序二进制接口相同。
S103、输出应用执行文件以使得终端设备根据链接加载地址加载应用执行文件。
加载方法包括以下步骤:
S104、获取应用执行文件。
S105、将应用执行文件烧录至应用程序存储分区中。
S106、根据链接加载地址,将应用程序存储分区中的应用执行文件加载至应用程序内存分区中。
S107、调用应用执行文件的入口函数,将系统函数映射表的起始地址作为入口函数的参数传递给应用执行文件,以使应用执行文件根据系统函数映射表中的系统函数地址访问对应的系统函数。
具体实施时,步骤S106具体包括以下步骤:
S1061、根据链接加载地址,对应用程序存储分区中的应用执行文件进行校验以获取校验结果,根据校验结果将校验通过的应用执行文件加载至应用程序内存分区中。
具体实施时,应用执行文件包括CRC校验值。
步骤S1061具体包括以下步骤:
S10611、根据链接加载地址,根据CRC校验值对应用程序存储分区中的应用执行文件进行CRC校验以获取CRC校验结果,根据CRC校验结果将校验通过的应用执行文件加载至应用程序内存分区中。
具体实施时,步骤S10611之后还包括:
S10612、判断应用程序存储分区中的应用执行文件中的CRC验证值与应用程序内存分区中的应用执行文件中的CRC验证值是否一致,若否,则重新将应用程序存储分区中的应用执行文件加载至应用程序内存分区中。
具体实施时,在应用执行文件的头部添加文件头,文件头中记录有原始的应用执行文件的长度以及CRC校验值。
具体实施时,步骤S1061之后还包括:
S1062、判断应用程序存储分区中的应用执行文件与应用程序内存分区中的应用执行文件是否一致,若否,则重新将应用程序存储分区中的应用执行文件加载至应用程序内存分区中。
具体实施时,系统函数映射表设置为共享以向客户应用程序提供系统函数映射表的访问权限。
客户应用程序进行独立编译生成对应的应用执行文件需要10秒,应用执行文件只有256KB(千字节)大小,即如果修改了客户应用程序,将其重新进行编译也只需要10秒,大为减少了客户应用程序的编译时间,增加了开发客户应用程序的效率。另外,在考虑客户应用程序对应的应用执行文件与RTOS系统交互时,将RTOS系统抽象为系统函数,掩盖了RTOS系统的实现细节,使得在开发客户应用程序时,更有利于形成整体性思维。
本实施例的终端设备上客户应用程序的编译链接和加载方法通过链接脚本文件将加载以及与RTOS系统交互所必需的内容导入生成的客户应用程序对应的应用执行文件,使得应用执行文件能够和RTOS系统交互,在RTOS系统上加载成功,从而提升了客户应用程序的编译和加载效率,进而提升了客户应用程序的开发效率。
实施例2
在实施例1的基础上,本实施例提供一种客户应用程序的编译链接方法,应用于编译设备。
参照图2,客户应用程序的编译链接方法包括以下步骤:
S201、对客户应用程序包含的各源文件(例如C文件,C为文件扩展名)进行编译以获取各可重定位文件(例如O文件,O为文件扩展名)。
S202、根据链接脚本文件(例如scatter文件,scatter为文件扩展名),对各可重定位文件进行重定位操作,以生成一应用执行文件(例如bin文件,bin为文件扩展名),其中,在链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息,链接加载地址为客户应用程序内存分区的起始地址,链接信息用于声明该系统函数名称符号已在外部定义并提供系统函数名称符号在系统函数映射表中的对应地址。具体地,bin文件为customer_app.bin,customer_app为文件名,可以根据需要自定义文件名,bin文件的应用程序二进制接口与系统映像的应用程序二进制接口相同。
S203、输出应用执行文件以使得终端设备根据链接加载地址加载应用执行文件。
客户应用程序进行独立编译生成对应的应用执行文件需要10秒,应用执行文件只有256KB大小,即如果修改了客户应用程序,将其重新进行编译也只需要10秒,大为减少了客户应用程序的编译时间,增加了开发客户应用程序的效率。另外,在考虑客户应用程序对应的应用执行文件与RTOS系统交互时,将RTOS系统抽象为系统函数,掩盖了RTOS系统的实现细节,使得在开发客户应用程序时,更有利于形成整体性思维。
本实施例的客户应用程序的编译链接方法通过链接脚本文件将加载以及与RTOS系统交互所必需的内容导入生成的客户应用程序对应的应用执行文件,使得应用执行文件能够和RTOS系统交互,在RTOS系统上加载成功,从而提升了客户应用程序的编译效率,进而提升了客户应用程序的开发效率。
实施例3
在实施例1的基础上,本实施例提供一种客户应用程序的加载方法,应用于终端设备,在终端设备的存储器中划分有应用程序存储分区,在终端设备的内存器中划分有应用程序内存分区。
参照图3,客户应用程序的加载方法包括以下步骤:
S301、获取一应用执行文件,应用执行文件为根据链接脚本文件,对各可重定位文件进行重定位操作以生成的文件,其中,在链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息。
S302、将应用执行文件烧录至应用程序存储分区中。
S303、根据链接加载地址,将应用程序存储分区中的应用执行文件加载至应用程序内存分区中。
S304、调用应用执行文件的入口函数,将系统函数映射表的起始地址作为入口函数的参数传递给应用执行文件,以使应用执行文件根据系统函数映射表中的系统函数地址访问对应的系统函数。
本实施例的客户应用程序的加载方法通过具有的加载以及与RTOS系统交互所必需的内容,使得应用执行文件能够和RTOS系统交互,在RTOS系统上加载成功,从而提升了客户应用程序的加载效率,进而提升了客户应用程序的开发效率。
实施例4
本实施例提供一种编译设备,该编译设备用于实现实施例2的客户应用程序的编译链接方法。参照图4,编译设备包括:编译模块101、文件生成模块102和文件输出模块103。
编译模块101用于对客户应用程序包含的各源文件进行编译以获取各可重定位文件。
文件生成模块102用于根据链接脚本文件,对各可重定位文件进行重定位操作,以生成一应用执行文件,其中,在链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息,链接加载地址为客户应用程序内存分区的起始地址,链接信息用于声明该系统函数名称符号已在外部定义并提供系统函数名称符号在系统函数映射表中的对应地址。
文件输出模块103用于输出应用执行文件以使得终端设备根据链接加载地址加载应用执行文件。
本实施例的编译设备能够实现通过链接脚本文件将加载以及与RTOS系统交互所必需的内容导入生成的客户应用程序对应的应用执行文件,使得应用执行文件能够和RTOS系统交互,在RTOS系统上加载成功,从而提升了客户应用程序的编译效率,进而提升了客户应用程序的开发效率。
实施例5
本实施例提供一种终端设备,该终端设备用于实现实施例3的客户应用程序的加载方法。参照图5,在终端设备的存储器201中划分有应用程序存储分区,在终端设备的内存器202中划分有应用程序内存分区。
终端设备还包括:获取模块203、烧录模块204、加载模块205和函数调用模块206。
获取模块203用于获取一应用执行文件,应用执行文件为根据链接脚本文件,对各可重定位文件进行重定位操作以生成的文件,其中,在链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息。
烧录模块204用于将应用执行文件烧录至应用程序存储分区中。
加载模块205用于根据链接加载地址,将应用程序存储分区中的应用执行文件加载至应用程序内存分区中。
函数调用模块206用于调用应用执行文件的入口函数,将系统函数映射表的起始地址作为入口函数的参数传递给应用执行文件,以使应用执行文件根据系统函数映射表中的系统函数地址访问对应的系统函数。
本实施例的终端设备能够实现在RTOS系统上加载客户应用程序对应的应用执行文件,并且能够实现应用执行文件和RTOS系统交互,从而提升了客户应用程序的加载效率,进而提升了客户应用程序的开发效率。
虽然以上描述了本发明的具体实施方式,但是本领域的技术人员应当理解,这仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。
Claims (11)
1.一种终端设备上客户应用程序的编译链接和加载方法,其特征在于,
在所述终端设备的存储器中划分有应用程序存储分区,在所述终端设备的内存器中划分有应用程序内存分区;
在所述内存器中设置占用连续空间的系统函数映射表,所述系统函数映射表用于存储系统函数地址;
在链接脚本文件中写有链接加载地址以及所述系统函数映射表中的各系统函数名称符号的链接信息,所述链接加载地址为所述客户应用程序内存分区的起始地址,所述链接信息用于声明该系统函数名称符号已在外部定义并提供所述系统函数名称符号在所述系统函数映射表中的对应地址;
所述编译链接方法包括:
对所述客户应用程序包含的各源文件进行编译以获取各可重定位文件;
根据链接脚本文件,对所述各可重定位文件进行重定位操作,以生成一应用执行文件;
输出所述应用执行文件以使得终端设备根据所述链接加载地址加载所述应用执行文件;
所述加载方法包括:
获取所述应用执行文件;
将所述应用执行文件烧录至所述应用程序存储分区中;
根据所述链接加载地址,将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中;
调用所述应用执行文件的入口函数,将所述系统函数映射表的起始地址作为所述入口函数的参数传递给所述应用执行文件,以使所述应用执行文件根据所述系统函数映射表中的系统函数地址访问对应的系统函数。
2.如权利要求1所述的终端设备上客户应用程序的编译链接和加载方法,其特征在于,所述将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中的步骤具体包括:
对所述应用程序存储分区中的所述应用执行文件进行校验以获取校验结果,根据所述校验结果将校验通过的所述应用执行文件加载至所述应用程序内存分区中。
3.如权利要求2所述的终端设备上客户应用程序的编译链接和加载方法,其特征在于,所述应用执行文件包括CRC校验值;
所述对所述应用程序存储分区中的所述应用执行文件进行校验的步骤具体包括:根据所述CRC校验值对所述应用程序存储分区中的所述应用执行文件进行CRC校验以获取CRC校验结果。
4.如权利要求3所述的终端设备上客户应用程序的编译链接和加载方法,其特征在于,所述将校验通过的所述应用执行文件加载至所述应用程序内存分区中的步骤之后还包括:
判断所述应用程序存储分区中的所述应用执行文件中的所述CRC验证值与所述应用程序内存分区中的所述应用执行文件中的所述CRC验证值是否一致,若否,则重新将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中。
5.如权利要求3所述的终端设备上客户应用程序的编译链接和加载方法,其特征在于,在所述应用执行文件的头部添加文件头,所述文件头中记录有原始的应用执行文件的长度以及所述CRC校验值。
6.如权利要求2所述的终端设备上客户应用程序的加载方法,其特征在于,所述将校验通过的所述应用执行文件加载至所述应用程序内存分区中的步骤之后还包括:
判断所述应用程序存储分区中的所述应用执行文件与所述应用程序内存分区中的所述应用执行文件是否一致,若否,则重新将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中。
7.如权利要求1所述的终端设备上客户应用程序的编译链接和加载方法,其特征在于,所述系统函数映射表设置为共享以向所述客户应用程序提供所述系统函数映射表的访问权限。
8.一种客户应用程序的编译链接方法,其特征在于,应用于编译设备;
所述编译链接方法包括:
对所述客户应用程序包含的各源文件进行编译以获取各可重定位文件;
根据链接脚本文件,对所述各可重定位文件进行重定位操作,以生成一应用执行文件,其中,在所述链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息,所述链接加载地址为所述客户应用程序内存分区的起始地址,所述链接信息用于声明该系统函数名称符号已在外部定义并提供所述系统函数名称符号在所述系统函数映射表中的对应地址;
输出所述应用执行文件以使得终端设备根据所述链接加载地址加载所述应用执行文件。
9.一种客户应用程序的加载方法,其特征在于,应用于终端设备,在所述终端设备的存储器中划分有应用程序存储分区,在所述终端设备的内存器中划分有应用程序内存分区;
所述加载方法包括:
获取一应用执行文件,所述应用执行文件为根据链接脚本文件,对各可重定位文件进行重定位操作以生成的文件,其中,在所述链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息;
将所述应用执行文件烧录至所述应用程序存储分区中;
根据所述链接加载地址,将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中;
调用所述应用执行文件的入口函数,将所述系统函数映射表的起始地址作为所述入口函数的参数传递给所述应用执行文件,以使所述应用执行文件根据所述系统函数映射表中的系统函数地址访问对应的系统函数。
10.一种编译设备,其特征在于,所述编译设备包括:编译模块、文件生成模块和文件输出模块;
所述编译模块用于对客户应用程序包含的各源文件进行编译以获取各可重定位文件;
所述文件生成模块用于根据链接脚本文件,对所述各可重定位文件进行重定位操作,以生成一应用执行文件,其中,在所述链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息,所述链接加载地址为所述客户应用程序内存分区的起始地址,所述链接信息用于声明该系统函数名称符号已在外部定义并提供所述系统函数名称符号在所述系统函数映射表中的对应地址;
所述文件输出模块用于输出所述应用执行文件以使得终端设备根据所述链接加载地址加载所述应用执行文件。
11.一种终端设备,其特征在于,在所述终端设备的存储器中划分有应用程序存储分区,在所述终端设备的内存器中划分有应用程序内存分区;
所述终端设备还包括:获取模块、烧录模块、加载模块和函数调用模块;
所述获取模块用于获取一应用执行文件,所述应用执行文件为根据链接脚本文件,对各可重定位文件进行重定位操作以生成的文件,其中,在所述链接脚本文件中写有链接加载地址以及系统函数映射表中的各系统函数名称符号的链接信息;
所述烧录模块用于将所述应用执行文件烧录至所述应用程序存储分区中;
所述加载模块用于根据所述链接加载地址,将所述应用程序存储分区中的所述应用执行文件加载至所述应用程序内存分区中;
所述函数调用模块用于调用所述应用执行文件的入口函数,将所述系统函数映射表的起始地址作为所述入口函数的参数传递给所述应用执行文件,以使所述应用执行文件根据所述系统函数映射表中的系统函数地址访问对应的系统函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011625642.2A CN112650501B (zh) | 2020-12-31 | 2020-12-31 | 编译、终端设备及其客户应用程序的编译链接和加载方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011625642.2A CN112650501B (zh) | 2020-12-31 | 2020-12-31 | 编译、终端设备及其客户应用程序的编译链接和加载方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112650501A true CN112650501A (zh) | 2021-04-13 |
CN112650501B CN112650501B (zh) | 2023-07-07 |
Family
ID=75367326
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011625642.2A Active CN112650501B (zh) | 2020-12-31 | 2020-12-31 | 编译、终端设备及其客户应用程序的编译链接和加载方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112650501B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023213263A1 (zh) * | 2022-05-05 | 2023-11-09 | 阿里云计算有限公司 | 程序编译和启动方法、设备及存储介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101458629A (zh) * | 2008-12-31 | 2009-06-17 | 北京中星微电子有限公司 | 嵌入式实时操作系统中实现动态加载的方法和装置 |
CN101706725A (zh) * | 2009-11-20 | 2010-05-12 | 中兴通讯股份有限公司 | 一种可重定位程序的加载及调试方法及系统 |
CN102147743A (zh) * | 2011-03-28 | 2011-08-10 | 博视联(苏州)信息科技有限公司 | 加快嵌入式系统应用程序启动速度的方法 |
CN102819440A (zh) * | 2011-06-10 | 2012-12-12 | 中兴通讯股份有限公司 | 一种多制式应用程序的动态加载方法和装置 |
CN102819439A (zh) * | 2011-06-10 | 2012-12-12 | 中兴通讯股份有限公司 | 一种基于重定位的多制式应用程序的动态加载方法和装置 |
CN103077066A (zh) * | 2013-02-02 | 2013-05-01 | 深圳市中兴移动通信有限公司 | 一种编译时嵌入产品关键信息的方法和系统 |
CN103309684A (zh) * | 2012-03-07 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 动态加载应用的方法及装置 |
CN103995726A (zh) * | 2014-04-28 | 2014-08-20 | 华为技术有限公司 | 映像文件生成方法及装置 |
US20160179513A1 (en) * | 2009-03-31 | 2016-06-23 | International Business Machines Corporation | Server-side translation for custom application support in client-side scripts |
CN107577609A (zh) * | 2017-09-28 | 2018-01-12 | 北京计算机技术及应用研究所 | 一种基于主机端动态链接的嵌入式系统动态模块调试方法 |
CN111767056A (zh) * | 2020-06-29 | 2020-10-13 | Oppo广东移动通信有限公司 | 一种源码编译方法、可执行文件运行方法及终端设备 |
-
2020
- 2020-12-31 CN CN202011625642.2A patent/CN112650501B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101458629A (zh) * | 2008-12-31 | 2009-06-17 | 北京中星微电子有限公司 | 嵌入式实时操作系统中实现动态加载的方法和装置 |
US20160179513A1 (en) * | 2009-03-31 | 2016-06-23 | International Business Machines Corporation | Server-side translation for custom application support in client-side scripts |
CN101706725A (zh) * | 2009-11-20 | 2010-05-12 | 中兴通讯股份有限公司 | 一种可重定位程序的加载及调试方法及系统 |
CN102147743A (zh) * | 2011-03-28 | 2011-08-10 | 博视联(苏州)信息科技有限公司 | 加快嵌入式系统应用程序启动速度的方法 |
CN102819440A (zh) * | 2011-06-10 | 2012-12-12 | 中兴通讯股份有限公司 | 一种多制式应用程序的动态加载方法和装置 |
CN102819439A (zh) * | 2011-06-10 | 2012-12-12 | 中兴通讯股份有限公司 | 一种基于重定位的多制式应用程序的动态加载方法和装置 |
CN103309684A (zh) * | 2012-03-07 | 2013-09-18 | 腾讯科技(深圳)有限公司 | 动态加载应用的方法及装置 |
CN103077066A (zh) * | 2013-02-02 | 2013-05-01 | 深圳市中兴移动通信有限公司 | 一种编译时嵌入产品关键信息的方法和系统 |
CN103995726A (zh) * | 2014-04-28 | 2014-08-20 | 华为技术有限公司 | 映像文件生成方法及装置 |
CN107577609A (zh) * | 2017-09-28 | 2018-01-12 | 北京计算机技术及应用研究所 | 一种基于主机端动态链接的嵌入式系统动态模块调试方法 |
CN111767056A (zh) * | 2020-06-29 | 2020-10-13 | Oppo广东移动通信有限公司 | 一种源码编译方法、可执行文件运行方法及终端设备 |
Non-Patent Citations (4)
Title |
---|
JAVIER ALVAREZ: "Mastering the GNU linker script", pages 1 - 6, Retrieved from the Internet <URL:《https://allthingsembedded.com/post/2020-04-11-mastering-the-gnu-linker-script/》> * |
王云飞: "嵌入式实时操作系统内核设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》, pages 138 - 625 * |
科尔沁第一狠人: "8 链接器 自定义链接脚本,指定入口函数,指定代码段起始地址等等", pages 1 - 15, Retrieved from the Internet <URL:《https://blog.csdn.net/LinuxArmbiggod/article/details/103435993》> * |
黄振华: "基于H.264的嵌入式实时视频采集与传输系统的设计与实现", 《中国优秀硕士学位论文全文数据库信息科技辑》, pages 136 - 250 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023213263A1 (zh) * | 2022-05-05 | 2023-11-09 | 阿里云计算有限公司 | 程序编译和启动方法、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112650501B (zh) | 2023-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109491695B (zh) | 一种集成安卓应用的增量更新方法 | |
CN107291480B (zh) | 一种函数调用方法及装置 | |
US9086899B2 (en) | Loading and debugging method and debugging system thereof | |
CN106648755B (zh) | 一种在安卓art环境中动态加载dex的方法及装置 | |
CN111124550A (zh) | 一种程序动态加载方法、装置及存储介质 | |
CN110659031A (zh) | 应用程序的编译方法、装置、电子设备及存储介质 | |
CN101030241A (zh) | 基于Keil C51的软件保护开发的方法和系统 | |
WO2020077487A1 (zh) | 优化和运行安卓应用程序的方法以及相关装置 | |
JP2009505275A (ja) | モジュール内の実行アプリケーション・プログラムの安全性を検査するシステム、方法、及びコンピュータプログラム | |
CN115629971A (zh) | 一种应用的开发系统和开发方法 | |
US8397217B2 (en) | Integrating templates into tests | |
CN112650501B (zh) | 编译、终端设备及其客户应用程序的编译链接和加载方法 | |
CN110032425B (zh) | 一种动态链接库文件虚拟化方法、系统及存储介质 | |
CN111580850B (zh) | 增量升级方法、装置、计算机设备及存储介质 | |
CN109947407B (zh) | 一种数据获取方法及装置 | |
CN117149209A (zh) | 一种代码增量编译方法、装置、计算机设备及存储介质 | |
CN110806891A (zh) | 嵌入式设备软件版本的生成方法及装置 | |
CN117130618A (zh) | 智能卡可执行文件的增量编译方法、装置、设备 | |
CN111399926A (zh) | 下载启动程序的方法和装置 | |
CN114995828A (zh) | 智能合约在线调用方法、系统、介质及设备 | |
KR100745256B1 (ko) | 임베디드 시스템에서의 코드 오버레이 방법 | |
CN113504934A (zh) | 补丁程序编译方法、程序修补方法及相关设备 | |
CN111290765A (zh) | 一种固件快速烧录方法、系统及存储介质 | |
CN113220314A (zh) | App资源加载及apk生成方法、装置、设备及介质 | |
CN108958795B (zh) | 一种嵌入式系统中BootLoader代码重利用方法和开发板 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |