问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

u-boot启动流程详解:从XIP设备到重定位

创作时间:
作者:
@小白创作中心

u-boot启动流程详解:从XIP设备到重定位

引用
CSDN
1.
https://blog.csdn.net/u011456016/article/details/139666459

本文详细介绍了u-boot的启动流程,包括XIP设备、BootROM的作用、SPL(Secondary Program Loader)、重定位等关键概念,并通过具体的启动流程图进行了说明。

一、XIP设备

XIP设备是指一种可以直接在存储器中执行程序代码的设备,而不需要将代码复制到内存中。XIP的全称是eXecute In Place,即芯片内执行。这类设备包括片内的SRAM、NOR Flash、BootROM等。

XIP设备的启动方式是系统上电之后CPU执行的第一条指令是直接在非易失性存储器中执行的,比如被存储在flash中的启动程序,便可以直接在flash中执行,而不需要拷贝到内存中运行。这种启动方式的特点是节省了从存储器到内存的复制过程,从而减少了启动时间和资源消耗。

二、BootROM的作用

支持多种启动方式(如SD卡、EMMC、USB、UART启动)的芯片,内部必定有BootROM。BootROM的主要作用是硬件初始化,并将程序从非XIP设备复制进RAM,然后从RAM中执行。

支持多种启动方式的方法有两种:

  1. 芯片有boot pin,决定使用哪个外设。bootrom根据引脚决定读取哪个设备的程序
  2. 芯片有boot pin,决定多种外设的尝试顺序

三、完整的u-boot复制进内存

由于片内RAM容量有限(只有几KB),而用户程序可能有几百KB或几MB,因此需要采用以下方法:

  1. BootROM从启动设备读取用户程序的前几KB到SRAM,运行它;这前几KB的代码负责:初始化DDR、把完整的程序从启动设备复制到DDR、并跳到DDR运行。
  2. BootROM从启动设备读取SPL到SRAM,运行它;SPL负责:初始化DDR、把用户程序从启动设备复制到DDR、并跳到DDR运行。

四、SPL

SPL全称叫做Secondary Program Loader,实质上是一个二级加载程序。由于SRAM容量有限(通常只有几KB),而u-boot编译后可能有几百KB,因此需要采用以下方法:

  1. 放不下就放不下呗,BootROM加载多少算多少;
  2. 做一个小一点的boot程序,先让BootROM加载这个小的程序,后面再由这个小boot去加载u-boot。

五、重定位

重定位就是uboot将自身拷贝到DRAM的另一个地方去继续运行(DRAM的高地址处)。链接地址和运行地址的关系:正常情况下链接地址 = 运行地址,当运行地址等于链接地址时,程序肯定能运行。

位置无关码:从本质上讲,位置无关码就是代码中跳转或者取值、赋值的目标地址都使用相对地址,位置有关码使用的是绝对地址。

重定位的两种方法:

  1. 链接地址是Addr_A,拷贝到Addr_A去运行,此时链接地址和运行地址相等,程序可以正常运行。
  2. 链接地址是Addr_A,拷贝到Addr_B去运行,运行地址和链接地址就不一样了,这样在进行寻址就会出问题,解决办法就是使用位置无关码,对.rel.dyn的定位问题进行修复,就是为了解决该问题。

六、启动过程总结

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号