_bss_start定义Linux内核源码

时间:2013-07-08 13:38:37

标签: linux-kernel x86 linux-device-driver

我正在浏览Linux内核源代码,并在其中一个汇编文件中找到了_bss_start C varianle,但无法找到它在实际定义和初始化的位置。

看起来_bss_start是bss段的起始地址,但是在内核源代码中使用值初始化的位置和方式,我正在查看linux源码2.6.25。

我查看了文件asm-generic / section.h,其中定义如下

 extern char _bss_start[]

但如何定义_bss_start,它是用来初始化它的DS寄存器

1 个答案:

答案 0 :(得分:5)

__bss_start由链接器定义和初始化。它引用了图像的.bss section,其中包含静态分配的变量。

以下是定义这些符号的链接描述文件的精简示例:

.bss : {
    __bss_start = .;      /*< __bss_start references this position in the file */
    *(.bss)               /*< The actual contents of the section */
    *(COMMON)             /*< The actual contents of the section */
    _ebss = . ;           /*< _ebss references this position in the file */
}