为什么要引入重定位
个人理解是程序中有些代码需要在指定的地址才能成功的执行。所以需要把代码重定位到指定的地址运行代码段。
什么是重定位
重定位就是在代码初始地址处 执行一段于位置无关的代码段(PIC位置无关码),这段代码的作用是把从运行地址处把整个程序拷贝或者说是镜像一份到链接地址处,执行完成这个拷贝后使用一句长跳转指令跳转到链接地址处执行同一个函数,实现代码的重定位。
重定位操作步骤方法
- 通过链接脚本将代码链接到需要重定义的地址 如0xd0024000
- bin程序文件下载到BL1 start address,程序最初始的地址0xd0020010
- 通过bin程序中代码前段少量的位置无关码执行将整个程序复制搬移到重定义的地址0xd0024000处
- 使用一个长跳转指令跳转到0xd0024000处的代码继续执行,重定位完成