debugfs文件系统

可用下列的命令查看已经挂载的文件系统:
mount                // 查看当前系统中已挂载的文件系统
cat /etc/fstab       // 了解系统中所有定义的文件系统
lsblk                // 显示系统中的块设备信息
df -h                // 显示文件系统的磁盘空间使用情况,并包含已挂载的文件系统信息

 

命令在imx6ull上显示如下图所示:
0
 
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目录:
0
常用有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");
测试如下:
0
 
 
 
posted @ 2024-03-25 13:26  lethe1203  阅读(215)  评论(0编辑  收藏  举报