🗂

proc 関数リスト

2024/01/20に公開

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