关于bootloader链接脚本中的ALIGN关键字的解析
https://blog.csdn.net/btoh_workstation/article/details/27510869
最终结论:
1.ALIGN对齐在汇编文件中和链接脚本中都会涉及到:
在汇编文件中,是伪操作 .align x 实现的:表示2的x次幂个字节对齐;
在链接脚本中,ALIGN关键字:ALIGN(X)中的X表示多少个字节对齐。
2.X的取值也是有讲究的,必须是2的整数次幂。例如:填写1,2,4,8,16,32,64,....
3.在链接脚本当中,ALIGN主要是在程序链接时用来实现数据边界对齐功能:
什么是边界对齐,怎样对齐呢?
首先解释什么是边界对齐:
当有一块数据需要存放时,需要一个起始地址(存储空间的上边界),然后放数据,
放完后会有一个结束地址(存储空间的下边界);
然后是该怎样对齐?一般情况,上边界都是给定的,但是下边如何确定呢?
先看ALIGN(X)是多少字节对齐,再看上边界,然后就可以确定下边界。
下边界的确定有以下三种情况:
(1).如果字节对齐数是ALIGN(X);并且上边界地址小于等于X,
则下边界为:基地址+X
(2).如果字节对齐数是ALIGN(X);并且上边界地址大于X,则下边界为:
基地址+X*n ;n为多少呢?n=(上边界地址尾数%X的除数)+1
什么是基地址?其实是指链接脚本中最开始指定的地址的尾数变为零,
例如:0x33e0_0008 -> 基地址就是:0x33e0_0000
0x33e0_00F5 -> 基地址就是:0x33e0_00F0
PS:
ALIGN(X)中的X最好是大于等于4,因为32位的处理器最小就是4字节对齐;
如果X赋值为1,2,则也是使用的默认4字节对齐。
————————————————
版权声明:本文为CSDN博主「btoh_workstation」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/btoh_workstation/article/details/27510869
浙公网安备 33010602011771号