没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
5页
Table of Contents 1、代码启动过程简要分析 2、存储地址,运行地址,链接地址 2.1、存储地址 2.2、链接地址 2.3、运行地址 2.4、链接地址和运行地址的区别 3、位置有关码,位置无关码详细解释 4、代码重定位 4.1、重定位代码详解 1、代码启动过程简要分析 问题1:代码下载到哪里去? 数据手册上会有说明,位置不是我们想往哪里下载就往哪里下载的,下载错了启动的时候就找不到代码的位置在哪,一般是下载到如下存储设备中:1、内部自带的FLASH, 2、外扩NANDFLASH(EMMC), 3、外扩NORFLASH, 4、SD卡,(存储地址) 1、大部分单片机(stm32)
资源推荐
资源详情
资源评论
uboot 代码重定位(位置有关码)(存储地址,运行地址,链代码重定位(位置有关码)(存储地址,运行地址,链
接地址)接地址)
Table of Contents
1、代码启动过程简要分析
2、存储地址,运行地址,链接地址
2.1、存储地址
2.2、链接地址
2.3、运行地址
2.4、链接地址和运行地址的区别
3、位置有关码,位置无关码详细解释
4、代码重定位
4.1、重定位代码详解
1、代码启动过程简要分析、代码启动过程简要分析
问题问题1:代码下载到哪里去?:代码下载到哪里去?
数据手册上会有说明,位置不是我们想往哪里下载就往哪里下载的,下载错了启动的时候就找不到代码的位置在哪,一般是下
载到如下存储设备中:1、内部自带的FLASH, 2、外扩NANDFLASH(EMMC), 3、外扩NORFLASH, 4、SD卡,(存储地存储地
址址)
1、大部分单片机(stm32)是下载到内部自带FLASH中,起始地址是严格指定的(如0x08000000)
2、大部分运行安卓安卓或者linux的ARM一般是下载到SD卡卡或者外扩的FLASH((EMMC))中,然而在SD卡或者EMMC中的起始位
置是严格规定的(比如第0块开始存放,或者跳过一块,从第1块位置开始存放)
问题问题2:从哪个位置去加载代码,加载到哪里去运行?:从哪个位置去加载代码,加载到哪里去运行?
1、以上存储设备分两种,一种是可以直接运行代码的存储设备(内部自带FLASH、外扩NORFLASH),一种是不能直接寻
址运行代码的设备(SD卡,NANDFLASH、EMMC)
2、一般芯片都有启动引脚启动引脚,我们需要根据我们下载代码的位置来正确配置启动引脚的高低电平配置启动引脚的高低电平,这样上电才能正确启动代码
3、对于可以直接运行代码可以直接运行代码的存储设备,前期不需要加载代码前期不需要加载代码,而是直接从该设备的起始位置运行代码,至于后期是否需要加后期是否需要加
载代码到其它位置运行就看程序员的期望运行地址载代码到其它位置运行就看程序员的期望运行地址(链接脚本里面编写的链接地址链接地址),如果没啥期望(用编译软件默认的链接
地址,而编译软件默认的链接地址和实际运行地址都是一样的)那就不需要做任何拷贝代码动作,代码从头跑到尾(stm32等等
单片机之类的芯片就是这种情况单片机之类的芯片就是这种情况),如果程序员希望一部分代码在其他位置运行,就需要修改后期代码的链接地址而不是一直,如果程序员希望一部分代码在其他位置运行,就需要修改后期代码的链接地址而不是一直
系统默认地址,在前期代码中把后期代码拷贝到理想位置,然后长跳转到理想位置去运行(此情况如下:我们有时候觉得系统默认地址,在前期代码中把后期代码拷贝到理想位置,然后长跳转到理想位置去运行(此情况如下:我们有时候觉得
FLASH速度太慢,需要把代码拷贝到速度太慢,需要把代码拷贝到RAM中运行)(代码重定位)中运行)(代码重定位)
4、对于不可以直接运行代码不可以直接运行代码的存储设备,前期芯片内部的固件会把一部分代码加载到默认的内存位置(内部前期芯片内部的固件会把一部分代码加载到默认的内存位置(内部RAM)运行)运行,为
什么是一部分呢,因为此情况一般是代码很大(比如跑linux系统)内部RAM资源有限,所以只能加载一部分代码到内部
RAM,另外一部分大多数代码就需要加载到外扩的RAM中运行,所以程序员自己编写链接脚本(链接地址链接地址)希望把后面的一
部分代码能加载到他期望的地址去运行,并且程序员编写前期运行的代码(位置无关码位置无关码)中包含拷贝函数,拷贝函数把后一部
分代码拷贝到理想位置(代码重定位代码重定位),在运行完前期代码后实现长跳转长跳转,,跳转到理想的链接位置去运行
总结:总结:
从哪里加载代码根据启动引脚指定,加载到哪里运行代码分前期和后期,前期运行基本都是加载到默认地方运行,后期代码根从哪里加载代码根据启动引脚指定,加载到哪里运行代码分前期和后期,前期运行基本都是加载到默认地方运行,后期代码根
据自己需求位置来加载运行(大部分单片机还是系统默认,大部分跑大型系统的据自己需求位置来加载运行(大部分单片机还是系统默认,大部分跑大型系统的ARM后期需要进行代码重定位)后期需要进行代码重定位)
2、存储地址,运行地址,链接地址、存储地址,运行地址,链接地址
2.1、存储地址、存储地址
就是代码下载到存储器(FLASH)的位置
2.2、链接地址、链接地址
这个地址就是链接脚本里面指定的代码的运行位置(程序员期望的运行地址)(程序员期望的运行地址)
资源评论
weixin_38663837
- 粉丝: 5
- 资源: 946
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功