U-boot2018.11源码分析-linker list数据结构

本篇博客分析U-boot2018.11中重要的数据存储方式 linker list。

 

普通的双链表由C语言编译器最后编译到程序的数据段中,与程序的其他数据存放在一起。在U-boot中,定义了Linker list这种结构,linker list结构的数据存放特定的段中,不与程序的其他数据存放在一起。

背景知识

C语言的编译器和链接器一起将C语言源文件程序,编译链接成最终的目标程序。每个C源程序经编译器编译,生成Object中间文件,这个文件存放着源文件的text段,data段等,还存放C文件导出和导入的符号表。 链接器将多个源文件的text段和data段合并到目标文件的text段和data段。

自定义输出段

除了默认的text段存放指令,data段存放数据外,还可以告诉链接器生成我们自己定义的段。看下面的链接器脚本片段:

#include <config.h>
#include <asm/psci.h>

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
	. = 0x00000000;

	. = ALIGN(4);
	.text :
	{
		*(.__image_copy_start)
		*(.vectors)
		CPUDIR/start.o (.text*)
	}
...

	. = ALIGN(4);
	.u_boot_list : {
		KEEP(*(SORT(.u_boot_list*)));
	}

	...
}

通过上面的链接器脚本,我们告诉链接器将自定义一个段u_boot_list,将所有Object中间文件的所有u_boot_list段的内容,放入到该段中。

设置变量、函数的存放段

一般情况下编译C源文件,编译器会自动将变量或函数存放到适当的段中。当我们想将变量,函数放到特定的段中,如何告诉编译器这样做呢?

在GNU C/C++编译器中&#x

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值