🗂
proc 関数リスト
cat /proc/cpuinfoを実行するとどの関数が呼ばれるのか?
proc_create系の関数で登録される。
cat /proc/cpuinfo の場合
grep proc_create * -r | grep cpuinfo
/fs/proc/cpuinfo.c
static int cpuinfo_open(struct inode *inode, struct file *file)
{
return seq_open(file, &cpuinfo_op);
}
static const struct proc_ops cpuinfo_proc_ops = {
.proc_flags = PROC_ENTRY_PERMANENT,
.proc_open = cpuinfo_open,
.proc_read_iter = seq_read_iter,
.proc_lseek = seq_lseek,
.proc_release = seq_release,
};
static int __init proc_cpuinfo_init(void)
{
proc_create("cpuinfo", 0, NULL, &cpuinfo_proc_ops);
return 0;
}
arch/x86/kernel/cpu/proc.c
const struct seq_operations cpuinfo_op = {
.start = c_start,
.next = c_next,
.stop = c_stop,
.show = show_cpuinfo,
};
show_cpuinfoに辿り着く。
メモリ系
grep proc_create * -r | grep buddy
mm/vmstat.c
proc_create_seq("buddyinfo", 0444, NULL, &fragmentation_op);
proc_create_seq("pagetypeinfo", 0400, NULL, &pagetypeinfo_op);
proc_create_seq("vmstat", 0444, NULL, &vmstat_op);
proc_create_seq("zoneinfo", 0444, NULL, &zoneinfo_op);
まとめると以下を実行します。
cat /proc/cpuinfo show_cpuinfo
cat /proc/buddyinfo pagetypeinfo_show
cat /proc/vmstat vmstat_show
cat /proc/zoneinfo zoneinfo_show
proc_createで検索すればいいことが分かった。
Discussion