打印
[其他]

嵌入式.ld,.lsl等链接文件作用

[复制链接]
979|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-2-6 10:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
生成可执行文件的主要流程:预编译、编译(C—>汇编—>binary)、链接。

编译只是把各个.c和.s文件编译成对应的.o文件。然后需要链接器将各个.o文件链接为一个可执行文件。

.lsl,.ld文件:属于一种linkfile,规定如何把输入文件内的section放到输出文件,以及控制输出文件内各部分在程序地址空间内的布局。

.text:是程序代码段,用于存放函数代码

.data: 全局变量并且初始值不为0

.bss:未初始化的全局变量或者初始化为0的全局变量。

标准C语言的 section 前缀主要包括: .bss/.data/.rodata/.text。
英飞凌芯片对应的将数据划分为 near类型/far类型。对应的前缀为:

1)带 “z”的near类型数据:.zbss/.zdata/.zrodata
2)标准的 far 类型数据: .bss/.data/.rodata

16位系统中会有近指针,远指针。

near定义的标号表示段内近跳转,近调用的地址。near指针的长度是16位的,所以可指向的地址范围是64K字节,通常说near指针的寻址范围是64K。

far定义的标号表示段间远跳转,远调用的地址。far指针的长度是32位,含有一个16位的基地址和16位的偏移量,将基地址乘以16后再与偏移量相加,实际上far指针是20位,取值范围为0x00000~0xFFFFF。所以far指针的寻址范围是1M字节,超过了一个段64K的容量。

编译器将.c文件编译成了对应的.o文件后,每个.o文件中会包含了数量不同的段,.text段、.data段、.bss段、.vectors段、.ram_code段。链接器将各个.o文件中的代码按照不同的段,链接成一个文件。所有的.text链接到一起,所有的.data链接到一起,所有的.bss段链接到一起,所有的.vectors段链接到一起,所有的.ram_code段链接到一起。

ENTRY(_START) ,ENTRY语法说明,用户程序最先从START处开始运行,定义应用程序的入口点,相当于告诉连接器的启动地址,即输出文件中的第一条可执行指令,_START一般在.s文件定义。

Flash地址分配可以用链接脚本来控制,代码共分为三个部分,Tricore的APP,HSM的BootLoader和HSM的APP,三个工程的链接脚本要相互配合好,这样编译出来的代码不会互相覆盖。

例子:

代码内声明为Static类型的变量,其运行空间在RAM区域加载空间在ROM区域,编译后属性为.data/.bss,其运行空间可通过以下方式设定去运行地址与加载地址。

设定运行地址

group P_REW_DIS_TSK2MS (ordered, align = 4,  run_addr=P_REW_DIS_TSK2MS_ORG)
        {
            section "P_REW_DIS_TSK2MS" (size=P_REW_DIS_TSK2MS_LEN, attributes=r, fill=0x00)
            {
                select ".text.*.P_REW_DIS_TSK2MS.text";
            }
        }



设定加载地址

group P_REW_EXE_EXD (ordered, contiguous, align=4, fill=0, load_addr=P_REW_EXE_EXD_ORG)
        {
            group (ordered, contiguous, align=4)
            {
                section "P_REW_EXE_EXD" (size=P_REW_EXE_EXD_LEN, attributes=r, fill=0x00)
                {
                    select ".text.*.P_REW_EXE_EXD.text";
                }
            }
        }
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_43925467/article/details/135132702

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1360

主题

13960

帖子

8

粉丝