1 .. SPDX-License-Identifier: GPL-2.0 2 3 .. include:: ../disclaimer-zh_CN.rst 4 5 :Original: Documentation/filesystems/debugfs.r 6 7 ======= 8 Debugfs 9 ======= 10 11 译者 12 :: 13 14 中文版维护者: 罗楚成 Chuche< 15 中文版翻译者: 罗楚成 Chuche< 16 中文版校译者: 罗楚成 Chuchen< 17 18 19 20 版权所有2020 罗楚成 <luochucheng@vivo.co 21 22 23 Debugfs是内核开发人员在用户空间获 24 信息。也不像sysfs,具有严格的“每 25 人员可以在这里放置他们想要的任 26 从理论上讲,debugfs导出文件的时候 27 简单。即使是debugfs接口,也最好根 28 29 30 Debugfs通常使用以下命令安装:: 31 32 mount -t debugfs none /sys/kernel/debug 33 34 (或等效的/etc/fstab行)。 35 debugfs根目录默认仅可由root用户访 36 和“ mode”挂载选项。请注意,debug 37 38 使用debugfs的代码应包含<linux/debugfs. 39 一组debugfs文件:: 40 41 struct dentry *debugfs_create_dir(const ch 42 43 如果成功,此调用将在指定的父目 44 则会在debugfs根目录中创建。创建目 45 该dentry结构体的指针可用于在目录 46 (-ERROR)返回值表明出错。如果返 47 支持的情况下构建的,并且下述函 48 49 在debugfs目录中创建文件的最通用方 50 51 struct dentry *debugfs_create_file(const c 52 struct 53 const s 54 55 在这里,name是要创建的文件的名称 56 应该保存文件的目录,data将存储在 57 一组文件操作函数,这些函数中实 58 write()操作应提供;其他可以根 59 的dentry指针,错误时返回ERR_PTR(-ER 60 (-ENODEV)。创建一个初始大小的文 61 62 struct dentry *debugfs_create_file_size(co 63 struct dentry 64 const struct f 65 loff_t file_si 66 67 file_size是初始文件大小。其他参数 68 69 在许多情况下,没必要自己去创建 70 了许多帮助函数。包含单个整数值 71 72 void debugfs_create_u8(const char *name, u 73 struct dentry *pare 74 void debugfs_create_u16(const char *name, 75 struct dentry *par 76 struct dentry *debugfs_create_u32(const ch 77 struct d 78 void debugfs_create_u64(const char *name, 79 struct dentry *par 80 81 这些文件支持读取和写入给定值。 82 参数位。这些文件中的值以十进制 83 替代:: 84 85 void debugfs_create_x8(const char *name, u 86 struct dentry *pare 87 void debugfs_create_x16(const char *name, 88 struct dentry *par 89 void debugfs_create_x32(const char *name, 90 struct dentry *par 91 void debugfs_create_x64(const char *name, 92 struct dentry *par 93 94 这些功能只有在开发人员知道导出 95 有不同的宽度,这样会使情况变得 96 97 void debugfs_create_size_t(const char *nam 98 struct dentry * 99 100 不出所料,此函数将创建一个debugfs 101 102 同样地,也有导出无符号长整型变 103 104 struct dentry *debugfs_create_ulong(const 105 struct 106 unsign 107 void debugfs_create_xul(const char *name, 108 struct dentry *par 109 110 布尔值可以通过以下方式放置在debu 111 112 struct dentry *debugfs_create_bool(const c 113 struct 114 115 116 读取结果文件将产生Y(对于非零值 117 值或1或0。任何其他输入将被忽略 118 119 同样,atomic_t类型的值也可以放置 120 121 void debugfs_create_atomic_t(const char *n 122 struct dentry 123 124 读取此文件将获得atomic_t值,写入 125 126 另一个选择是通过以下结构体和函 127 128 struct debugfs_blob_wrapper { 129 void *data; 130 unsigned long size; 131 }; 132 133 struct dentry *debugfs_create_blob(const c 134 struct 135 struct 136 137 读取此文件将返回由指针指向debugfs 138 作为一种返回几行(静态)格式化 139 似乎在主线中没有任何代码这样做 140 所有文件是只读的。 141 142 如果您要转储一个寄存器块(在开 143 到主线中。Debugfs提供两个函数:一 144 插入一个顺序文件中:: 145 146 struct debugfs_reg32 { 147 char *name; 148 unsigned long offset; 149 }; 150 151 struct debugfs_regset32 { 152 struct debugfs_reg32 *regs; 153 int nregs; 154 void __iomem *base; 155 }; 156 157 struct dentry *debugfs_create_regset32(con 158 struct de 159 struct de 160 161 void debugfs_print_regs32(struct seq_file 162 int nregs, void __iom 163 164 “base”参数可能为0,但您可能需 165 名称(宏)是寄存器块在基址上的 166 167 如果要在debugfs中转储u32数组,可以 168 169 void debugfs_create_u32_array(const char 170 struct dentry *parent, 171 u32 *array, u32 elemen 172 173 “array”参数提供数据,而“elements 174 大小无法更改。 175 176 有一个函数来创建与设备相关的seq_ 177 178 struct dentry *debugfs_create_devm_seqfile( 179 const char *na 180 struct dentry 181 int (*read_fn) 182 void * 183 184 “dev”参数是与此debugfs文件相关的 185 打印seq_file内容的时候被回调。 186 187 还有一些其他的面向目录的函数:: 188 189 struct dentry *debugfs_rename(struct dentr 190 struct dentr 191 struct dentr 192 const char * 193 194 struct dentry *debugfs_create_symlink(cons 195 stru 196 cons 197 198 调用debugfs_rename()将为现有的debugfs 199 函数调用之前不能存在;返回值为o 200 debugfs_create_symlink()创建符号链接 201 202 所有debugfs用户必须考虑的一件事是 203 204 debugfs不会自动清除在其中创建的任 205 情况下卸载模块,结果将会遗留很 206 用户-至少是那些可以作为模块构建 207 所有文件和目录。一份文件可以通 208 209 void debugfs_remove(struct dentry *dentry) 210 211 dentry值可以为NULL或错误值,在这种 212 213 很久以前,内核开发者使用debugfs时 214 文件都可以被清理掉。但是,现在d 215 216 void debugfs_remove_recursive(struct dentr 217 218 如果将对应顶层目录的dentry传递给 219 220 注释: 221 [1] http://lwn.net/Articles/309298/
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.