Scatter文件分析

本文介绍了Scatter文件相关知识。编译后映像文件各段首尾相连,Scatter可将特定段加载到分散内存区域。存在执行域和加载域两类域,Scatter本身不能‘解压缩’映像,编译器读入后生成启动代码实现加载,还说明了root region的相关要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转《http://blog.sina.com.cn/s/blog_875c3b2f0106nohz.html》

scatter基本点:

  1. 编译后输出的映像文件中各段是首尾相连的,中间没有空闲的区域,它们的先后关系是根据链接时参数的先后次序决定的 armlinker -file1.o file2.o ……
  2. scatter用于将编译后的映像文件中的特定段加载到多个分散的指定内存区域
  3. 有2类域region:执行域(execution region,一般是ram区域)和加载域(load region,一般是rom区域)
  4. 加载域:就是编译之后得到的二进制文件烧写到rom中的这一段区域,所有的代码RO、预定义变量RW、堆栈之类清不清空无关紧要的大片内存区域ZI,都包括在其中
  5. 执行域:就是把加载域进行‘解压缩’后的样子。比如:RO没有变动还是在ROM中,RW被移到了SRAM中,而ZI被放置在SDRAM中
  6. scatter本身并不能对映像实现‘解压缩’,编译器读入scatter文件之后会根据其中的各种地址生成启动代码,实现对映像的加载,而这一段代码就是* (InRoot$$Sections)它是__main()的一部分。这就是在汇编启动代码的最后跳转到__main() 而不是跳向main()的原因之一。
  7. 起始地址与加载域重合的执行域成为root region,* (InRoot S e c t i o n s ) 必 须 放 在 这 个 执 行 域 中 , 否 则 链 接 的 时 候 会 报 错 。 ∗ ( + R O ) 包 含 了 ∗ ( I n R o o t Sections)必须放在这个执行域中,否则链接的时候会报错。*(+RO)包含了* (InRoot Sections)(+RO)(InRootSections),所以如果在root region中用到了*(+RO)可以不再指定*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值