bootrom的类型

Bootrom -> bootloader -> kernel -> init >android abl,uefi 阅读详情
bootrom有三种类型:ROM_RESIDENT、UMCOMPRESS和COMPRESS。第一种是一直运行在rom中的映象,只把data段拷贝到ram里面;第二种是非压缩方式的映象,data段和text段都要拷贝到ram里面,并在ram里面运行;第三种是压缩方式的映象,生成的时候编译器会把除掉romInit.s和bootInit.c之外的目标文件压缩并“汇编”成一个bootrom.Z.s,最后和romInit.o,bootInit.o,version.o进行链接,生成bootrom映象。所以它也是要全部拷贝到ram中,且必须要进行压缩的工作。而这些工作基本上都是在bootInit.c中进行的。
bootInit.c里面主要就是romStart()这个函数,让我们来分析一下它。它的入口参数是startType,是一个启动类型标志,如BOOT_CLEAR、BOOT_NORMAL等,这在后面清内存时会用到。函数一开始定义了一个函数指针变量absEntry,它最后指向的就是ursInit()或compressedEntry()函数。接下来就是对三种bootrom映象类型进行不同的操作,下面我们以arm为例来分别说明。
1。ROM_RESIDENT:它要拷贝的只是data段。直接调用“ copyLongs ((UINT *)(etext + 4), (UINT *) RESIDENT_DATA, ((UINT) edata - (UINT) RESIDENT_DATA) / sizeof (long));”来实现。这时系统是运行在rom上的,链接器把所有的函数都定位在rom空间上,所以调用copyLongs时没有计算偏移,而拷贝的目标地址是RESIDENT_DATA,对于arm而言RESIDENT_DATA就是sdata,这是在romInit.s中定义的。通过objdumparm这个工具可以看到sdata定位在RAM_HIGH_ADRS+0x4这个位置上。而etext + 4则是rom上data段的起始地址。这样,完成data段的拷贝。然后如果startType为冷启动,那么清零SYS_MEM_BOTTOM到栈底(RESIDENT_DATA - STACK_SAVE)以及data段结束之后(edata到SYS_MEM_TOP)的内存空间。然后将函数开始定义的指针absEntry指向usrInit(在rom中):absEntry = (FUNCPTR)usrInit;并带上startType跳过去运行:(absEntry)(startType),完成。
2。UMCOMPRESS:一开始它将text段和data段都拷贝到ram中:((FUNCPTR)ROM_OFFSET(copyLongs))(ROM_TEXT_ADRS,(UINT)romInit, ROM_COPY_SIZE / sizeof (long))。这时的ROM_TEXT_ADRS就是代码段在rom上的开始位置,而romInit则是由链接器定位到了RAM_HIGH_ADRS的地址上,所以这时的确是按我们常规的思路拷贝的。并且由于copyLongs函数是定位到ram空间的,所以要计算它在rom上的偏移ROM_OFFSET(copyLongs)。然后象ROM_RESIDENT一样,它也要清零栈底(romInit - STACK_SAVE)以下和映象之上(SYS_MEM_TOP - (romInit + ROM_COPY_SIZE))的内存空间。然后将函数开始定义的指针absEntry指向usrInit(在ram中):absEntry = (FUNCPTR)usrInit;并带上startType跳过去运行:(absEntry)(startType),完成。
3。COMPRESS:开始的时候把从ROM_TEXT_ADRS起始的长度为romInit到binArrayStart的内容拷贝到romInit位置上。注意,由于romInit被链接器定位到RAM_LOW_ADRS的位置上,这时相当于把romInit.o、bootInit.o和version.o的内容拷贝到了RAM_LOW_ADRS上。然后和UMCOMPRESS一样清零栈底(romInit - STACK_SAVE)以下的内存空间,不同之处是它接下来清除binArrayStart之上(SYS_MEM_TOP - binArrayStart)的内存空间:fillLongs ((UINT *)binArrayStart, ((UINT)SYS_MEM_TOP - (UINT)binArrayStart) / sizeof (long), 0)。然后调用解压程序inflate将在rom上的(binArrayEnd - binArrayStart)之间的内容解压到RAM_DST_ADRS(RAM_HIGH_ADRS)的位置上:binArrayStart(absUncompress) ((UCHAR *)ROM_OFFSET(binArrayStart),(UCHAR *)RAM_DST_ADRS, &binArrayEnd - binArrayStart)。这样,解完压后函数compressedEntry()刚好就在RAM_DST_ADRS(RAM_HIGH_ADRS)的位置上,所以接下来将指针absEntry指向它:absEntry = (FUNCPTR)RAM_DST_ADRS。最后带上startType跳过去运行:(absEntry)(startType),完成。
4、TC29x BootROM 内容 TC297的框图 4、TC29x BootROM 内容 启动软件(简称SSW); 实现附加功能的软件模块(Bootstrap loader); 测试固件 4.1启动软件 启动软件是芯片复位后第一个执行的软件。 SSW在CPU0上执行——所有其他cpu在引导期间都保持在halt状态,由用户软件启动,其中如下: 1)BootROM中的SSW起始地址是CPU0的Program Counter寄存器的复位值。从这个位置获取一条指令,这是任何设备启动后执行的第一条指令。 -在此入口点之后,固件立. 阅读详情

相关推荐

​一篇关于BootRom的概念性文章。

启动ROM是一种用于启动计算机系统的只读存储器(ROM)。它有两种类型:一种是掩模启动ROM,一旦写入后无法更改;另一种是启动EEPROM。开机时,硬件通常未初始化。为了继续启动,系统可能需要从某个外围设备读取引导程序。通常,在软件中实现从外部存储设备读取的例程比在硬件中实现更容易。启动ROM提供了一个存储初始加载代码的地方,在处理器开始执行时,这个位置是立即可用的。关注MROM(Mask ROM)和EEPROM之间的区别。掩膜ROM(MROM)电可擦除可编程ROM(EEPROM)基本定义。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1442

bootrom是什么?

但是对于一般的arm64处理器来说,要运行大型系统,就需要bootrom来引导系统启动了:简单来说,处理器上电后,就会根据程序计数器(pc)去取第一条指令,译码,然后执行;如下图对应不同启动模式的不同sp,pc值,这个是由硬件决定的,上电后,cpu就会通过总线,去到对应地址去取指令,译码,并执行。所以总结下,bootrom就是处理器上电后,最先启动的一段代码,可根据不同的启动模式(硬件拨码)去不同的存储设备取bootlaoder,并执行bootloader来做后续的启动系统的工作。

我的博客 6717

VxWorks 引导程序(BIOS/BootLoader/Bootrom)

前言:vxworks的一些文件,如usrconfig.c在config,comp目录中均有出现,因编译方式而选择某一个文件,命令行方式采用config目录文件,tornado图形界面配置选择comp目录文件。此处采用命令行方式编译。 Bootrom完成vxworks启动前的基本引导工作,如最简初始化硬件,下载映像文件并解压到RAM中等操作。值得一提的是某些型号处理器对cache等部件初始化有特殊要求,可能需在bootrom中进行特殊处理。 一、vxworks映像...

pony12的专栏 3364

【IC】BootROM简介

BootROM(Boot Read-Only Memory)是嵌入式系统启动过程中的一个关键组件。它是一个小型的固件程序,存储在只读存储器(ROM)中,用于初始化硬件并加载和启动操作系统或引导加载程序。

qq_38801607的博客 3039

金士顿,U盘量产工具,IS918-FN12主控

手里U盘是金士顿,写保护了,IS918-FN12主控,找了好几个版本不能用,在201124A版本基础上修改了芯片型号支持,成功修复。

量产工具-银灿IS918MPTool-GA-221206

量产工具-银灿IS918MPTool-GA-221206,稳定版

调试 bootrom_uncmp image 使用workbench OCD 英文

This TechTip provides some helpful tips on how to debug a vxWorks �bootrom_uncmp� image using Wind River�s Workbench environment and the OCD Emulator Tools.   The concepts presented in this T

qingfengtsing的专栏 1706

银灿的is918m量产工具

银灿的is918m量产工具 ,支持IS918M主控

[转]VxWorks 引导程序(BIOS/BootLoader/Bootrom)

前言:vxworks 的一些文件,如 usrconfig.c 在 config,comp目录中均有出现,因编译方式而选择某一个文件,命令行方式采用 config 目录文件,tornado 图形界面配置选择comp 目录文件。此处采用命令行方式编译。 Bootrom 完成 vxworks 启动前的基本引导工作,如最简初始化硬件,下载映像文件并解压到RAM中等操作。值得一提的是某些型号处理器对 cache 等部件初始化有特殊要求,可能需在 bootrom 中进行特殊处理。 一、vxworks映像类型 Bo

da895的专栏 1348

闪存 U盘量产 银灿IS918MPTool-GA-221206

获得的最新版本

银灿IS918M-GA量产工具 版本221206

银灿IS918M-GA量产工具是针对银灿(Innodisk)品牌的特定型号固态硬盘(SSD)设计的专业软件,主要用于对这些硬盘进行批量生产和修复操作。版本221206指的是该工具的更新日期,即2022年12月6日,通常这样的更新意味着修复了之前的bug,增加了新功能,或优化了性能。 在IT行业中,"量产工具"是一种专门用于对存储设备进行初始化、格式化、分区、写入数据等操作的软件。这类工具对于生产环境尤其重要,因为它们可以高效地处理大量硬件,而无需手动逐一操作。银灿IS918M-GA量产工具就是这样一个专用的工具,适用于银灿IS918M-GA系列的固态硬盘。 银灿(Innodisk)是一家专注于企业级存储解决方案的制造商,其产品广泛应用于数据中心、云计算、工业自动化等领域。IS918M-GA可能是一款针对这些市场设计的高性能、高可靠性的SSD。量产工具则为这些硬盘提供了一种标准化的管理方式,确保在大规模部署时能够快速、一致地完成设置。 在文件名称列表中提到的“IS918MPTool”可能是这个量产工具的主程序文件,用户通过运行这个程序来启动和控制整个量产过程。此外,量产工具通常会包含一系列辅助文件,如驱动程序、配置文件、固件更新等,这些都可能在同一个压缩包内。 使用量产工具时,用户首先需要连接待处理的固态硬盘,然后根据软件界面的指引进行操作。这可能包括选择操作模式(如初始化、格式化、固件升级等)、设置分区参数、分配容量等。在批量操作中,工具会自动按预设步骤处理每个设备,大大提高了工作效率。 在更新到版本221206后,用户可能会发现以下改进: 1. **性能提升**:新版本可能优化了内部算法,使得数据处理速度更快。 2. **稳定性增强**:修复了可能导致工具崩溃或操作失败的bug,提升了整体稳定性。 3. **兼容性扩展**:可能增加了对新固件或硬件的支持,扩大了适用范围。 4. **新功能添加**:可能加入了新的操作选项,如新的加密技术或更灵活的分区策略。 5. **用户体验改善**:改进了用户界面,使操作更直观,或者提供了更多的错误提示和帮助信息。 银灿IS918M-GA量产工具版本221206是针对特定SSD型号的专业管理软件,它提供了批量生产和修复功能,帮助企业用户更高效地管理和维护他们的存储设备。使用这样的工具,不仅可以节省时间,还能确保设备的统一性和可靠性。在使用前,务必仔细阅读官方文档,了解如何正确操作,以避免可能的数据丢失或设备损坏。

从 RAM、ROM、FLASH与EFLASH到BOOTROM、BOOTLOADER

bootrom是什么?_qxqxa的博客-优快云博客

qq_45519101的博客 3524

银灿IS918 量产工具 IS918MPTool-GA-201124A 优盘工具

银灿IS918 量产工具 IS918 MPTool_GA_ 201124A 优盘工具,优盘扩容工具 U盘量产工具,开卡

深入解析ZYNQ启动流程:从BootROM到程序固化的完整指南

本文深入解析ZYNQ启动流程,从BootROM、FSBL到应用程序运行三阶段,详细阐述了PS主导、PL从属的协同启动机制。重点介绍了BootROM头文件的关键作用、FSBL的定制化功能,并提供了从SD卡启动到QSPI Flash程序固化的完整实战指南,帮助开发者彻底掌握ZYNQ启动原理与排错方法。

weixin_29192141的博客 494

Anthropic三件套重构AI工作流:Claude Code、Design与桌面宠物实战指南

AI协作已从单点工具迈入系统化工作流阶段。理解AI作为‘协作者’而非‘执行器’的本质,是提升工程效率的关键前提;其核心在于对任务调度、自适应推理与人机交互边界的重新定义。Claude Code的xhigh effort机制体现了分层推理的工程智慧,Claude Design以HTML为原生设计语言实现设计-代码一体化,而桌面宠物则将抽象的token消耗具象为可感知的硬件反馈。这些能力共同指向一个趋势:AI工作流正从prompt调参走向契约式委派、从界面割裂走向跨模态统一。本文结合Opus 4.7最新实践,解

a4512138的专栏 484

摩擦纳米发电机测试系统全解析:从硬件配置到软件控制

本文全面解析摩擦纳米发电机(TENG)测试系统,涵盖硬件配置、软件控制及系统集成。详细介绍NI USB-6003等采集卡的选择与使用,以及一体化控制软件的功能与优势,帮助研究人员高效评估纳米材料发电性能。系统支持自动测试与数据分析,显著提升测试效率与准确性。

weixin_28720767的博客 460

vxworks ---可加载的VxWorks映象

vxworks ---可加载的VxWorks映象

学海无涯,回头是岸........ 1617

10-Oracle 23 ai Vector Search 概述和参数

企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation :RAG)功能,RAG能够将LLM的生成能力与知识库的精准资料库进行检索结合,将大模型部署在内部同时将私有的数据进行LLM的检索避免泄露企业专用的数据同时提高的准确性。于是如何将数据存入向量数据库以及向量查询等这些基本功能变得必备和重要。

远方的专栏 1295

华为路由器密码恢复

中低端路由器清除密码方法 清除BOOTROM密码: 中低端路由器的BOOTROM缺省是没有的,若设置后丢失,只能使用万能密码:WhiteLily2970013  注意:万能密码区分大小写        AR46 Bootrom 5.04的超级密码 :supperman

Galdys的专栏 1982

基于深度学习的番茄成熟度检测系统——YOLOv5、YOLOv8、YOLOv10及UI界面的实现

YOLO是一种快速且准确的目标检测模型,近年来,YOLOv5、YOLOv8和YOLOv10作为YOLO系列的重要版本,分别在速度、精度和效率上进行了优化。下面我们简要介绍这些模型。本文介绍了如何基于YOLOv5、YOLOv8和YOLOv10等深度学习模型,结合PyQt5设计一个番茄成熟度检测系统。通过训练模型、优化算法和设计用户友好的界面,我们能够构建一个高效且准确的番茄成熟度检测系统,广泛应用于农业自动化和智能化管理中。

YOLO 1002

掌握C++新特性中智能指针的综合指南

本文是一篇关于C++中智能指针的综合指南,旨在深入探讨现代内存管理的核心概念和技术。智能指针是C++中一种强大的工具,可以帮助开发人员更安全、高效地管理内存资源。通过详细解析各种类型的智能指针,包括unique_ptr、shared_ptr和weak_ptr,读者将了解它们的原理、用法和适用场景。本文将重点介绍智能指针的优势,如自动内存释放、避免内存泄漏和循环引用等问题。此外,还将讨论智能指针与传统指针的区别,并提供一些最佳实践和实用技巧,帮助读者在实际项目中正确、高效地使用智能指针。

Lion_Long的博客 1200

SM2246EN SSD主控BootROM修复实战指南

SSD主控固件崩溃是存储设备常见故障类型,其本质是启动流程中固件校验失败导致的逻辑锁死。理解主控启动三阶段(复位→BootROM→外部固件加载)与BootROM模式原理,是实施精准修复的基础。SM2246EN作为经典SATA主控,依赖SPI NOR Flash存储固件,当ROM校验头(CRC32)异常或NAND映射表损坏时,将陷入无响应状态。此时需通过物理短接ROM_CS引脚强制进入BootROM,配合专用量产工具完成固件重写——该过程不触碰用户数据区,核心价值在于恢复主控基础通信与FTL初始化能力,适用于

weixin_29194693的博客 315

使用阿里天池平台训练YOLO目标检测模型

YOLO算法是一种单阶段目标检测算法,由Joseph Redmon等人于2015年提出。与传统的两阶段检测算法相比,YOLO将目标检测问题转化为回归问题,直接预测边界框的位置和类别概率,大大提高了检测速度。YOLOv1: 首次提出YOLO的核心思想,将图像分割成网格,每个网格预测边界框和类别概率。YOLOv2: 引入了批量归一化、锚框等改进,提高了检测精度。YOLOv3: 采用多尺度预测,增强了对小目标的检测能力。

步子哥的博客 1090
上一篇: LK的大体过程
下一篇: 连接CMW 500综测仪VoLTE时的设置
makeyourprogress
博客等级 码龄11年 26粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值