1

在内核回溯中,单下划线的含义是什么,例如:

[   22.669572] [df425cf0] [c00085a8] show_stack+0x44/0x160 (unreliable)
    [   22.720393] [df425d20] [c00348d8] __might_sleep+0xfc/0x120
    [   22.758049] [df425d30] [c00ea764] kmem_cache_alloc_notrace+0x8c/0xc8
    [   22.798333] [df425d50] [c0098614] request_threaded_irq+0x78/0x1f8
    [   22.837834] [df425d90] [f16f694c] _interrupt_connect+0xc4/0x150 [kbde]
    [   22.878642] [df425db0] [f19b29e0] _ioctl+0x5ec/0x77c [ubde]
    [   22.916555] [df425e70] [f19b2100] _gmodule_ioctl+0x34/0x44 [ubde]
    [   22.956049] [df425e80] [c0107a00] vfs_ioctl+0xcc/0xec
    [   22.992383] [df425ea0] [c0107be8] do_vfs_ioctl+0x84/0x7e8
    [   23.029770] [df425f10] [c01083e0] sys_ioctl+0x94/0x108
    [   23.066372] [df425f40] [c0011648] ret_from_syscall+0x0/0x4
    [   23.104024] --- Exception: c01 at 0xf8ef4e0

我尝试在内核源代码中搜索 _interrupt_connect 和 _gmodule_ioctl 函数。我找不到他们。

4

2 回答 2

2

_interrupt_connect(),_ioctl_gmodule_ioctl只是函数,下划线只是这些函数名称的一部分。

你应该注意的是那些函数右边的[kbde]东西。[ubde]它们可能是内核模块名称。这些模块不是内核本身的一部分(它们是作为外部模块构建的)。您所说的功能基本上是这些模块的一部分。这就是为什么您无法在内核代码中找到这些函数的原因。

所以这些模块被加载到内核中(它们不是内置模块)。您应该寻找这些模块的来源。但是您可能会发现它们是专有的,在这种情况下将没有代码可用(除非您是该代码的作者/维护者之一)。

于 2015-05-25T21:28:59.197 回答
0

堆栈跟踪中的单个下划线没有任何特殊含义,它只是函数名的一部分。我无法在我的工作空间中找到它,因为它来自某个第三方内核模块 (kbde),而我的工作空间中没有其源代码。

于 2015-05-25T21:29:13.307 回答