Linux kernel 代码引用的/proc/PID/maps在哪里?
我需要观察哪些内核代码才能打印Linux kernel 代码引用的/proc/PID/maps在哪里?,linux-kernel,mmu,Linux Kernel,Mmu,我需要观察哪些内核代码才能打印/proc/PID/maps,但找不到这个。有人能告诉我这个代码在哪里吗?它是fs/proc/task\u mmu.c中的show\u pid\u map()函数(前提是您的系统使用mmu,这是大多数非嵌入式系统的情况) 一般来说,/proc/下的文件代码可以是fs/procfs下的原因。procfs代码可以在fs/proc/子目录中找到。如果打开fs/proc/base.c,可以找到两个非常相似的数组-tgid\u base\u stuff和tid\u base\
/proc/PID/maps
,但找不到这个。有人能告诉我这个代码在哪里吗?它是fs/proc/task\u mmu.c
中的show\u pid\u map()
函数(前提是您的系统使用mmu,这是大多数非嵌入式系统的情况)
一般来说,
/proc/
下的文件代码可以是fs/procfs
下的原因。procfs代码可以在fs/proc/
子目录中找到。如果打开fs/proc/base.c
,可以找到两个非常相似的数组-tgid\u base\u stuff
和tid\u base\u stuff
。它们分别为/proc/PID/
和/proc/PID/TID/
中的文件注册文件操作函数。所以你对第一个更感兴趣。找到注册“maps”
文件的文件,如下所示:
REG("maps", S_IRUGO, proc_pid_maps_operations),
因此,描述此文件上的文件操作的结构称为proc\u pid\u maps\u operations
。此函数在两个位置定义-fs/proc/task\u mmu.c
和fs/proc/task\u nommu.c
。实际使用哪一个取决于内核配置,但它很可能是第一个
在任务\u 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\u maps\u 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
(都在同一个文件中)