Gcc *.ld文件中有我不理解的内容

Gcc *.ld文件中有我不理解的内容,gcc,arm,gnu,ld,Gcc,Arm,Gnu,Ld,在带有ARM GCC的*.ld文件中有一些语句我无法理解 .init : { __initcall_start = .; KEEP(*(.initcall1.init)) KEEP(*(.initcall2.init)) KEEP(*(.initcall3.init)) KEEP(*(.initcall4.init)) KEEP(*(.initcall5.init)) KEEP(*(.initcall6.init)) __initcall_end

在带有ARM GCC的*.ld文件中有一些语句我无法理解

.init :
{
__initcall_start = .;
    KEEP(*(.initcall1.init))
    KEEP(*(.initcall2.init))
    KEEP(*(.initcall3.init))
    KEEP(*(.initcall4.init))
    KEEP(*(.initcall5.init))
    KEEP(*(.initcall6.init))
__initcall_end = .;
} >FLASH
我用记事本搜索了整个项目,值
initcall1
只出现在这个*.ld文件中

 E:\pos-orig\Gemini\system\sys_generic.ld (1 hit)
    Line 26:         KEEP(*(.initcall1.init))
什么是
initcall1
initcall2
。。。用来做什么

我如何理解
KEEP(*.initcall3.init))
名为
.initcall1.init
,…,
.initcall6.init
的节 所有输入文件都将在符号之间输出
\uu initcall\u start
和输出
.init
部分中的
\uu initcall\u end
,并且所有 将从垃圾收集中保留

什么是initcall1,initcall2。。。用来做什么

我如何理解“KEEP(*.initcall3.init))

这上面说 名为
.initcall1.init
,…,
.initcall6.init
的节 所有输入文件都将在符号之间输出
\uu initcall\u start
和输出
.init
部分中的
\uu initcall\u end
,并且所有 将从垃圾收集中保留

什么是initcall1,initcall2。。。用来做什么

我如何理解“KEEP(*.initcall3.init))


我想你错过了一个关键点。输入部分
initcallX.init
是按顺序排列的,因此放入initcall1.init中的任何内容都将位于initcall2.init之前,以此类推。因此,这是一个具有伪顺序的大数组。汇编程序和/或其他代码将遍历输出部分。否则,答案很好。可能代码/想法是从Linux偷来的,OPs POS项目没有使用所有的功能。我想你错过了一个关键点。输入部分
initcallX.init
是按顺序排列的,因此放入initcall1.init中的任何内容都将位于initcall2.init之前,以此类推。因此,这是一个具有伪顺序的大数组。汇编程序和/或其他代码将遍历输出部分。否则,答案很好。可能代码/想法是从Linux偷来的,OPs POS项目没有使用所有的功能。