链接脚本语言(LSL)

为了充分利用链接器,您可以编写一个脚本,其中包含有关目标处理器体系结构和定位信息的信息。该脚本的语言称为链接器脚本语言(LSL)。本章首先介绍LSL文件的结构。下一节包含LSL语法的摘要。在其余部分中,将解释链接器脚本语言的语义。

TASKING连接器是一个独立于目标的连接器/定位器,它可以同时连接和定位目标板上所有可用内核的所有程序。目标板可能具有任意的复杂性。一个简单的目标板可能包含一个标准处理器和一些执行一个任务的外部存储器。复杂的目标板可能包含多个标准处理器和dsp,并结合FPGA中加载的可配置ip核。每个核可以执行不同的程序,外部存储器可以由多个核共享。

LSL有两个目的。首先,它使您能够指定特定目标板和安装在板上的核心的特性(连接器感兴趣的特性)。其次,它使您能够指定节应该如何在内存中定位。

一、 链接器脚本文件的结构

Structure of a Linker Script File 

一个脚本文件由几个定义组成。定义可以以任何顺序出现。

体系结构定义(必需的)

本质上,体系结构定义描述了链接器应该如何将给定类型的核心的逻辑地址转换为物理地址。如果内核支持多个地址空间,那么对于每个空间,链接器必须知道如何执行这种转换。在这种情况下,物理地址是给定内部或外部总线上的偏移量。此外,体系结构定义包含了诸如(硬件)堆栈和中断向量表之类的项目信息。

该规范通常由Altium编写。Altium在include.lsl目录中提供LSL文件。除非您也修改了核心的硬件体系结构,否则不应该更改LSL文件的体系结构定义。如果LSL文件描述的是多核系统,那么体系结构定义必须适用于每种不同类型的核。

派生定义

派生定义描述了内部(片上)总线和存储系统的配置。基本上,它告诉链接器如何将架构定义中指定的总线上的偏移量转换为内部内存中的偏移量。除了一个或多个内核外,微控制器和dsp通常还有内部存储器和I/O子系统。这种芯片的设计称为衍生芯片。

Altium提供了支持的派生函数的LSL描述,以及“SFR文件”,这些文件提供了从C和汇编程序轻松访问l/O子系统中的寄存器的方法。当您构建ASIC或使用不受任务工具支持的派生产品时,您可能必须编写派生产品定义。

当您想要使用相同类型的多个核心时,您必须在派生定义中实例化这些核心,因为链接器只会为未使用的体系结构自动实例化单个核心。

处理器定义

处理器定义描述一个派生的实例。通常,处理器定义只实例化一个衍生物(单核处理器)。包含具有相同(同构)或不同(异构)体系结构的多个内核的处理器也可以通过在单独的处理器定义中实例化相同或不同类型的多个衍生品来描述。

内存和总线定义(可选)

内存和总线定义在派生定义的上下文中使用,以指定内部内存和片上总线。在版本规范的上下文中,存储器和总线定义用于定义外部(片外)存储器和总线。给定上述定义,连接器可以将逻辑地址转换为片内或片外存储器设备的偏移量。

版本规格

处理器定义、存储器和总线定义一起构成一个版本规范。LSL提供了语言结构来方便地描述单核和异构或同构的多核系统。该板规范描述了您的目标板的系统总线、内存设备、I/O子系统和链接器感兴趣的核心的所有特性。根据版本规格中提供的信息,链接器为每个核心提供链接器:

                        将逻辑地址转换为内存设备中的偏移量

                        在物理内存中定位节在定位时

                        维护整个系统内已使用和空闲物理内存的总体视图

Section布局定义(可选)

Section布局定义使您能够精确控制输入节的位置。提供的功能包括:能够将部分放置在给定的加载地址或运行时地址,以给定的顺序放置部分,以及覆盖代码和/或数据部分。在调用链接器时,在命令行上指定将在给定核心上运行的任务的对象文件(节)。链接器将同时链接并定位所有任务的所有部分。从节布局定义中,链接器可以推断出给定节在内存中的位置,根据电路板规格,连接器可以在定位节时推断出(仍然)可用的物理内存。

链接器脚本文件的框架

architecture architecture_name
{
 // Specification core architecture
}
derivative derivative_name
{
 // Derivative definition
}
processor processor_name
{
 // Processor definition
}
memory and/or bus definitions
section_layout space_name
{
 // section placement statements
}


二、 链接器脚本语言的语法

Syntax of the Linker Script Language 

LSL文档以UTF-8编码的文件形式存储,扩展名为.lsl。在处理LSL文件之前,链接器使用标准对其进行预处理C预处理器。接下来,链接器使用扫描器解析器解释LSL文件。最后,链接器使用在LSL文件中找到的信息来指导定位过程。

 
1.预处理

Preprocessing 

当链接器加载LSL文件时,链接器首先用c风格的预处理器处理它。因此,它会剥离C和C++注释。以#字符开头的行作为预处理器的命令。您可以使用标准的ISO C99预处理器指令,包括:

                                #include "file"
                                #include <file>

此时在LSL文件中预处理并包含文件文件。例如:<

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值