Linux kernel 在/proc/kallsyms(内核4.5.4-1-ARCH)中找不到init_任务符号

Linux kernel 在/proc/kallsyms(内核4.5.4-1-ARCH)中找不到init_任务符号,linux-kernel,symbols,Linux Kernel,Symbols,我正在尝试查找线程的task\u struct的地址。首先,我需要得到init\u task的task\u struct的地址,然后我迭代整个列表,最后得到特定线程的task\u struct。可以通过以下命令从/proc/kallsyms轻松获取init_任务的task_结构 grep“\”/proc/kallsyms 当我使用较旧的内核版本(3.12)时,这就起作用了。但当我切换到新版本(4.5)时,这个想法一开始就失败了。因为符号init_task从/proc/kallsyms中消失。但是

我正在尝试查找线程的
task\u struct
的地址。首先,我需要得到
init\u task
task\u struct
的地址,然后我迭代整个列表,最后得到特定线程的
task\u struct
。可以通过以下命令从
/proc/kallsyms
轻松获取
init_任务的
task_结构

grep“\”/proc/kallsyms


当我使用较旧的内核版本(3.12)时,这就起作用了。但当我切换到新版本(4.5)时,这个想法一开始就失败了。因为符号
init_task
/proc/kallsyms
中消失。但是当我检查源代码时,我可以看到符号
init_task
已导出()。为什么它不显示在
/proc/kallsyms
中?或者有没有其他方法可以从用户空间程序中获取
init_task
的地址

尝试使用
CONFIG\u KALLSYMS\u ALL
选项集编译。如果没有它,
kallsyms
似乎只包含
.text
init.text
部分中的符号:,

尝试使用
CONFIG\u kallsyms\u ALL
选项集进行编译。没有它,
kallsyms
似乎只包含
.text
init.text
部分的符号:,

您的机器的体系结构是什么?有可能是IA64吗?另外,请查看内核
.CONFIG
中的
CONFIG\u ARCH\u INIT\u TASK
是否设置为
y
。否,我的机器是x86\u 64。我当前版本(4.5)的内核配置文件没有
config\u ARCH\u INIT\u TASK
选项。我还检查了旧内核版本(3.12)的
.config
文件,它导出了
init_task
符号,也没有这样的选项。问题似乎不是因为
.config
文件-:((你能在你的
.config
中为新内核检查下两个选项吗:
config\u UNUSED\u SYMBOLS
TRIM\u UNUSED\u KSYMS
?它们中的一些不太可能被启用,但是如果是的话——这可能是原因。是的,新内核有
config\u UNUSED\u SYMBOLS=y
,但是没有找到
TRIM\u UNUSED\u KSYMS
选项。对我来说理解,启用
CONFIG_UNUSED_SYMBOLS
选项将导出未使用的符号,这意味着如果未使用
init_任务
,它将被导出。因此,这似乎不是原因。或者我误解了吗?是的,您的理解是正确的。我只看到了您丢失
init_任务()
symbol:1.如果
CONFIG\u ARCH\u INIT\u TASK=y
2.
CONFIG\u TRIM\u UNUSED\u KSYMS=y
并且内核中没有使用符号。可能还有其他机制可以去除未使用的符号,但我不知道。您的机器的体系结构是什么?有没有可能是IA64?另外,看看
CONFIG\u ARCH\INIT_TASK
在内核
.config
中设置为
y
。不,我的机器是x86_64。我当前版本(4.5)的内核配置文件没有
config_ARCH_INIT_TASK
选项。我还检查了旧内核版本(3.12)的
.config
文件其中导出了
init_task
符号,也没有这样的选项。问题似乎不是因为
.config
文件-:((你能在你的
.config
中为新内核检查下两个选项吗:
config\u UNUSED\u SYMBOLS
TRIM\u UNUSED\u KSYMS
?它们中的一些不太可能被启用,但是如果是的话——这可能是原因。是的,新内核有
config\u UNUSED\u SYMBOLS=y
,但是没有找到
TRIM\u UNUSED\u KSYMS
选项。对我来说理解,启用
CONFIG_UNUSED_SYMBOLS
选项将导出未使用的符号,这意味着如果未使用
init_任务
,它将被导出。因此,这似乎不是原因。或者我误解了吗?是的,您的理解是正确的。我只看到了您丢失
init_任务()
symbol:1.如果
CONFIG\u ARCH\u INIT\u TASK=y
2.
CONFIG\u TRIM\u UNUSED\u KSYMS=y
并且在内核中没有使用符号。可能还有其他机制可以去除未使用的符号,但我不知道。