代码在哪里引用/ proc / PID / maps?

时间:2015-05-15 13:43:09

标签: linux-kernel mmu

我要观察内核代码以打印/proc/PID/maps,但无法找到它。谁能告诉我这段代码的位置

2 个答案:

答案 0 :(得分:6)

procfs代码可以在fs/proc/子目录中找到。如果您打开fs/proc/base.c,则可以找到两个非常相似的数组 - tgid_base_stufftid_base_stuff。它们都分别为/proc/PID//proc/PID/TID/内的文件注册文件操作函数。所以你对第一个更感兴趣。找到注册"maps"文件的文件,它看起来像这样:

REG("maps",       S_IRUGO, proc_pid_maps_operations),

因此,描述此文件上的文件操作的结构称为proc_pid_maps_operations。此功能在两个位置定义 - fs/proc/task_mmu.cfs/proc/task_nommu.c。实际使用哪一个取决于你的内核配置,但它很可能是第一个。

task_mmu.c内,您可以找到结构定义:

const struct file_operations proc_pid_maps_operations =
{
    .open       = pid_maps_open,
    .read       = seq_read,
    .llseek     = seq_lseek,
    .release    = proc_map_release,
};

因此,当打开/proc/PID/maps时,内核将使用pid_maps_open函数,该函数注册另一组操作:

static const struct seq_operations proc_pid_maps_op = {
    .start  = m_start,
    .next   = m_next,
    .stop   = m_stop,
    .show   = show_pid_map
};

所以你对show_pid_map函数感兴趣,show_map函数只调用show_map_vma函数,而函数调用CREATE PROCEDURE [dbo].[uspGetSequentialGuid] AS DECLARE @SequentialGuids as Table ( SequentialGuid uniqueidentifier DEFAULT NEWSEQUENTIALID() PRIMARY KEY,InitDate datetime ) BEGIN INSERT INTO @SequentialGuids(InitDate) Values(GETDATE()); END SELECT SequentialGuid from @SequentialGuids GO (所有函数都在同一个文件中)。

答案 1 :(得分:2)

这是show_pid_map()中的fs/proc/task_mmu.c函数(假设您的系统使用MMU,大多数非嵌入式系统就是这种情况)。

一般情况下,/proc/下的文件代码可以归结为fs/procfs