Android 在 user space 可以在 run-time 的時候透過 adb shell getprop/setprop 來動態讀寫變數。所以,kernel 開發的過程中,我在想有沒有類似的東西讓我可以動態的存取變數,這樣 debug 會方便許多。
於是,發現了 Linux 其實已經有提供一個 light-weight 的 filesystem 叫做 Debugfs, 正好可以滿足我的需求,紀錄一下使用方式。
Enable Debug FileSystem
Kernel hacking [*] Debug filesystem mount -t debugfs none /sys/kernel/debug // Do this manually
Include header
#include <linux/debugfs.h>
Call the API to create dir and file, then put them into the module init func
struct dentry *debugfs_create_dir(const char *name, struct dentry *parent); struct dentry *debugfs_create_u8(const char *name, mode_t mode, struct dentry *parent, u8 *value) static struct dentry *dbg_entry_dir, *dbg_entry_test; u8 dbg_print_test = 0; static int debugfs_init(void) { dbg_entry_dir = debugfs_create_dir("test_debugfs", NULL); if (!dbg_entry_dir) return -1; dbg_entry_test = debugfs_create_u8("print_test", 0644, dbg_entry_dir, &dbg_print_test); if (!dbg_entry_test) return -1; return 0; }
Remember to remove after module remove
void debugfs_remove(struct dentry *dentry) debugfs_remove(dbg_entry_dir); // Put this in module remove func
Use the filenode you create to debug
adb shell cat sys/kernel/debug/test_debugfs/print_test adb shell; echo 1 > sys/kernel/debug/test_debugfs/print_test
Reference
-- EOF --
No comments:
Post a Comment