Documentation/translations/zh_CN/filesystems/debugfs.rst

Source file repositories/reference/linux-study-clean/Documentation/translations/zh_CN/filesystems/debugfs.rst

File Facts

System
Linux kernel
Corpus path
Documentation/translations/zh_CN/filesystems/debugfs.rst
Extension
.rst
Size
9779 bytes
Lines
222
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: operation-table or driver-model contract
Status
pattern implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

const struct file_operations *fops);

在这里,name是要创建的文件的名称,mode描述了访问文件应具有的权限,parent指向
应该保存文件的目录,data将存储在产生的inode结构体的i_private字段中,而fops是
一组文件操作函数,这些函数中实现文件操作的具体行为。至少,read()和/或
write()操作应提供;其他可以根据需要包括在内。同样的,返回值将是指向创建文件
的dentry指针,错误时返回ERR_PTR(-ERROR),系统不支持debugfs时返回值为ERR_PTR
(-ENODEV)。创建一个初始大小的文件,可以使用以下函数代替::

    struct dentry *debugfs_create_file_size(const char *name, umode_t mode,
				struct dentry *parent, void *data,
				const struct file_operations *fops,
				loff_t file_size);

file_size是初始文件大小。其他参数跟函数debugfs_create_file的相同。

在许多情况下,没必要自己去创建一组文件操作;对于一些简单的情况,debugfs代码提供
了许多帮助函数。包含单个整数值的文件可以使用以下任何一项创建::

    void debugfs_create_u8(const char *name, umode_t mode,
			   struct dentry *parent, u8 *value);
    void debugfs_create_u16(const char *name, umode_t mode,
			    struct dentry *parent, u16 *value);
    struct dentry *debugfs_create_u32(const char *name, umode_t mode,
				      struct dentry *parent, u32 *value);
    void debugfs_create_u64(const char *name, umode_t mode,
			    struct dentry *parent, u64 *value);

这些文件支持读取和写入给定值。如果某个文件不支持写入,只需根据需要设置mode
参数位。这些文件中的值以十进制表示;如果需要使用十六进制,可以使用以下函数
替代::

    void debugfs_create_x8(const char *name, umode_t mode,
			   struct dentry *parent, u8 *value);
    void debugfs_create_x16(const char *name, umode_t mode,
			    struct dentry *parent, u16 *value);
    void debugfs_create_x32(const char *name, umode_t mode,
			    struct dentry *parent, u32 *value);
    void debugfs_create_x64(const char *name, umode_t mode,
			    struct dentry *parent, u64 *value);

这些功能只有在开发人员知道导出值的大小的时候才有用。某些数据类型在不同的架构上
有不同的宽度,这样会使情况变得有些复杂。在这种特殊情况下可以使用以下函数::

    void debugfs_create_size_t(const char *name, umode_t mode,
			       struct dentry *parent, size_t *value);

不出所料,此函数将创建一个debugfs文件来表示类型为size_t的变量。

同样地,也有导出无符号长整型变量的函数,分别以十进制和十六进制表示如下::

    struct dentry *debugfs_create_ulong(const char *name, umode_t mode,
					struct dentry *parent,
					unsigned long *value);
    void debugfs_create_xul(const char *name, umode_t mode,
			    struct dentry *parent, unsigned long *value);

布尔值可以通过以下方式放置在debugfs中::

    struct dentry *debugfs_create_bool(const char *name, umode_t mode,
				       struct dentry *parent, bool *value);


读取结果文件将产生Y(对于非零值)或N,后跟换行符写入的时候,它只接受大写或小写
值或1或0。任何其他输入将被忽略。

同样,atomic_t类型的值也可以放置在debugfs中::

    void debugfs_create_atomic_t(const char *name, umode_t mode,
				 struct dentry *parent, atomic_t *value)

Annotation

Implementation Notes