CN108628641A - 一种基于嵌入式系统的快速启动方法 - Google Patents
一种基于嵌入式系统的快速启动方法 Download PDFInfo
- Publication number
- CN108628641A CN108628641A CN201810382850.0A CN201810382850A CN108628641A CN 108628641 A CN108628641 A CN 108628641A CN 201810382850 A CN201810382850 A CN 201810382850A CN 108628641 A CN108628641 A CN 108628641A
- Authority
- CN
- China
- Prior art keywords
- bootstrap
- storage medium
- medium
- exterior storage
- scanning information
- 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
Links
Classifications
-
- 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/4401—Bootstrapping
- G06F9/4406—Loading of operating system
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明提出了一种基于嵌入式系统的快速可靠的启动方法,在嵌入式系统领域,特别是在ROM中的固化程序引导外部存储介质内操作系统的启动场景,能有效解决为保持对外部存储介质的兼容性而进行重复扫描导致启动速度下降的问题,同时减少引导程序占用SRAM空间,降低硬件成本。本发明采用技术方案是:对ROM中的固化程序代码进行处理,固化程序遍历扫描出外部存储介质后,对存储介质的相关信息和操作接口进行封装,传递给外部介质的引导程序,引导程序解析扫描介质的封装信息,调用封装信息的读介质操作接口,引导启动操作系统,本方法能够减少外部介质引导程序的遍历扫描操作,加快整个嵌入式系统的启动速度。
Description
技术领域
本发明涉及嵌入式系统领域,特别涉及嵌入式系统的启动场景。
背景技术
随着IC(Integrated Circuit 集成电路)的设计与制造技术发展,SOC(System OnChip,片上系统)作为集包含处理器、存储器和片上逻辑的集成电路也在不断完善,在消费类电子、物联网等SOC领域,芯片厂商为了支持多种外部存储介质(Nand Flash、Nor Flash、eMMC等),一般需要将对介质兼容性处理代码固化到芯片的ROM(Read Only Memory 只读存储器,有的芯片根据产品的定位也会采用EEPROM(Electrically Erasable ProgrammableRead Only Memory)等介质)中,称为固化程序。芯片产品的嵌入式系统固件数据存放在外部存储介质中。这样做可以支持更好地兼容大容量、成本相对低些的外部存储介质,同时可以减少为实现上述兼容性而付出的硬件电路成本和软件工作量。
目前这种采用在ROM中的固化程序引导外部存储介质内操作系统的实现方式使用越来越广泛,产品应用到的行业越来越多,对启动速度和BOM(Bill of Material 物料清单)成本要求也越来越高。
为了最大限度保持对各类外部存储介质的兼容性,ROM中的代码会遍历芯片支持的所有外部存储介质类型,初始化存储介质控制器等硬件,进行数据读取和校验操作,执行这些操作逻辑的代码被固化在ROM中,由于ROM是只读的,ROM中固化的启动代码在运行时,需要一定的SRAM(Static Random Access Memory 静态随机存取储存器)空间存放ROM代码的数据和栈空间,以及外部存储介质系统的启动代码,这些直接决定了使用SRAM空间的大小,由于SRAM的成本较高,如何减少SRAM的空间成为各个IC厂商比较关注的问题。
大部分厂商会采用uboot(普遍用于嵌入式系统中的BootLoader,是在操作系统运行之前执行的一段引导程序,为最终引导操作系统做准备)的SPL(Secondary ProgramLoader,第二阶段引导程序,负责初始化外部RAM并加载引导uboot)作为引导程序,来尽量减少对SRAM的使用,SPL作为uboot内的一段代码,运行在SRAM中,同时需要从外部存储介质读取uboot中其他部分加载到外部ROM中。在具体芯片产品中,外部存储介质的系统可以自定制烧写,ROM中的系统与外部存储介质的系统交互性较少,两个系统对外部存储介质遍历、初始化外部存储介质、系统引导等相关软件操作都会单独再运行一次,导致产品的启动时间会随着ROM和外部介质系统复杂度增加变得越来越长,使整个芯片产品在市场竞争处于不利地位。
为了提升片上系统的启动速度,特别是在外部存储介质品质、类型、参数多样性的情况下,还要减少SRAM硬件成本的付出,需要从软件上设计一种基于片上系统的快速启动方法。
发明内容
本发明提出了一种基于嵌入式系统的快速可靠的启动方法,能有效解决为保持对外部存储介质的兼容性而进行重复扫描导致启动速度下降的问题,同时减少引导程序占用SRAM空间,降低了硬件成本。
本发明要求处理的目标系统满足以下条件:(1)嵌入式系统由三部分组成,固化到ROM中的启动代码、位于外部存储介质的引导程序和操作系统,(2)需要对外部存储介质保存良好的兼容性,(3)固化ROM的程序代码能够通过引导程序正常加载启动外部存储介质的的操作系统。
本发明采用技术方案是:对ROM中的固化程序代码进行处理,固化程序遍历扫描出外部存储介质后,对存储介质的相关信息和操作接口进行封装,传递给外部介质的引导程序,引导程序解析扫描介质的封装信息,调用封装信息的读介质操作接口,引导启动操作系统,本方法能够减少外部介质引导程序的遍历扫描操作,加快整个嵌入式系统启动速度。
整个嵌入式系统由固化到ROM中的启动代码(固化代码)、位于外部存储介质引导程序和操作系统组成,固化ROM的启动代码通过引导程序启动外部存储介质的操作系统。引导代码遍历扫描外部存储介质,将扫描到信息进行封装,存放到约定的指定位置后,通过外部介质的操作接口读取操作系统的引导程序,引导程序启动后不再进行存储介质扫描,直接读取指定的封装信息并进行解析,获取介质类型和介质操作接口,使用此接口从外部存储介质中读取嵌入式系统的剩余数据进行加载,实现嵌入式系统的正常启动。
本发明的有益效果是:(1)外部存储介质内引导程序的无须进行遍历扫描介质操作,提升了整个嵌入式系统的启动速度。(2)节省外部存储介质内引导程序的代码空间,同时也减少了整个SOC使用SRAM空间,降低硬件成本。(3)对封装的数据结构进行校验,提升系统数据可靠性。(4)对外部介质兼容性的操作统一由固化ROM代码处理,减少嵌入式系统内部实现的复杂度,并且降低了耦合性。
附图说明
图1:本方法的存储布局对比图。固化代码存放在ROM中,引导程序和操作系统被烧写到外部存储介质中,固化代码从外部从存储介质中将引导程序加载到加载到SRAM中运行,本方法使用了boot_header的数据存放在SRAM,引导程序无须包含扫描介质的代码。
图2:未使用本方法的嵌入式系统启动流程。
图3:对存储介质信息封装的boot_header数据结构。长度为32 Byte,包括magic魔数必须为“boot”;check_code支持对整个boot_header进行校验,check_code参与校验的值默认为0x0;boot_len 引导程序长度;storage_type 扫描到的外部存储介质类型;支持Nand Flash、Nor Flash、 eMMC等;
read_fun_addr 读介质函数地址,函数及参数示例为:
u32 nand_read(unsigned int storage_type, unsigned int addr, unsigned char* buf, unsigned int len),addr: 读nand的地址值,以字节为单位,buf: 读buffer,len:要读的字节数;
write_fun_addr 写介质函数地址,函数及参数示例为:
u32 nand_write(unsigned int storage_type,unsigned int addr, unsigned char* buf, unsigned int len) addr: 读nand的地址值,以字节为单位;buf: 读buffer;len:要读的字节数;
header_size本数据结构长度,必须为32。
图4:使用本方法的嵌入式系统启动流程。
具体实施方式
本发明的具体实现,详细描述如下:如图4所示,芯片上电后(S401),CPU直接跳转到ROM固化程序代码执行(S402),固化代码初始化硬件环境完成后,开始进行外部存储介质扫描操作(S403),不同介质的控制器初始化时间差异比较大,每种介质都需要进行扫描,整体扫描时间随着扫描的介质种类增加而增加。
固化代码扫描到存储介质后,进行介质内的引导程序读取操作,如图1所示,引导程序不包含介质扫描代码(S102),引导程序运行前需要加载到SRAM指定位置(S101)。加载完成后需要进行数据校验,如果校验失败,则会启动失败,进入烧写(S410)操作。校验通过后,固化代码则会更新boot_header信息(S404),具体为初始化boot_header数据结构成员,将介质类型和读取介质的接口填充到boot_header数据结构中,分别对应结构体的storage_type和read_fun_addr成员,采用校验算法(支持CRC和累加和方式)生成32位的校验码存放在check_code值中,将整个boot_header数据存放到SRAM的约定指定位置,目前放在引导程序的前面,这样可以节省SRAM的空间。上述操作完成后,固化代码接着跳转到引导程序的地址,运行引导程序(S405)。
引导程序启动后(S406),需要读取外部存储介质的操作系统代码和DRAM的初始化代码,并运行操作系统。本方法的引导程序启动后不需要进行外部存储介质的扫描操作,只需要从boot_header获取读操作的接口即可。具体实现如下:引导程序从约定位置(约定位置的计算方法为引导程序的启动地址向前偏移boot_header数据结构长度的地址)读取boot_header数据,对boot_header的数据进行校验(S407),校验算法与固化代码内算法相同,校验码同check_code项比较,同时验证magic是否为”boot”、header_size是否为32,如果boot_header校验失败,则启动失败,跳转到烧写操作(S410)。
引导程序对boot_header校验成功后,获取数据中的介质类型storage_type和读介质接口read_fun_addr,按照图3说明中参数格式要求调用read_fun_addr,就可以直接读取介质中操作系统的内容,并加载运行(S408),减少了引导程序的介质扫描操作,加快系统启动,至此,操作系统启动成功(S409)。
Claims (5)
1.一种基于嵌入式系统的快速启动方法,其特征在于该方法的实现步骤如下:步骤1、固化程序对外部存储介质进行扫描,并对介质扫描信息进行封装保存在SRAM中,加载并运行引导程序;步骤2、引导程序对封装信息进行解析,调用读操作接口获取外部存储介质中的操作系统数据,并对操作系统进行引导启动。
2.根据权利要求1所述的方法,其特征在于:其所述步骤1对介质扫描信息进行封装保存在SRAM中,外部存储介质扫描信息,具体包括介质类型、介质读写操作接口函数,函数参数类型,扫描信息存储结构的魔数,扫描信息存储结构的长度,存储结构的校验码,存储结构的长度为32字节等。
3.根据权利要求1所述的方法,其特征在于:其所述步骤1外部存储介质扫描信息保存在SRAM中,具体描述为保存在引导程序加载到SRAM起始地址前面的32字节处,保证不与引导程序的加载地址重复,并且此地址为固化代码程序与引导程序约定的位置。
4.根据权利要求1所述的方法,其特征在于:其所述步骤2的引导程序对封装信息进行解析,解析的数据结构为权利要求2中所述方法中介质扫描信息。
5.根据权利要求1所述的方法,其特征在于:其所述步骤2调用读操作接口获取外部存储介质中的操作系统数据,读操作接口即为权利要求2中所述方法中介质扫描信息结构中的介质读操作函数接口,函数参数分别为介质类型,起始地址(按照字节对齐),读数据缓冲区、缓冲区字节长度。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810382850.0A CN108628641A (zh) | 2018-04-26 | 2018-04-26 | 一种基于嵌入式系统的快速启动方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810382850.0A CN108628641A (zh) | 2018-04-26 | 2018-04-26 | 一种基于嵌入式系统的快速启动方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108628641A true CN108628641A (zh) | 2018-10-09 |
Family
ID=63694607
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810382850.0A Pending CN108628641A (zh) | 2018-04-26 | 2018-04-26 | 一种基于嵌入式系统的快速启动方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108628641A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110750792A (zh) * | 2019-10-23 | 2020-02-04 | 天津市英贝特航天科技有限公司 | 一种基于dsp flash的安全启动方法 |
CN112988248A (zh) * | 2021-03-09 | 2021-06-18 | 南昌黑鲨科技有限公司 | 计算机可读存储介质及从多种该存储介质中启动智能终端操作系统的方法 |
TWI733157B (zh) * | 2019-01-18 | 2021-07-11 | 合肥杰發科技有限公司 | 一種加快嵌入式系統啟動速度的方法及其嵌入式系統 |
CN114253615A (zh) * | 2021-12-16 | 2022-03-29 | 安天科技集团股份有限公司 | 一种引导程序设置方法、装置、电子设备及存储介质 |
CN114647461A (zh) * | 2022-05-19 | 2022-06-21 | 深圳比特微电子科技有限公司 | 一种嵌入式系统的启动方法和系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279757A (zh) * | 2010-06-11 | 2011-12-14 | 无锡中星微电子有限公司 | 一种系统程序启动的方法及装置 |
CN104794393A (zh) * | 2015-04-24 | 2015-07-22 | 杭州字节信息技术有限公司 | 一种嵌入式分区映像安全认证及内核可信引导方法及其设备 |
CN104991763A (zh) * | 2015-06-04 | 2015-10-21 | 珠海金山网络游戏科技有限公司 | 一种通用的游戏界面行为控制系统 |
CN105183445A (zh) * | 2015-07-10 | 2015-12-23 | 珠海金山网络游戏科技有限公司 | 一种基于xml的游戏人工智能的可视化设计系统 |
US9230112B1 (en) * | 2013-02-23 | 2016-01-05 | Xilinx, Inc. | Secured booting of a field programmable system-on-chip including authentication of a first stage boot loader to mitigate against differential power analysis |
CN106528106A (zh) * | 2016-10-31 | 2017-03-22 | 武汉光迅科技股份有限公司 | 一种自适应各种不同Flash芯片类型的嵌入式系统启动方法 |
-
2018
- 2018-04-26 CN CN201810382850.0A patent/CN108628641A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279757A (zh) * | 2010-06-11 | 2011-12-14 | 无锡中星微电子有限公司 | 一种系统程序启动的方法及装置 |
US9230112B1 (en) * | 2013-02-23 | 2016-01-05 | Xilinx, Inc. | Secured booting of a field programmable system-on-chip including authentication of a first stage boot loader to mitigate against differential power analysis |
CN104794393A (zh) * | 2015-04-24 | 2015-07-22 | 杭州字节信息技术有限公司 | 一种嵌入式分区映像安全认证及内核可信引导方法及其设备 |
CN104991763A (zh) * | 2015-06-04 | 2015-10-21 | 珠海金山网络游戏科技有限公司 | 一种通用的游戏界面行为控制系统 |
CN105183445A (zh) * | 2015-07-10 | 2015-12-23 | 珠海金山网络游戏科技有限公司 | 一种基于xml的游戏人工智能的可视化设计系统 |
CN106528106A (zh) * | 2016-10-31 | 2017-03-22 | 武汉光迅科技股份有限公司 | 一种自适应各种不同Flash芯片类型的嵌入式系统启动方法 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI733157B (zh) * | 2019-01-18 | 2021-07-11 | 合肥杰發科技有限公司 | 一種加快嵌入式系統啟動速度的方法及其嵌入式系統 |
CN110750792A (zh) * | 2019-10-23 | 2020-02-04 | 天津市英贝特航天科技有限公司 | 一种基于dsp flash的安全启动方法 |
CN112988248A (zh) * | 2021-03-09 | 2021-06-18 | 南昌黑鲨科技有限公司 | 计算机可读存储介质及从多种该存储介质中启动智能终端操作系统的方法 |
CN114253615A (zh) * | 2021-12-16 | 2022-03-29 | 安天科技集团股份有限公司 | 一种引导程序设置方法、装置、电子设备及存储介质 |
CN114253615B (zh) * | 2021-12-16 | 2023-08-11 | 安天科技集团股份有限公司 | 一种引导程序设置方法、装置、电子设备及存储介质 |
CN114647461A (zh) * | 2022-05-19 | 2022-06-21 | 深圳比特微电子科技有限公司 | 一种嵌入式系统的启动方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108628641A (zh) | 一种基于嵌入式系统的快速启动方法 | |
CN106293832B (zh) | 一种soc芯片引导启动方法及系统 | |
US7287115B2 (en) | Multi-chip package type memory system | |
CN107704285B (zh) | 现场可编程门阵列多版本配置芯片、系统和方法 | |
US8504799B2 (en) | ROM data patch circuit, embedded system including the same and method of patching ROM data | |
CN108182078B (zh) | 一种优化的弹载设备不拆弹软件在线升级方法 | |
CN102662715B (zh) | 一种嵌入式操作系统启动方法 | |
US9292429B1 (en) | Off-chip non-volatile memory access | |
CN109901847B (zh) | 一种基于存储卡的量产系统固件量产方法 | |
CN114443175B (zh) | 一种用于弹载fpga在线升级的启动配置方法 | |
CN102622243A (zh) | 支持多种nand闪存的固化代码的执行方法 | |
CN101788916B (zh) | 配置芯片的方法和装置 | |
US8918685B2 (en) | Test circuit, memory system, and test method of memory system | |
US20190286544A1 (en) | Method, device and server for checking a defective function | |
CN108804228A (zh) | 一种dsp程序空间扩展的实现方法 | |
CN111666102A (zh) | 文件格式转换方法、芯片验证方法、相关装置及网络芯片 | |
US20040044927A1 (en) | Programmable device and method of programming | |
CN116185299A (zh) | 闪存控制器及相关装置和方法 | |
CN100483349C (zh) | 软件加载方法及其系统 | |
CN114115888A (zh) | 一种基于BootRom功能扩展的嵌入式系统启动方法 | |
US8112576B2 (en) | Calibrated transfer rate | |
JP7284002B2 (ja) | 半導体装置、制御方法およびプログラム | |
US20150095519A1 (en) | Device programming system with whole chip read and method of operation thereof | |
CN111459570B (zh) | Pdf插件加载方法、电子设备和计算机存储介质 | |
CN100470681C (zh) | 一种基于与非型闪存实现用户程序引导的方法 |
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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20181009 |
|
WD01 | Invention patent application deemed withdrawn after publication |