收藏 分销(赏)

一种ARM平台Linux系统下BIOS的更新方法_王博.pdf

上传人:自信****多点 文档编号:248683 上传时间:2023-05-10 格式:PDF 页数:2 大小:1.94MB
下载 相关 举报
一种ARM平台Linux系统下BIOS的更新方法_王博.pdf_第1页
第1页 / 共2页
一种ARM平台Linux系统下BIOS的更新方法_王博.pdf_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

1、一种 ARM 平台 Linux 系统下 BIOS 的更新方法BIOS(Basic Input Output System)全称为“基本输入/输出系统”,诞生于1975年的CP/M计算机,它是存储在主板上Flash芯片里的一组程序代码。BIOS主要的功能是上电自检,开机时对硬件进行检测,硬件设备初始化,创建BIOS中断等1。随着中央处理器和硬件设备的革新,传统BIOS的安全性、性能以及功能扩展性逐渐跟不上发展,因特尔公司于2002年推出可扩展固件接口(EFI)规范,后来交给UEFI论坛来推广与发展,改名为UEFI。UEFI(Unified Extensible Firmware Interfac

2、e,统一可扩展固件接口)定义操作系统与系统固件之间的接口,负责加电自检,提供连接操作系统与硬件的接口2。此标准发布至今已经得到了广泛的应用,ARM平台下使用的BIOS皆遵守此标准,本文提到的BIOS皆为UEFI BIOS。ARM(Advanced RISC Machine)是一个精简指令集处理器架构,广泛运用于移动通信领域、嵌入式系统设计。相较于x86架构的复杂指令集,ARM架构大幅减少不常用的指令,降低芯片的复杂度和功耗,加快了常用操作。低功耗高性能、授权方式多样化的特点使得ARM架构在国产桌面中央处理器领域、服务器中央处理器领域越来越普及。目前更新ARM平台的BIOS常用的方法有两种:第一

3、种是使用UEFI Shell下的更新工具,需要将U盘格式化成FAT格式或者FAT32格式,将BIOS文件放入其中进行更新;第二种是拆机将Flash芯片拆下来进行离线烧录。本文阐述的在ARM平台Linux下更新BIOS的方法与以上两种方法不同,是在操作系统下进行BIOS更新,以aarch64(基于ARM v8有两种执行模式:aarch32和aarch643)FT-1500/FT2000中央处理器,系统是Kylin Linux为例。1功能设计BIOS存放于Flash芯片里面,通过SPI(Serial PeripheralInterface)总线与中央处理器相连。SPI是一种全双工、同步的通信总线,

4、以主从方式工作4。所以在设计时需要理清中央处理器、SPI、Flash这三者联系。FT1500只需要对写使能的状态寄存器和判断状态的寄存器进行操作。FT2000则分为两种方式:寄存器端口访问和直接地址访问。直接地址访问是一种自动触发方式,通过读写控制信号和地址按照寄存器配置的命令对Flasharray进行数据读写操作;寄存器端口访问是通过对控制内部的寄存器按照命令协议形式进行参数设置,然后控制器通过低位数据端口寄存器读写来触发向Flash发送指令5。本方法的主要功能有四个:1)读取BIOS烧录文件。使用fopen()、fseek()、fread()、ftell()等文件IO函数对要烧录的BIOS

5、文件进行操作,读取文件内容,获取BIOS文件的大小。2)操作SPI寄存器。在Kylin Linux系统下使用mmap()函数映射Flash内存空间以及SPI寄存器配置空间,通过SPI对Flash进行操作,实现Flash按扇区擦除、Flash读、Flash写等功能。3)备份旧版BIOS。分配64 kB内存,遍历整个Flash空间,以64 kB为单位,使用fopen()、fwrite()等函数将BIOS写入备份文件保存,实现整个BIOS备份。4)判断处理器型号并对Flash芯片进行BIOS烧录。因为每个处理器对应的操作,配置寄存器的基地址有所不同,所以需要对寄存器进行判断才能进行BIOS烧录操作。

6、在Kylin Linux下通过对/proc/中央处理器info文件信息进行解析,提取出处理器的型号并对其判断,根据不同处理器型号进行相应的BIOS烧录。提供了三种更新种类:update_header对应的是0-0 x10000的地址空间,update_bios对应的是0 x100001-BIOS_SIZE的地址空间,update_all对应的是0-BIOS_SIZE的地址空间。2详细设计ARM平台Linux下BIOS更新方法如图1所示。程序开始运行先打印更新操作的帮助信息,引导用户如何使用命令进行更新操作。然后判断处理器的型号进行下一步操作。打开Linux下的/dev/mem6(系统物理内存的

7、映像文件),通过mmap()函数映射Flash内存空间以及SPI寄存器配置空间。映射的空间大小由起始地址和size决定,本方案中映射的Flash空间地址为00 x1000000,也就是16 MB。为了减少代码的冗余和以及代码的可维护性采用动态链接库的方法编写makefile7生成FT1500和FT2000的lib库,makefile文件如下所示:王博1,2李鸿辉1,2(1研祥智能科技股份有限公司,广东 深圳518107;2国家特种计算机工程技术研究中心,广东 深圳518107)A Method of BIOS Update Under ARM Platform Linux System摘要:针

8、对目前市场上没有ARM平台Linux系统下的BIOS更新工具,中央处理器厂商提供的BIOS工具仅在UEFIShell下可用,Linux系统下未提供在线更新工具。提供了一种ARM平台Linux系统下的BIOS更新方法,通过映射Flash内存空间及SPI寄存器配置空间,SPI对Flash读写、擦除,使用文件IO函数读取BIOS文件等操作,可在Linux系统下直接更新BIOS,备份旧BIOS,提高调试效率,节约售后维护成本。关键词:ARM;BIOS更新;Linux;节约成本Abstract:For the BIOS update tool that is not available under th

9、e ARM platform Linux system on the market,the BIOStool provided by the CPU manufacturer is only available under the UEFI Shell,and the online update tool is not providedunder the Linux system.This paper provides a BIOS update method under the ARM platform Linux system.By mappingthe Flash memory spac

10、e and the SPI register configuration space,SPI reads,writes,erases Flash,and reads BIOS filesusing file IO functions,which can directly update the BIOS under the Linux system.This methodcan back up the old BIOS,improve debugging efficiency,and save after-sales maintenance costs.Keywords:ARM,BIOS upd

11、ate,Linux,cost savings一种ARM平台Linux系统下BIOS的更新方法80工业控制计算机2023年第36卷第1期TARGET:=BiosUpdatelibdir:=lib.PHONY:all$(libdir)all:$(libdir)$(TARGET)$(libdir):$(MAKE)-C$(libdir)/FT1500$(MAKE)-C$(libdir)/FT2000cp lib/FT1500/libFT1500.so./libcp lib/FT2000/libFT2000.so./libcd lib/FT1500;make cleancd lib/FT2000;mak

12、e clean$(TARGET):gcc-g-rdynamic-o$flashupdate.c-L./lib-lpthread-I./lib/FT2000/-ldlclean:rm$(TARGET)rm./lib/*.solib库中包含的操作如下所示:1)读取需更新的BIOS文件;2)备份Flash中原先的BIOS;3)将命令寄存器中的指令发送到Flash芯片;4)读取Flash芯片的状态寄存器,判断是否busy;5)发送写使能命令,解除Flash芯片的写保护;6)按Block进行擦除Flash;7)按双字向指定地址写入待更新的数据;8)读取Flash中的数据,先擦除再写入Flash;9)更新

13、Flash,输入更新Flash的地址范围,打印更新信息;10)对数据长度,地址的合法性进行判断,完成BIOS更新。运行时发现用到lib库中的某些函数时再从库中调取所需的方法。当对处理器判断完成后则根据处理器的型号选择相对应的操作。映射的SPI寄存器配置空间也会根据处理器的类型来选择SPI基地址和SPI Size。接下来读取需要更新的BIOS文件用户,通过之前打印的帮助信息选择更新BIOS的选项:更新BIOS header,更新BIOS,更新all。在擦除、备份、烧录BIOS时以Block为最小单位。一个Block为64 kB,通过所需烧录的BIOS的大小来计算需要更新Block的数量。以Blo

14、ck为单位对比当前系统使用的BIOS内容与需更新的BIOS内容是否相同。如果相同则不执行更新,如果不相同,则进行备份、擦除、更新操作。3测试测试过程说明:将要烧录的BIOS文件拷贝进BIOS更新工具所在的文件夹BIOS_Update_BIN;将BIOS更新工具拷贝到Kylin Linux的home目录;cd BIOS_Update_BIN;sudo su获取管理员权限;chmod+x BiosUpdate为更新工具添加可执行权限;./BiosUpdate-a BIOS文件名(-a是 更 新 整 个BIOS,-h是 更 新BIOS Header,-b是 更 新BIOS);BIOS更新,等待10

15、s系统重启,BIOS更新完成。在运行BIOS更新命令之后,程序会打印软件的版权信息,然后读取要更新的BIOS文件。读取成功之后会对Flash芯片中旧版本的BIOS进行备份。备份完文件后程序会擦除Flash芯片中的内容,然后进行烧录。更新BIOS分为两个步骤:一个是更新BIOS Header,一个是更新BIOS Space。两个更新完成之后系统会在10 s后进行重启,更新结束。具体过程如图2所示:图2BIOS更新过程图4结束语本文提出的在ARM平台Linux系统下BIOS更新的方法可以判断CPU型号并利用DLOP()等Linux API动态加载对应的动态库,进行BIOS更新,判断现有BIOS内容

16、,如与新BIOS相同,则不更新该扇区数据,有效提高Flash寿命。更新BIOS前备份原有的BIOS,便于必要时进行数据回滚。在Linux系统下即可更新BIOS,无需像以往一样使用特定格式的U盘在UEFI Shell环境下更新BIOS,此方法适用于更多ARM平台的CPU。本文提到的方法也有不足的地方,不具备BIOS文件的判断校验功能,所以在更新BIOS前需要注意确保BIOS文件的正确性。参考文献1戴正华.UEFI原理与编程M.北京:机械工业出版社,20152唐文彬,祝跃飞,陈嘉勇.统一可扩展固件接口攻击方法研究J.计算机工程,2012,38(13):99-1013F SHAKED,G KATHR

17、YN E,P CHRISTOPHER,et al.Mod-ellingtheARMv8Architecture,Operationally:Concurrencyand ISA J.Acm Sigplan Notices A Monthly Publication oftheSpecialInterestGrouponProgrammingLanguages,2016,51(1):608-6214杨晓,李战明.面向系统级芯片的串行外设接口模块设计J.计算机应用,2015,35(12):3607-36105飞腾信息技术有限公司.FT-2000四核处理器软件编程手册Z.天津:飞腾信息技术有限公司,20206博韦,西斯特.深入理解LINUX内核M.陈莉君,张琼声,张宏伟,译.3版.北京:中国电力出版社,20077美斯特,布卢.Linux高级程序设计M.陈健,译.北京:人民邮电出版社,2008收稿日期:2022-05-23图1BIOS更新方法流程图81

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 社科论文

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服