通过使用分散加载机制,可以为链接器指定映像的内存映射。分散加载为您提供了对映像组建分组和位置的全面控制。分散加载可以用于简单映像,但它通常仅用于具有复杂内存映射的的映像,即多个区在加载和执行时分散在内存映射中。4 u h( y1 j1 S: i 加载域:就是编译之后得到的二进制文件烧写到rom中的这一段区域。包括只读的代码段和常量被称作RO段(ReadOnly);可读写的全局变量和静态变量被称作RW段(ReadWrite);RW段中要被初始化为零的变量被称为ZI段(ZeroInit)。) f# G) l4 T) w* y9 j6 a8 x# J 执行域:程序执行时的区域。比如:没有变动还是在ROM中RO段;被移到了RAM中的RW段和ZI段。; T" ] G- _5 D1 ^ j* \/ |* U 9 L0 Y9 r- @+ ~' }2 W; U 先看一下分散加载文件的内容: LR_IROM1 0x08000000 0x00080000 { ; 加载域:名字 + 地址 + 大小 ER_IROM1 0x08000000 0x00080000 { ; 执行域:名字 + 地址 + 大小7 [0 S7 A# D O* ~*.o (RESET, +First) ; RESET段(因此程序从RESET开始执行) *(InRoot$$Sections) ; __main的代码段(用于将加载域转移到执行域)* w+ r- ^7 e& v* l$ e8 S& i; x6 _ .ANY (+RO) ; 所有代码段. L; o, i3 }, S" u# s# a7 D. T }% e5 E; j2 z- n RW_RAM1 0x20000000 0x00010000 { ; 执行域:名字 + 地址 + 大小 .ANY (+RW +ZI) ; 所有RW段(.data)和ZI段(.bss) }' ~4 L9 J- ^$ ^$ B } 这一段的作用就是告诉链接器:按照以上的信息进行链接,__main也将根据这些信息进行转移。 # c" G# I) j4 H# J 转自http://blog.csdn.net/lushoumin/article/details/78885558 |
有链接吗
http://developer.arm.com/open-so ... in/gnu-rm/downloads