重定向_UBoot之代码重定向

U-Boot的运行是否需要重定向取决于运行地址和链接地址。当在DDR中运行时,无需重定向,而在NORFLASH等启动设备中,则需要通过重定向将程序搬移到外部DDR空间。重定向利用位置无关代码,如adr、ldr等指令,并在board_init_f函数中完成DDR初始化。全球数据结构global_data在重定向中扮演关键角色。
摘要由CSDN通过智能技术生成

U-Boot是否要重定向,取决于其运行地址和链接地址是否相同。

01

链接、运行、加载地址

通常来说,当U-Boot运行于DDR时,无需重定向就可以运行起来。当U-Boot在NORFLASH、MMC、SPI FLASH等作为启动设备的存储介质中时,SoC内部的RAM空间通常无法满足U-Boot的需求,此时,需要U-Boot自身通过重定向功能实现程序的搬移。

下面三个比较关键的地址概念,分别是链接地址、运行地址、加载地址,在重定向的过程中起着非常重要的作用。链接地址是U-Boot重定向后的执行地址,若重定向后在DDR上运行,那么链接地址是DDR内存中的地址。二次重定向一般为了给kernel留出运行空间,习惯将U-Boot重定向到高端内存区。链接地址通过在include/configs/xxx.h中设置CONFIG_SYS_TEXT_BASE来实现。

fe6103a296ffec7667a2e4a213384096.png

05e1f19750bcf9bb1ddbb740a8a8f735.png

运行地址是U-Boot当前执行时的地址PC。假设U-Boot不需要重定向,那么运行地址一般也就时基于加载地址进行相应的偏移。若U-Boot需要重定向࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值