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来实现。


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

被折叠的 条评论
为什么被折叠?



