Rockchip RK3399Pro datasheet: Expressions and operators in LDS

需积分: 45 50 下载量 129 浏览量 更新于2024-08-06 收藏 534KB PDF 举报
在Linux开发中,理解表达式操作符对于链接脚本(linker scripts)至关重要,尤其是在使用Rockchip RK3399Pro处理器的系统中。链接器脚本,如以".lds"为扩展名的文件,负责指导编译器如何将源代码中的各个部分整合成最终可执行文件。这部分内容主要关注于C语言风格的表达式操作符及其在链接过程中的应用。 首先,表达式操作符遵循C语言的优先级规则,包括左结合顺序:逻辑非(!)、减号(-)、位NOT(~)具有最高优先级,接着是乘法(*)、除法(/)、取模(%),然后是加法(+)和减法(-),之后是右移运算符(>>)。赋值运算符("=")和位与(&)排在后面,最后是位或(|)。这种优先级划分确保了在链接脚本中对不同操作的正确处理。 链接器的基本概念包括以下几个方面: 1. **链接过程**:每个链接过程都是由链接脚本控制的,它定义了输入section(目标文件中的部分)如何在输出文件(可执行文件)中的地址空间布局。链接脚本不仅管理section的合并,还可以通过连接命令进行额外定制。 2. **默认连接脚本**:链接器有内置的默认连接脚本,可以通过`ld --verbose`选项查看。`-r`和`-N`选项可以影响这个默认行为。 3. **自定义链接脚本**:`-T`选项允许用户指定自己的链接脚本,这将覆盖默认脚本。开发者可以根据项目需求编写更细致的布局规则。 4. **输入和输出文件**:目标文件(包括可执行文件)是链接的基础,它们通常是ELF格式。section在这些文件中的存在,如其名字、大小以及内容(loadable或allocatable),对最终应用程序的行为至关重要。 5. **section类型**:loadable section在运行时会被加载到进程地址空间,而allocatable section虽然不包含实际数据,但在运行时会预留一定大小的内存区域,可能需要清零。非loadable或allocatable section通常用于存储调试信息。 6. **地址管理**:每个可加载或可分配的output section都有VMA(虚拟内存地址)和LMA(加载内存地址),通常二者相同。在目标文件中,这两个地址用于确定section在程序执行期间的实际存储位置。 掌握这些表达式操作符和链接脚本的使用,有助于开发者更好地控制程序的内存布局,优化性能,并确保在Rockchip RK3399Pro等嵌入式系统中的高效链接。