可用下列的命令檢視已經掛載的檔案系統:
mount // 檢視當前系統中已掛載的檔案系統 cat /etc/fstab // 瞭解系統中所有定義的檔案系統 lsblk // 顯示系統中的塊裝置資訊 df -h // 顯示檔案系統的磁碟空間使用情況,幷包含已掛載的檔案系統資訊
命令在imx6ull上顯示如下圖所示:
debugfs的相關操作函式:
1. 建立和銷燬檔案
- debugfs_create_file(): 用於在 debugfs 中建立一個新的檔案。
- debugfs_create_u32(), debugfs_create_u64(): 用於建立一個包含 32 位或 64 位整數的檔案。
- debugfs_create_bool(): 用於建立一個布林型別的檔案。
2. 建立目錄
- debugfs_create_dir(): 用於在 debugfs 中建立一個新的目錄。
3. 讀寫檔案內容
- simple_read_from_buffer(), simple_write_to_buffer(): 用於讀取和寫入檔案的內容。
4. 註冊和登出
- debugfs_create_regset32(), debugfs_create_regset64(): 用於建立一個暫存器集合,允許使用者空間讀寫核心暫存器的值。
- debugfs_remove(): 用於從 debugfs 中刪除檔案或目錄。
5. 其他
- debugfs_create_blob(): 用於建立一個二進位制資料的檔案。
- debugfs_create_symlink(): 用於建立一個符號連結。
debugfs檔案系統掛載:
mount debugfs /sys/kernel/debug
debugfs目錄:
常用有clk、gpio等
debugfs是為了除錯核心而存在的一個檔案系統,與sys、proc不同點如下:
1、procfs 主要用於提供有關當前執行程序和系統資訊的訪問。透過在 /proc 目錄下檢視和讀取對應的檔案,可以獲取有關程序、記憶體、CPU 和其他系統資訊的詳細資料。
2、sysfs 提供了對裝置、匯流排和驅動程式的資訊的訪問。它通常用於管理和配置系統中的硬體裝置,包括 CPU、記憶體、匯流排、裝置驅動等。
3、debugfs 提供了用於除錯核心和驅動程式的介面,開發人員可以使用它來訪問和修改核心中的除錯資訊和引數。
測試demo:
#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/debugfs.h> #include <linux/uaccess.h> #include <linux/slab.h> #define DEBUGFS_DIR "example_debugfs" #define DEBUGFS_FILE "example_file" static struct dentry *debugfs_dir; static struct debugfs_blob_wrapper blob_data; static ssize_t example_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos) { return simple_read_from_buffer(buffer, count, ppos, blob_data.data, blob_data.size); } static ssize_t example_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos) { return simple_write_to_buffer(blob_data.data, blob_data.size, ppos, buffer, count); } static const struct file_operations example_fops = { .read = example_read, .write = example_write, }; static int __init debugfs_demo_init(void) { debugfs_dir = debugfs_create_dir(DEBUGFS_DIR, NULL); if (!debugfs_dir) { pr_err("Failed to create debugfs directory\n"); return -ENOMEM; } blob_data.data = kmalloc(256, GFP_KERNEL); if (!blob_data.data) { pr_err("Failed to allocate memory for blob data\n"); return -ENOMEM; } blob_data.size = 256; debugfs_create_blob(DEBUGFS_FILE, 0644, debugfs_dir, &blob_data); pr_info("Debugfs demo module loaded\n"); return 0; } static void __exit debugfs_demo_exit(void) { debugfs_remove_recursive(debugfs_dir); kfree(blob_data.data); pr_info("Debugfs demo module unloaded\n"); } module_init(debugfs_demo_init); module_exit(debugfs_demo_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name");
測試如下: