{"id":16503,"date":"2024-11-18T16:01:42","date_gmt":"2024-11-18T08:01:42","guid":{"rendered":"https:\/\/fwq.ai\/blog\/16503\/"},"modified":"2024-11-18T16:01:42","modified_gmt":"2024-11-18T08:01:42","slug":"linux%e9%a9%b1%e5%8a%a8-debugfs%e6%8e%a5%e5%8f%a3%e5%88%9b%e5%bb%ba","status":"publish","type":"post","link":"https:\/\/fwq.ai\/blog\/16503\/","title":{"rendered":"Linux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa"},"content":{"rendered":"<p style=\"margin-bottom: 0px;padding-top: 8px;padding-bottom: 8px;max-width: 100%;letter-spacing: 0.544px;font-size: 16px;font-family:\"><span style=\"max-width: 100%;font-size: 14px;font-family:\">\u70b9\u51fb\u4e0a\u65b9<\/span><span style=\"max-width: 100%;font-size: 14px;font-family:\"><strong>\u201c\u5d4c\u5165\u5f0fLinux\u5145\u7535\u7ad9\u201d<\/strong><\/span><span style=\"max-width: 100%;font-size: 14px;font-family:\">\uff0c\u9009\u62e9<\/span><strong><span style=\"max-width: 100%\">\u201c\u7f6e\u9876\/\u661f\u6807\u516c\u4f17\u53f7\u201d<\/span><\/strong><\/p>\n<p><span style=\"max-width: 100%;font-family:\">\u798f\u5229\u5e72\u8d27\uff0c\u7b2c\u4e00\u65f6\u95f4\u9001\u8fbe<\/span><br \/>\n<img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/001\/275\/014\/a8053e5029c3b4cfc2862ce3c9be3718-0.png\" class=\"aligncenter\" title=\"Linux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa\u63d2\u56fe\" alt=\"Linux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa\u63d2\u56fe\" \/>  <\/p>\n<p style=\"max-width:90%\">\u4e0a\u7bc7\u4ecb\u7ecd\u4e86procfs\u63a5\u53e3\u7684\u521b\u5efa\uff0c\u4eca\u5929\u518d\u4ecb\u7ecd\u4e00\u79cddebugfs\u63a5\u53e3\u7684\u521b\u5efa\u3002<\/p>\n<h2> <span><\/span><span style=\"padding: 2px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px\">\u5b9e\u73b0\u6548\u679c<\/span><span style=\"vertical-align: bottom;border-bottom: 36px solid #efebe9;border-right: 20px solid transparent\"> <\/span> <\/h2>\n<p style=\"padding-top: 8px;padding-bottom: 8px;line-height: 26px\">\u5728\/sys\/kernel\/debug\/\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2aion\/test\u6587\u4ef6\uff0c\u901a\u8fc7cat\u3001echo\u7684\u65b9\u5f0f\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/001\/275\/014\/a8053e5029c3b4cfc2862ce3c9be3718-1.png\" class=\"aligncenter\" title=\"Linux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa\u63d2\u56fe1\" alt=\"Linux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa\u63d2\u56fe1\" \/><br \/>\n<img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/001\/275\/014\/515c9a92cc5c9f088d24c9b2ab2fc56f-2.png\" class=\"aligncenter\" title=\"Linux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa\u63d2\u56fe2\" alt=\"Linux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa\u63d2\u56fe2\" \/>  <\/p>\n<h2> <span><\/span><span style=\"padding: 2px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px\">\u524d\u671f\u51c6\u5907<\/span><span style=\"vertical-align: bottom;border-bottom: 36px solid #efebe9;border-right: 20px solid transparent\"> <\/span> <\/h2>\n<p style=\"padding-top: 8px;padding-bottom: 8px;line-height: 26px\">\u5185\u6838\u914d\u7f6e\u6253\u5f00debugfs\uff1a<\/p>\n<pre>CONFIG_DEBUG_FS=y<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p style=\"padding-top: 8px;padding-bottom: 8px;line-height: 26px\">\u6302\u8f7ddebugfs\u6587\u4ef6\u7cfb\u7edf\uff1a<\/p>\n<pre>mount&nbsp;-t&nbsp;debugfs&nbsp;none&nbsp;\/sys\/kernel\/debug<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<h2> <span><\/span><span style=\"padding: 2px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px\">\u4ee3\u7801\u5b9e\u73b0<\/span><span style=\"vertical-align: bottom;border-bottom: 36px solid #efebe9;border-right: 20px solid transparent\"> <\/span> <\/h2>\n<h3> <span><\/span>\u8bfb\u5199\u53d8\u91cf\uff1a<span><\/span> <\/h3>\n<pre>#include&nbsp;&lt;linux&gt;\n#include&nbsp;&lt;linux&gt;\n#include&nbsp;&lt;linux&gt;\n\nstatic&nbsp;struct&nbsp;dentry&nbsp;*ion_dir;\nstatic&nbsp;u64&nbsp;test_u64&nbsp;=&nbsp;0;\n\nstatic&nbsp;int&nbsp;__init&nbsp;debugfs_init(void)\n{\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u521b\u5efa\u4e00\u4e2a\/sys\/kernel\/debug\/ion\u76ee\u5f55\n&nbsp;&nbsp;&nbsp;&nbsp;ion_dir&nbsp;=&nbsp;debugfs_create_dir(\"ion\",&nbsp;NULL);\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!ion_dir)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(\"ion_dir&nbsp;is&nbsp;null\n\");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;\n&nbsp;&nbsp;&nbsp;&nbsp;}\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/*&nbsp;\u521b\u5efa\/sys\/kernel\/debug\/ion\/test_u64\u6587\u4ef6&nbsp;*\/\n&nbsp;&nbsp;&nbsp;&nbsp;debugfs_create_u64(\"test_u64\",&nbsp;0644,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ion_dir,&nbsp;&amp;amp;test_u64);\n\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;\n}\n\nstatic&nbsp;void&nbsp;__exit&nbsp;debugfs_exit(void)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;debugfs_remove_recursive(ion_dir);\n}\n\nmodule_init(debugfs_init);\nmodule_exit(debugfs_exit);\nMODULE_LICENSE(\"GPL\");&lt;\/linux&gt;&lt;\/linux&gt;&lt;\/linux&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p style=\"padding-top: 8px;padding-bottom: 8px;line-height: 26px\">\u8fd0\u884c\u7ed3\u679c\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/001\/275\/014\/515c9a92cc5c9f088d24c9b2ab2fc56f-2.png\" class=\"aligncenter\" title=\"Linux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa\u63d2\u56fe2\" alt=\"Linux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa\u63d2\u56fe2\" \/>  <\/p>\n<h3> <span><\/span>\u8bfb\u5199\u5b57\u7b26\u4e32\uff1a<span><\/span> <\/h3>\n<pre>#include&nbsp;&lt;linux&gt;\n#include&nbsp;&lt;linux&gt;\n#include&nbsp;&lt;linux&gt;\n#include&nbsp;&lt;linux&gt;\n#include&nbsp;&lt;linux&gt;\n#include&nbsp;&lt;linux&gt;\n#include&nbsp;&lt;linux&gt;\n\nstatic&nbsp;char&nbsp;ion_buf[512]&nbsp;=&nbsp;\"hello\n\";\nstatic&nbsp;struct&nbsp;dentry&nbsp;*ion_dir;\n\nstatic&nbsp;int&nbsp;ion_open(struct&nbsp;inode&nbsp;*inode,&nbsp;struct&nbsp;file&nbsp;*filp)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/printk(\"ion&nbsp;open\n\");\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;\n}\n\nssize_t&nbsp;ion_read(struct&nbsp;file&nbsp;*filp,&nbsp;char&nbsp;__user&nbsp;*buf,&nbsp;size_t&nbsp;count,&nbsp;loff_t&nbsp;*offp)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;retval&nbsp;=&nbsp;0;\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((*offp&nbsp;+&nbsp;count)&nbsp;&amp;gt;&nbsp;512)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=&nbsp;512&nbsp;-&nbsp;*offp;\n\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(copy_to_user(buf,&nbsp;ion_buf+*offp,&nbsp;count))&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(\"copy&nbsp;to&nbsp;user&nbsp;failed,&nbsp;count:%ld\n\",&nbsp;count);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retval&nbsp;=&nbsp;-EFAULT;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;out;\n&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;*offp&nbsp;+=&nbsp;count;\n&nbsp;&nbsp;&nbsp;&nbsp;retval&nbsp;=&nbsp;count;\nout:\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;retval;\n}\n\nssize_t&nbsp;ion_write(struct&nbsp;file&nbsp;*filp,&nbsp;const&nbsp;char&nbsp;__user&nbsp;*buff,&nbsp;size_t&nbsp;count,&nbsp;loff_t&nbsp;*offp)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;retval;\n\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(*offp&nbsp;&amp;gt;&nbsp;512)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;\n\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(*offp&nbsp;+&nbsp;count&nbsp;&amp;gt;&nbsp;512)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count&nbsp;=&nbsp;512&nbsp;-&nbsp;*offp;\n\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(copy_from_user(ion_buf+*offp,&nbsp;buff,&nbsp;count))&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(\"copy&nbsp;from&nbsp;user&nbsp;failed,&nbsp;count:%ld\n\",&nbsp;count);\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retval&nbsp;=&nbsp;-EFAULT;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto&nbsp;out;\n&nbsp;&nbsp;&nbsp;&nbsp;}\n&nbsp;&nbsp;&nbsp;&nbsp;*offp&nbsp;+=&nbsp;count;\n&nbsp;&nbsp;&nbsp;&nbsp;retval&nbsp;=&nbsp;count;\nout:\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;retval;\n}\n\nstruct&nbsp;file_operations&nbsp;my_fops&nbsp;=&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;.owner&nbsp;=&nbsp;THIS_MODULE,\n&nbsp;&nbsp;&nbsp;&nbsp;.read&nbsp;=&nbsp;ion_read,\n&nbsp;&nbsp;&nbsp;&nbsp;.write&nbsp;=&nbsp;ion_write,\n&nbsp;&nbsp;&nbsp;&nbsp;.open&nbsp;=&nbsp;ion_open,\n};\n\nstatic&nbsp;int&nbsp;__init&nbsp;debugfs_init(void)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;printk(\"INIT&nbsp;MODULE\n\");\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/\/\u521b\u5efa\u4e00\u4e2a\/sys\/kernel\/debug\/ion\u76ee\u5f55\n&nbsp;&nbsp;&nbsp;&nbsp;ion_dir&nbsp;=&nbsp;debugfs_create_dir(\"ion\",&nbsp;NULL);\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!ion_dir)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(\"ion_dir&nbsp;is&nbsp;null\n\");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;\n&nbsp;&nbsp;&nbsp;&nbsp;}\n\n&nbsp;&nbsp;&nbsp;&nbsp;\/*&nbsp;\u521b\u5efa\/sys\/kernel\/debug\/ion\/test\u6587\u4ef6&nbsp;*\/\n&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dentry&nbsp;*filent&nbsp;=&nbsp;debugfs_create_file(\"test\",&nbsp;0644,&nbsp;ion_dir,&nbsp;NULL,&nbsp;&amp;amp;my_fops);\n&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!filent)&nbsp;{\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(\"test&nbsp;file&nbsp;is&nbsp;null\n\");\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;\n&nbsp;&nbsp;&nbsp;&nbsp;}\n\n&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;\n}\n\nstatic&nbsp;void&nbsp;__exit&nbsp;debugfs_exit(void)\n{\n&nbsp;&nbsp;&nbsp;&nbsp;debugfs_remove_recursive(ion_dir);\n}\n\nmodule_init(debugfs_init);\nmodule_exit(debugfs_exit);\nMODULE_LICENSE(\"GPL\");&lt;\/linux&gt;&lt;\/linux&gt;&lt;\/linux&gt;&lt;\/linux&gt;&lt;\/linux&gt;&lt;\/linux&gt;&lt;\/linux&gt;<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p style=\"padding-top: 8px;padding-bottom: 8px;line-height: 26px\">\u8fd0\u884c\u7ed3\u679c\uff1a<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/img.php.cn\/upload\/article\/001\/275\/014\/a8053e5029c3b4cfc2862ce3c9be3718-1.png\" class=\"aligncenter\" title=\"Linux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa\u63d2\u56fe1\" alt=\"Linux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa\u63d2\u56fe1\" \/>  <\/p>\n<h2> <span><\/span><span style=\"padding: 2px 10px 1px;border-top-right-radius: 3px;border-top-left-radius: 3px;margin-right: 3px\">\u51fd\u6570\u63a5\u53e3\u8bf4\u660e<\/span><span style=\"vertical-align: bottom;border-bottom: 36px solid #efebe9;border-right: 20px solid transparent\"> <\/span> <\/h2>\n<p style=\"padding-top: 8px;padding-bottom: 8px;line-height: 26px\">\u521b\u5efa\u76ee\u5f55\u3001\u6587\u4ef6\u51fd\u6570\uff1a<\/p>\n<pre>\/*&nbsp;\u521b\u5efa\u76ee\u5f55&nbsp;*\/\nstruct&nbsp;dentry&nbsp;*debugfs_create_dir(const&nbsp;char&nbsp;*name,&nbsp;struct&nbsp;dentry&nbsp;*parent);\n\n\/*\u521b\u5efa\u8282\u70b9&nbsp;*\/\nstruct&nbsp;dentry&nbsp;*debugfs_create_file(const&nbsp;char&nbsp;*name,&nbsp;umode_t&nbsp;mode,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dentry&nbsp;*parent,&nbsp;void&nbsp;*data,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;struct&nbsp;file_operations&nbsp;*fops);<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<p style=\"padding-top: 8px;padding-bottom: 8px;line-height: 26px\"><strong>name<\/strong>\uff1a\u8981\u521b\u5efa\u7684\/sys\/kernel\/debug\u4e0b\u7684\u76ee\u5f55\u540d<\/p>\n<p style=\"padding-top: 8px;padding-bottom: 8px;line-height: 26px\"><strong>parent<\/strong>\uff1a\u7236\u76ee\u5f55\uff0c\u7528struct dentry\u7ed3\u6784\u4f53\u8868\u793a\u3002\u5982\u679c\u76f4\u63a5\u5728\/sys\/kernel\/debug\/\u4e0b\u521b\u5efa\u6587\u4ef6\uff0c\u5219\u4e3aNULL<\/p>\n<p style=\"padding-top: 8px;padding-bottom: 8px;line-height: 26px\">\u521b\u5efa\u4e0d\u540c\u5927\u5c0f\u7684\u6587\u4ef6\uff1a<\/p>\n<pre>\/\/\u521b\u5efa\u5341\u8fdb\u5236\u7684\u65e0\u7b26\u53f7\u6587\u4ef6\nvoid&nbsp;debugfs_create_u8(const&nbsp;char&nbsp;*name,&nbsp;umode_t&nbsp;mode,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dentry&nbsp;*parent,&nbsp;u8&nbsp;*value);\nvoid&nbsp;debugfs_create_u16(const&nbsp;char&nbsp;*name,&nbsp;umode_t&nbsp;mode,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dentry&nbsp;*parent,&nbsp;u16&nbsp;*value);\nvoid&nbsp;debugfs_create_u32(const&nbsp;char&nbsp;*name,&nbsp;umode_t&nbsp;mode,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dentry&nbsp;*parent,&nbsp;u32&nbsp;*value);\nvoid&nbsp;debugfs_create_u64(const&nbsp;char&nbsp;*name,&nbsp;umode_t&nbsp;mode,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dentry&nbsp;*parent,&nbsp;u64&nbsp;*value);\n\/\/\u521b\u5efa\u5341\u516d\u8fdb\u5236\u7684\u65e0\u7b26\u53f7\u6587\u4ef6\nvoid&nbsp;debugfs_create_x8(const&nbsp;char&nbsp;*name,&nbsp;umode_t&nbsp;mode,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dentry&nbsp;*parent,&nbsp;u8&nbsp;*value);\nvoid&nbsp;debugfs_create_x16(const&nbsp;char&nbsp;*name,&nbsp;umode_t&nbsp;mode,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dentry&nbsp;*parent,&nbsp;u16&nbsp;*value);\nvoid&nbsp;debugfs_create_x32(const&nbsp;char&nbsp;*name,&nbsp;umode_t&nbsp;mode,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dentry&nbsp;*parent,&nbsp;u32&nbsp;*value);\nvoid&nbsp;debugfs_create_x64(const&nbsp;char&nbsp;*name,&nbsp;umode_t&nbsp;mode,\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;dentry&nbsp;*parent,&nbsp;u64&nbsp;*value);<\/pre>\n<p>  \u767b\u5f55\u540e\u590d\u5236   <\/p>\n<blockquote style=\"border-top: none;border-right: none;border-bottom: none;font-size: 0.9em;overflow: auto;padding: 10px 10px 10px 20px;margin-bottom: 20px;margin-top: 20px\">\n<p style=\"font-size: 16px;padding-top: 8px;padding-bottom: 8px;color: black;line-height: 26px\">\u66f4\u8be6\u7ec6\u7684debugfs\u7528\u6cd5\u8bf7\u53c2\u8003\u5b98\u65b9\u6587\u6863\uff1aDocumentation\/filesystems\/debugfs.txt<\/p>\n<\/blockquote>\n<p>\u4ee5\u4e0a\u5c31\u662fLinux\u9a71\u52a8 | debugfs\u63a5\u53e3\u521b\u5efa\u7684\u8be6\u7ec6\u5185\u5bb9\uff0c\u66f4\u591a\u8bf7\u5173\u6ce8\u7c73\u4e91\u5176\u5b83\u76f8\u5173\u6587\u7ae0\uff01<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u70b9\u51fb\u4e0a\u65b9\u201c\u5d4c\u5165\u5f0fLinux\u5145\u7535\u7ad9\u201d\uff0c\u9009\u62e9\u201c\u7f6e\u9876\/\u661f\u6807\u516c\u4f17\u53f7\u201d \u798f\u5229\u5e72\u8d27\uff0c\u7b2c\u4e00\u65f6\u95f4\u9001\u8fbe \u4e0a\u7bc7\u4ecb\u7ecd\u4e86procfs\u63a5\u53e3\u7684\u521b\u5efa\uff0c\u4eca\u5929\u518d\u4ecb\u7ecd\u4e00\u79cddebugfs\u63a5\u53e3\u7684\u521b\u5efa\u3002 \u5b9e\u73b0\u6548\u679c \u5728\/sys\/kernel\/debug\/\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2aion\/test\u6587\u4ef6\uff0c\u901a\u8fc7cat\u3001echo\u7684\u65b9\u5f0f\u8fdb\u884c\u8bfb\u5199\u64cd\u4f5c\uff1a \u524d\u671f\u51c6\u5907 \u5185\u6838\u914d\u7f6e\u6253\u5f00debugfs\uff1a CONFIG_DEBUG_FS=y \u767b\u5f55\u540e\u590d\u5236 \u6302\u8f7ddebugfs\u6587\u4ef6\u7cfb\u7edf\uff1a mount&nbsp;-t&nbsp;debugfs&nbsp;none&nbsp;\/sys\/kernel\/debug \u767b\u5f55\u540e\u590d\u5236 \u4ee3\u7801\u5b9e\u73b0 \u8bfb\u5199\u53d8\u91cf\uff1a #include&nbsp;&lt;linux&gt; #include&nbsp;&lt;linux&gt; #include&nbsp;&lt;linux&gt; static&nbsp;struct&nbsp;dentry&nbsp;*ion_dir; static&nbsp;u64&nbsp;test_u64&nbsp;=&nbsp;0; static&nbsp;int&nbsp;__init&nbsp;debugfs_init(void) { &nbsp;&nbsp;&nbsp;&nbsp;\/\/\u521b\u5efa\u4e00\u4e2a\/sys\/kernel\/debug\/ion\u76ee\u5f55 &nbsp;&nbsp;&nbsp;&nbsp;ion_dir&nbsp;=&nbsp;debugfs_create_dir(&#8220;ion&#8221;,&nbsp;NULL); &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!ion_dir)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(&#8220;ion_dir&nbsp;is&nbsp;null &#8220;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;\/*&nbsp;\u521b\u5efa\/sys\/kernel\/debug\/ion\/test_u64\u6587\u4ef6&nbsp;*\/ &nbsp;&nbsp;&nbsp;&nbsp;debugfs_create_u64(&#8220;test_u64&#8221;,&nbsp;0644, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ion_dir,&nbsp;&amp;amp;test_u64); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0; } static&nbsp;void&nbsp;__exit&nbsp;debugfs_exit(void) { &nbsp;&nbsp;&nbsp;&nbsp;debugfs_remove_recursive(ion_dir); } module_init(debugfs_init); module_exit(debugfs_exit); MODULE_LICENSE(&#8220;GPL&#8221;);&lt;\/linux&gt;&lt;\/linux&gt;&lt;\/linux&gt; \u767b\u5f55\u540e\u590d\u5236 \u8fd0\u884c\u7ed3\u679c\uff1a \u8bfb\u5199\u5b57\u7b26\u4e32\uff1a #include&nbsp;&lt;linux&gt; #include&nbsp;&lt;linux&gt; #include&nbsp;&lt;linux&gt; #include&nbsp;&lt;linux&gt; #include&nbsp;&lt;linux&gt; #include&nbsp;&lt;linux&gt; #include&nbsp;&lt;linux&gt; static&nbsp;char&nbsp;ion_buf[512]&nbsp;=&nbsp;&#8220;hello &#8220;; static&nbsp;struct&nbsp;dentry&nbsp;*ion_dir; static&nbsp;int&nbsp;ion_open(struct&nbsp;inode&nbsp;*inode,&nbsp;struct&nbsp;file&nbsp;*filp) { [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-16503","post","type-post","status-publish","format-standard","hentry","category-os"],"_links":{"self":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/16503","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/comments?post=16503"}],"version-history":[{"count":0,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/posts\/16503\/revisions"}],"wp:attachment":[{"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/media?parent=16503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/categories?post=16503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fwq.ai\/blog\/wp-json\/wp\/v2\/tags?post=16503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}