=====================================================================
固件C字营·版权所有·欢迎转载
敬请关注微信公众号:“固件C字营”
敬请关注QQ群:1052307
敬请关注优快云博客:Cstyle_0x007
=====================================================================
所谓”固件“原始的定义是被固化的软件。历史上存储固件的介质有很多类似EEROM、Flash等,目前在UEFI固件领域基本都是用的NorFlash,它最大的特点是支持XIP也即片上执行。UEFI BIOS固件基本都是使用SPI接口的NorFlash来存储。目标二进制固件文件通常包括代码段(code)、只读数据段(RO Data)、已初始化读写数据段(RW Data)、BSS段、堆、栈、以及其他的资源段。固件在XIP阶段的代码在链接的时候,链接地址与存储地址是相同的都会是0x00000000,在C代码开始之前通过crt0库把读写数据段(RW Data)拷贝到可读可写的内存、在内存中创建并初始化BSS段,堆、栈,C代码提供基本的运行环境。下表是固件在XIP执行的时候每一个段的状态,RO Data不需要写因此不需要拷贝到RAM当中,同理在RAM没有准备好之前即使是读写数据段也是只读的,再有就是堆段与栈段在内存没有准备好之前也是不可用。
资源类型 |
状态 |
||
固化阶段 |