CN113157432B - 一种基于RISC处理器的firmware替换方法 - Google Patents
一种基于RISC处理器的firmware替换方法 Download PDFInfo
- Publication number
- CN113157432B CN113157432B CN202110152788.8A CN202110152788A CN113157432B CN 113157432 B CN113157432 B CN 113157432B CN 202110152788 A CN202110152788 A CN 202110152788A CN 113157432 B CN113157432 B CN 113157432B
- Authority
- CN
- China
- Prior art keywords
- firmware
- module
- memory area
- hotspot
- base
- 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
Images
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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开一种基于RISC处理器的firmware替换方法,包括以下步骤:S1、使用烧写FLASH的方式将原来的firmware替换为包含有yscall_swpfirmware_base.S模块的firmware;S2、重启平台;S3、加载hotswap_mod.c内核模块;S4、执行hotswap_user_top.c模块代码,将待替换的firmware从磁盘加载到用户空间的内存区域中。本发明可以在不重新烧写FLASH、不关机的情况下替换firmware,还避免了现有替换方法中需要再次烧写替换成原来的firmware的情况。
Description
技术领域
本发明涉及一种基于RISC处理器的firmware替换方法,属于功能部署技术领域。
背景技术
firmware只能在RISC处理器的最高权限模式下运行。在RISC处理器架构中,firmware非常重要,它负责对中断、异常和系统调用指令的响应与处理,只有在firmware中才可以使用特权指令读写core的状态寄存器。
目前RISC处理器平台(桌面机、服务器等)中的firmware被保存在主板上的FLASH中;若想要替换新的firmware,需要在维护环境中通过维护接口将新的firmware烧写到FLASH中,然后重启平台。虽然可以在平台不关机的状态下烧写FLASH,但只有在重启平台后重新烧写的firmware才会被执行。
根据目前RISC处理器平台替换firmware的流程,在升级、调试firmware时都会不可避免地擦写主板上的FLASH,特别是在调试firmware时通常会频繁地擦写FLASH,但由于FLASH的擦写次数是有限的,所以频繁地升级或调试firmware会加快缩短FLASH的使用寿命。若FLASH出现故障,则需要专业的技术人员更换主板上的FLASH部件,费时费力。
发明内容
本发明的目的是提供一种基于RISC处理器的firmware替换方法,其可以在不重新烧写FLASH、不关机的情况下替换firmware,还避免了现有替换方法中需要再次烧写替换成原来的firmware的情况。
为达到上述目的,本发明采用的技术方案是:提供一种基于RISC处理器的firmware替换方法,基于以下模块:
hotswap_mod.c内核模块:用于将用户空间的内存区域中的数据复制到物理地址连续的内存区域中,并将该段物理地址连续的内存区域的基址保存到一个预先规划好的内存中;
hotswap_user_top.c模块:用于将待替换的firmware从磁盘加载到用户空间的内存区域中,还用于通过调用hotswap_mod.c模块将存储在用户空间的内存区域中的所述待替换的firmware复制到物理地址连续的内存区域中,并将该段物理地址连续的内存区域的基址保存到一个预先规划好的内存中;
syscall_swpfirmware_base.S模块:用于将执行该模块代码的core的firmware_base寄存器中的值修改为待替换的firmware的基地址;
hotswap_user_bottom.c模块:用于通过绑定core的方式在用户空间调用syscall_swpfirmware_base.S模块,将当前core的firmware_base寄存器中的值修改为待替换的firmware的基地址;
所述替换方法包括以下步骤:
S1、使用烧写FLASH的方式将原来的firmware替换为包含有syscall_swpfirmware_base.S模块的firmware;
S2、重启装有RISC处理器的平台;
S3、加载hotswap_mod.c内核模块;
S4、执行hotswap_user_top.c模块代码,将待替换的firmware从磁盘加载到用户空间的内存区域中;
S5、调用hotswap_mod.c内核模块,将已加载至用户空间的内存区域中的待替换的firmware复制到物理地址连续的内存区域中,并将该段物理地址连续的内存区域的基址保存到一个预先规划好的内存中;
S6、执行hotswap_user_bottom.c模块代码,通过绑定core的方式在用户空间调用syscall_swpfirmware_base.S模块,将当前core的firmware_base寄存器中的值修改为待替换的firmware的基地址。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明一种基于RISC处理器的firmware替换方法,可以在不重新烧写FLASH、不关机的情况下替换firmware,并让替换后的firmware立即生效,且即使替换后的firmware有问题导致了宕机,只需重启平台即可恢复到替换前的状态,避免了现有替换方法中需要再次烧写替换成原来的firmware的情况,也不需要维护环境,延长FLASH的使用寿命。
附图说明
附图1为本发明一种基于RISC处理器的firmware替换方法的示意图。
具体实施方式
实施例:本发明提供一种基于RISC处理器的firmware替换方法,基于以下模块:
hotswap_mod.c内核模块:用于将用户空间的内存区域中的数据复制到物理地址连续的内存区域中,并将该段物理地址连续的内存区域的基址保存到一个预先规划好的内存中;
hotswap_user_top.c模块:用于将待替换的firmware从磁盘加载到用户空间的内存区域中,还用于通过调用hotswap_mod.c模块将存储在用户空间的内存区域中的所述待替换的firmware复制到物理地址连续的内存区域中,并将该段物理地址连续的内存区域的基址保存到一个预先规划好的内存中;
syscall_swpfirmware_base.S模块:用于将执行该模块代码的core的firmware_base寄存器中的值修改为待替换的firmware的基地址;
hotswap_user_bottom.c模块:用于通过绑定core的方式在用户空间调用syscall_swpfirmware_base.S模块,将当前core的firmware_base寄存器中的值修改为待替换的firmware的基地址;
所述替换方法包括以下步骤:
S1、使用烧写FLASH的方式将原来的firmware替换为包含有syscall_swpfirmware_base.S模块的firmware,使平台具备热替换firmware的底层支持;
S2、重启装有RISC处理器的平台;
S3、加载hotswap_mod.c内核模块,使平台具备热替换firmware的内核支持;
S4、执行hotswap_user_top.c模块代码,将待替换的firmware从磁盘加载到用户空间的内存区域中;
S5、调用hotswap_mod.c内核模块,将已加载至用户空间的内存区域中的待替换的firmware复制到物理地址连续的内存区域中,并将该段物理地址连续的内存区域的基址保存到一个预先规划好的内存中;
S6、执行hotswap_user_bottom.c模块代码,通过绑定core的方式在用户空间调用syscall_swpfirmware_base.S模块,将当前core的firmware_base寄存器中的值修改为待替换的firmware的基地址,至此之后,新的firmware立即生效。
对上述实施例的进一步解释如下:
为了提高灵活性,本方法共有4个源码文件:hotswap_user_top.c(用户态程序)、hotswap_user_bottom.c(用户态程序)、hotswap_mod.c(内核模块)、syscall_swpfirmware_base.S(RISC处理器最高权限下的程序);
本方法的基本原理为:
1. 每个core可以有自己的firmware,它们各自firmware的基址保存在firmware_base寄存器中;平台在上电启动阶段会将所有core的firmware_base寄存器设置为同一个固定基址,通过修改core的firmware_base寄存器可以实现替换firmware;
本方法通过syscall_swpfirmware_base.S中实现了修改firmware_base的代码;syscall_swpfirmware_base.S是为该方法新增的代码,如果需要使用该方法进行替换firmware的操作,则必须保证替换前使用的firmware含有syscall_swpfirmware_base.S。
2. 通过hotswap_user_top,首先将新的firmware从磁盘加载到用户空间的内存区域中,然后在hotswap_user_top中通过系统调用接口,由内核模块hotswap_mod将存储在用户空间的内存区域中的firmware复制到物理地址连续的内存区域中;由于该内存区域是动态申请的,所以每次申请得到的内存区域可能不同;为了后续能找到该内存区域,将该内存区域的基址addr保存到一块预先规划好的内存中。
3. 在hotswap_user_bottom中通过绑定core的方式将指定core的firmware_base的值修改为addr;至此之后,这些指定的core就会执行新的firmware直到再次替换firmware。
4. 替换前后两版firmware中指令的物理地址虽然是不同的,但因为对于firmware的指令流访问是通过物理地址访问的,不进行虚实地址转换,所以不需要刷新ITB或ICache的操作。
5. 由于firmware是在RISC处理器最高权限下运行的程序,而在RISC处理器最高权限下会屏蔽所有中断,不响应任何中断请求,所以对于新、老版本firmware中同名的程序,不会出现替换前执行的是老版本,替换后又执行的是新版。
几种典型的使用场景:
一、用于调试firmware中的某个模块
1.保持新版firmware中除要调试模块的相关代码之外的其他代码不变;
2.在所有的物理core上进行firmware热替换,至此之后,即可进行该模块的调试。
二、在不重新烧写FLASH、不关机的情况下使原来不支持虚拟化的RISC处理器平台支持虚拟化
1. 保持新版的firmware中非虚拟化相关的代码不变,仅增加虚拟化相关的代码;
2. 在指定的物理core上进行firmware热替换,至此之后,这些指定的物理core上就有了对虚拟化的支持。
三、用于调试firmware中guest相关的代码
1.保持新版的firmware中host部分的代码不变,仅修改guest部分的代码;
2. 在hypervisor创建或运行vcpu之前,把vcpu绑定在若干个物理core上,并在这些物理core上进行firmware热替换,至此之后,就可以调试firmware中guest相关的代码了;
由于firmware中host部分的代码在此使用场景中是保持不变的,所以替换前后对于host来说,处理逻辑是保持不变的;只是在替换后,当vcpu被调度到这些物理core上运行时,执行的firmware是新版的firmware;
3. 即使firmware中guest相关的代码写的有问题导致了平台宕机,只需重启平台即可;
重启后平台的状态和替换前完全一致,不会有任何替换导致的副作用,重复之前的操作就可以继续进行firmware中guest相关代码的调试。
采用上述一种基于RISC处理器的firmware替换方法时,其可以在不重新烧写FLASH、不关机的情况下替换firmware,并让替换后的firmware立即生效,且即使替换后的firmware有问题导致了宕机,只需重启平台即可恢复到替换前的状态,避免了现有替换方法中需要再次烧写替换成原来的firmware的情况,也不需要维护环境,延长FLASH的使用寿命。
为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:
RISC处理器:采用精简指令集的处理器。
core:处理器中的处理核心
firmware:固件,写入EPROM(可擦写可编程只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序。
firmware_base:core(处理器核心)中用来保存该core所使用的firmware的基地址的寄存器。
FLASH:闪存。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
Claims (1)
1.一种基于RISC处理器的firmware替换方法,其特征在于,基于以下模块:
hotswap_mod.c内核模块:用于将用户空间的内存区域中的数据复制到物理地址连续的内存区域中,并将该段物理地址连续的内存区域的基址保存到一个预先规划好的内存中;
hotswap_user_top.c模块:用于将待替换的firmware从磁盘加载到用户空间的内存区域中,还用于通过调用hotswap_mod.c模块将存储在用户空间的内存区域中的所述待替换的firmware复制到物理地址连续的内存区域中,并将该段物理地址连续的内存区域的基址保存到一个预先规划好的内存中;
syscall_swpfirmware_base.S模块:用于将执行该模块代码的core的firmware_base寄存器中的值修改为待替换的firmware的基地址;
hotswap_user_bottom.c模块:用于通过绑定core的方式在用户空间调用syscall_swpfirmware_base.S模块,将当前core的firmware_base寄存器中的值修改为待替换的firmware的基地址;
所述替换方法包括以下步骤:
S1、使用烧写FLASH的方式将原来的firmware替换为包含有syscall_swpfirmware_base.S模块的firmware;
S2、重启装有RISC处理器的平台;
S3、加载hotswap_mod.c内核模块;
S4、执行hotswap_user_top.c模块代码,将待替换的firmware从磁盘加载到用户空间的内存区域中;
S5、调用hotswap_mod.c内核模块,将已加载至用户空间的内存区域中的待替换的firmware复制到物理地址连续的内存区域中,并将该段物理地址连续的内存区域的基址保存到一个预先规划好的内存中;
S6、执行hotswap_user_bottom.c模块代码,通过绑定core的方式在用户空间调用syscall_swpfirmware_base.S模块,将当前core的firmware_base寄存器中的值修改为待替换的firmware的基地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110152788.8A CN113157432B (zh) | 2021-02-04 | 2021-02-04 | 一种基于RISC处理器的firmware替换方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110152788.8A CN113157432B (zh) | 2021-02-04 | 2021-02-04 | 一种基于RISC处理器的firmware替换方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113157432A CN113157432A (zh) | 2021-07-23 |
CN113157432B true CN113157432B (zh) | 2022-10-04 |
Family
ID=76882684
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110152788.8A Active CN113157432B (zh) | 2021-02-04 | 2021-02-04 | 一种基于RISC处理器的firmware替换方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113157432B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100042984A1 (en) * | 2008-08-15 | 2010-02-18 | Lsi Corporation | Method and system for modifying firmware image settings within data storgae device controllers |
CN109933441A (zh) * | 2019-02-28 | 2019-06-25 | 上海交通大学 | 微内核进程间通讯方法和系统 |
-
2021
- 2021-02-04 CN CN202110152788.8A patent/CN113157432B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100042984A1 (en) * | 2008-08-15 | 2010-02-18 | Lsi Corporation | Method and system for modifying firmware image settings within data storgae device controllers |
CN109933441A (zh) * | 2019-02-28 | 2019-06-25 | 上海交通大学 | 微内核进程间通讯方法和系统 |
Non-Patent Citations (2)
Title |
---|
《Systematic RISC-V based Firmware Design》;Vladimir Herdt 等;《2019 Forum for Specification and Design Languages (FDL)》;20191231;全文 * |
《基于TMS320C6455+DDR2的Flash加载及烧写程序研究》;陈俊凯 等;《计算机硬件》;20191231;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113157432A (zh) | 2021-07-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3491519B1 (en) | Optimized uefi reboot process | |
KR100239585B1 (ko) | 복구가능한 베이식 펌웨어를 가진 컴퓨터시스템 동작방법 | |
KR102084816B1 (ko) | Bpram을 사용한 소프트웨어 애플리케이션들의 레이아웃 및 실행 | |
US7340566B2 (en) | System and method for initializing a memory device from block oriented NAND flash | |
KR102136906B1 (ko) | Bpram을 이용한 운영체제의 레이아웃 및 실행 | |
US20080184072A1 (en) | Firmware ROM Patch Method | |
US20040088684A1 (en) | Intercepting function calls | |
KR20140118093A (ko) | 메모리 가상화 기반 스냅샷 부트 장치 및 방법 | |
CN110874237A (zh) | 软件升级方法、装置、终端以及可读存储介质 | |
JP2010500682A (ja) | フラッシュメモリアクセス回路 | |
US7958344B2 (en) | Method for adjusting set-up default value of bios and mainboard using the same method | |
US9037773B2 (en) | Methods for processing and addressing data between volatile memory and non-volatile memory in an electronic apparatus | |
US6925522B2 (en) | Device and method capable of changing codes of micro-controller | |
CN113157432B (zh) | 一种基于RISC处理器的firmware替换方法 | |
CN113377586A (zh) | 一种服务器自动化检测方法、装置及存储介质 | |
CN110825421B (zh) | 一种固件升级方法、系统及可读存储介质 | |
CN102298531B (zh) | 在嵌入式系统中对闪存文件系统进行升级的方法 | |
CN111694580B (zh) | 存储设备升级及初始化的方法、装置、电子设备 | |
TWI431530B (zh) | 嵌入式系統及其程式更新方法 | |
CN115390880A (zh) | 固件升级方法、装置、存储介质及电子设备 | |
CN114528141A (zh) | 一种嵌入式系统内核态下程序缺陷修复的方法和装置 | |
CN111984329A (zh) | 一种boot引导软件标准化生成、执行方法及系统 | |
CN113646745A (zh) | 禁用软件持久性 | |
Hallinan | Reducing boot time in embedded linux systems | |
CN113448639B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |