LKMLに投げたパッチ を修正している最中に debugfs を使いたくなる場面があったんですが *1、 debugfs の作成は早すぎるとサイレントに失敗するっぽいので最低限動くコードを残しておきます。
TL; DR
こんな感じのをファイル先頭に書くと動きます *2 。 詳細なAPIとかは debugfs のAPIドキュメンテーション を参考にしてください。
#include <linux/debugfs.h> u64 my_value = 0xbeef; static __init int setup_my_debugfs(void) { static struct dentry *dir; static struct dentry *file; dir = debugfs_create_dir("my_dir", NULL); debugfs_create_x64("my_value", 0400, dir, &my_value); return 0; } postcore_initcall(setup_my_debugfs);
いつ呼ぶと失敗するか
横着して kernel/nscommon.c の __ns_common_init() で ns->inum が NET_NS_INIT_INO になるタイミング *3 で debugfs_create_dir() を呼び出したが、/sys/kernel/debug 以下に当該ディレクトリが作られなかった。
ちゃんと確認してないんですが、たぶん何も printk せずに ERR_PTR を返したんじゃないかなあと思ってます *4 。 ただ本当はカーネルモジュールも呼び出しうる関数 *5 なので、サイレントにこけるってあんまよくないんじゃないかなあと思ってます。気が向いたらパッチ投げるかも。