如何解读vmlinux.lds.S文件

如何解读vmlinux.lds.S文件,第1张

vmlinux.lds.S用于对ld的输出进行组版,这个文件的格式在ld.info手册中有详细的说明。vmlinu x.lds.S的主要目的是对输出文件中段进行排序,并定义相关的符号名,以下是简要注释。 /* ld script to make i386 Linux kernel * Written by Martin M...

下面是vmlinux.lds.S文件,我老是觉得晕晕的,有哪位大虾能解释一下或推荐一个有相关学习资料的站点?

/* ld script to make i386 Linux kernel

* Written by Martin Mares

*/

OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")

OUTPUT_ARCH(i386)

ENTRY(_start)

SECTIONS

{

. = PAGE_OFFSET_RAW + 0x100000

_text = ./* Text and read-only data */

.text : {

*(.text)

*(.fixup)

*(.gnu.warning)

} = 0x9090

.text.lock : { *(.text.lock) } /* out-of-line lock text */

.rodata : { *(.rodata) }

.kstrtab : { *(.kstrtab) }

. = ALIGN(16)/* Exception table */

__start___ex_table = .

__ex_table : { *(__ex_table) }

__stop___ex_table = .

__start___ksymtab = ./* Kernel symbol table */

__ksymtab : { *(__ksymtab) }

__stop___ksymtab = .

_etext = ./* End of text section */

.data : { /* Data */

*(.data)

CONSTRUCTORS

}

_edata = ./* End of data section */

. = ALIGN(8192)/* init_task */

.data.init_task : { *(.data.init_task) }

. = ALIGN(4096)/* Init code and data */

__init_begin = .

.text.init : { *(.text.init) }

.data.init : { *(.data.init) }

. = ALIGN(4096)

__init_end = .

. = ALIGN(32)

.data.cacheline_aligned : { *(.data.cacheline_aligned) }

. = ALIGN(4096)

.data.page_aligned : { *(.data.idt) }

__bss_start = ./* BSS */

.bss : {

*(.bss)

}

_end = .

/* Stabs debugging sections. */

.stab 0 : { *(.stab) }

.stabstr 0 : { *(.stabstr) }

.stab.excl 0 : { *(.stab.excl) }

.stab.exclstr 0 : { *(.stab.exclstr) }

.stab.index 0 : { *(.stab.index) }

.stab.indexstr 0 : { *(.stab.indexstr) }

.comment 0 : { *(.comment) }

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7218177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存