linux/Documentation/zh_CN/filesystems/sysfs.txt
<<
>>
Prefs
   1Chinese translated version of Documentation/filesystems/sysfs.txt
   2
   3If you have any comment or update to the content, please contact the
   4original document maintainer directly.  However, if you have a problem
   5communicating in English you can also ask the Chinese maintainer for
   6help.  Contact the Chinese maintainer if this translation is outdated
   7or if there is a problem with the translation.
   8
   9Maintainer: Patrick Mochel      <mochel@osdl.org>
  10                Mike Murphy <mamurph@cs.clemson.edu>
  11Chinese maintainer: Fu Wei <tekkamanninja@gmail.com>
  12---------------------------------------------------------------------
  13Documentation/filesystems/sysfs.txt \xE7\x9A\x84\xE4\xB8\xAD\xE6\x96\x87\xE7\xBF\xBB\xE8\xAF\x91
  14
  15\xE5\xA6\x82\xE6\x9E\x9C\xE6\x83\xB3\xE8\xAF\x84\xE8\xAE\xBA\xE6\x88\x96\xE6\x9B\xB4\xE6\x96\xB0\xE6\x9C\xAC\xE6\x96\x87\xE7\x9A\x84\xE5\x86\x85\xE5\xAE\xB9\xEF\xBC\x8C\xE8\xAF\xB7\xE7\x9B\xB4\xE6\x8E\xA5\xE8\x81\x94\xE7\xB3\xBB\xE5\x8E\x9F\xE6\x96\x87\xE6\xA1\xA3\xE7\x9A\x84\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE4\xBD\xA0\xE4\xBD\xBF\xE7\x94\xA8\xE8\x8B\xB1\xE6\x96\x87
  16\xE4\xBA\xA4\xE6\xB5\x81\xE6\x9C\x89\xE5\x9B\xB0\xE9\x9A\xBE\xE7\x9A\x84\xE8\xAF\x9D\xEF\xBC\x8C\xE4\xB9\x9F\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x90\x91\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xE6\xB1\x82\xE5\x8A\xA9\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE6\x9C\xAC\xE7\xBF\xBB\xE8\xAF\x91\xE6\x9B\xB4\xE6\x96\xB0\xE4\xB8\x8D\xE5\x8F\x8A\xE6\x97\xB6\xE6\x88\x96\xE8\x80\x85\xE7\xBF\xBB
  17\xE8\xAF\x91\xE5\xAD\x98\xE5\x9C\xA8\xE9\x97\xAE\xE9\xA2\x98\xEF\xBC\x8C\xE8\xAF\xB7\xE8\x81\x94\xE7\xB3\xBB\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xE3\x80\x82
  18\xE8\x8B\xB1\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xEF\xBC\x9A Patrick Mochel     <mochel@osdl.org>
  19                Mike Murphy <mamurph@cs.clemson.edu>
  20\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBB\xB4\xE6\x8A\xA4\xE8\x80\x85\xEF\xBC\x9A \xE5\x82\x85\xE7\x82\x9C Fu Wei <tekkamanninja@gmail.com>
  21\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE7\xBF\xBB\xE8\xAF\x91\xE8\x80\x85\xEF\xBC\x9A \xE5\x82\x85\xE7\x82\x9C Fu Wei <tekkamanninja@gmail.com>
  22\xE4\xB8\xAD\xE6\x96\x87\xE7\x89\x88\xE6\xA0\xA1\xE8\xAF\x91\xE8\x80\x85\xEF\xBC\x9A \xE5\x82\x85\xE7\x82\x9C Fu Wei <tekkamanninja@gmail.com>
  23
  24
  25\xE4\xBB\xA5\xE4\xB8\x8B\xE4\xB8\xBA\xE6\xAD\xA3\xE6\x96\x87
  26---------------------------------------------------------------------
  27sysfs - \xE7\x94\xA8\xE4\xBA\x8E\xE5\xAF\xBC\xE5\x87\xBA\xE5\x86\x85\xE6\xA0\xB8\xE5\xAF\xB9\xE8\xB1\xA1(kobject)\xE7\x9A\x84\xE6\x96\x87\xE4\xBB\xB6\xE7\xB3\xBB\xE7\xBB\x9F
  28
  29Patrick Mochel  <mochel@osdl.org>
  30Mike Murphy <mamurph@cs.clemson.edu>
  31
  32\xE4\xBF\xAE\xE8\xAE\xA2:    16 August 2011
  33\xE5\x8E\x9F\xE5\xA7\x8B\xE7\x89\x88\xE6\x9C\xAC:   10 January 2003
  34
  35
  36sysfs \xE7\xAE\x80\xE4\xBB\x8B:
  37~~~~~~~~~~
  38
  39sysfs \xE6\x98\xAF\xE4\xB8\x80\xE4\xB8\xAA\xE6\x9C\x80\xE5\x88\x9D\xE5\x9F\xBA\xE4\xBA\x8E ramfs \xE4\xB8\x94\xE4\xBD\x8D\xE4\xBA\x8E\xE5\x86\x85\xE5\xAD\x98\xE7\x9A\x84\xE6\x96\x87\xE4\xBB\xB6\xE7\xB3\xBB\xE7\xBB\x9F\xE3\x80\x82\xE5\xAE\x83\xE6\x8F\x90\xE4\xBE\x9B\xE5\xAF\xBC\xE5\x87\xBA\xE5\x86\x85\xE6\xA0\xB8
  40\xE6\x95\xB0\xE6\x8D\xAE\xE7\xBB\x93\xE6\x9E\x84\xE5\x8F\x8A\xE5\x85\xB6\xE5\xB1\x9E\xE6\x80\xA7\xEF\xBC\x8C\xE4\xBB\xA5\xE5\x8F\x8A\xE5\xAE\x83\xE4\xBB\xAC\xE4\xB9\x8B\xE9\x97\xB4\xE7\x9A\x84\xE5\x85\xB3\xE8\x81\x94\xE5\x88\xB0\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE7\x9A\x84\xE6\x96\xB9\xE6\xB3\x95\xE3\x80\x82
  41
  42sysfs \xE5\xA7\x8B\xE7\xBB\x88\xE4\xB8\x8E kobject \xE7\x9A\x84\xE5\xBA\x95\xE5\xB1\x82\xE7\xBB\x93\xE6\x9E\x84\xE7\xB4\xA7\xE5\xAF\x86\xE7\x9B\xB8\xE5\x85\xB3\xE3\x80\x82\xE8\xAF\xB7\xE9\x98\x85\xE8\xAF\xBB
  43Documentation/kobject.txt \xE6\x96\x87\xE6\xA1\xA3\xE4\xBB\xA5\xE8\x8E\xB7\xE5\xBE\x97\xE6\x9B\xB4\xE5\xA4\x9A\xE5\x85\xB3\xE4\xBA\x8E kobject \xE6\x8E\xA5\xE5\x8F\xA3\xE7\x9A\x84
  44\xE4\xBF\xA1\xE6\x81\xAF\xE3\x80\x82
  45
  46
  47\xE4\xBD\xBF\xE7\x94\xA8 sysfs
  48~~~~~~~~~~~
  49
  50\xE5\x8F\xAA\xE8\xA6\x81\xE5\x86\x85\xE6\xA0\xB8\xE9\x85\x8D\xE7\xBD\xAE\xE4\xB8\xAD\xE5\xAE\x9A\xE4\xB9\x89\xE4\xBA\x86 CONFIG_SYSFS \xEF\xBC\x8Csysfs \xE6\x80\xBB\xE6\x98\xAF\xE8\xA2\xAB\xE7\xBC\x96\xE8\xAF\x91\xE8\xBF\x9B\xE5\x86\x85\xE6\xA0\xB8\xE3\x80\x82\xE4\xBD\xA0\xE5\x8F\xAF
  51\xE9\x80\x9A\xE8\xBF\x87\xE4\xBB\xA5\xE4\xB8\x8B\xE5\x91\xBD\xE4\xBB\xA4\xE6\x8C\x82\xE8\xBD\xBD\xE5\xAE\x83:
  52
  53    mount -t sysfs sysfs /sys
  54
  55
  56\xE5\x88\x9B\xE5\xBB\xBA\xE7\x9B\xAE\xE5\xBD\x95
  57~~~~~~~~
  58
  59\xE4\xBB\xBB\xE4\xBD\x95 kobject \xE5\x9C\xA8\xE7\xB3\xBB\xE7\xBB\x9F\xE4\xB8\xAD\xE6\xB3\xA8\xE5\x86\x8C\xEF\xBC\x8C\xE5\xB0\xB1\xE4\xBC\x9A\xE6\x9C\x89\xE4\xB8\x80\xE4\xB8\xAA\xE7\x9B\xAE\xE5\xBD\x95\xE5\x9C\xA8 sysfs \xE4\xB8\xAD\xE8\xA2\xAB\xE5\x88\x9B\xE5\xBB\xBA\xE3\x80\x82\xE8\xBF\x99\xE4\xB8\xAA
  60\xE7\x9B\xAE\xE5\xBD\x95\xE6\x98\xAF\xE4\xBD\x9C\xE4\xB8\xBA\xE8\xAF\xA5 kobject \xE7\x9A\x84\xE7\x88\xB6\xE5\xAF\xB9\xE8\xB1\xA1\xE6\x89\x80\xE5\x9C\xA8\xE7\x9B\xAE\xE5\xBD\x95\xE7\x9A\x84\xE5\xAD\x90\xE7\x9B\xAE\xE5\xBD\x95\xE5\x88\x9B\xE5\xBB\xBA\xE7\x9A\x84\xEF\xBC\x8C\xE4\xBB\xA5\xE5\x87\x86\xE7\xA1\xAE\xE5\x9C\xB0\xE4\xBC\xA0\xE9\x80\x92
  61\xE5\x86\x85\xE6\xA0\xB8\xE7\x9A\x84\xE5\xAF\xB9\xE8\xB1\xA1\xE5\xB1\x82\xE6\xAC\xA1\xE5\x88\xB0\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE3\x80\x82sysfs \xE4\xB8\xAD\xE7\x9A\x84\xE9\xA1\xB6\xE5\xB1\x82\xE7\x9B\xAE\xE5\xBD\x95\xE4\xBB\xA3\xE8\xA1\xA8\xE7\x9D\x80\xE5\x86\x85\xE6\xA0\xB8\xE5\xAF\xB9\xE8\xB1\xA1\xE5\xB1\x82\xE6\xAC\xA1\xE7\x9A\x84
  62\xE5\x85\xB1\xE5\x90\x8C\xE7\xA5\x96\xE5\x85\x88\xEF\xBC\x9B\xE4\xBE\x8B\xE5\xA6\x82\xEF\xBC\x9A\xE6\x9F\x90\xE4\xBA\x9B\xE5\xAF\xB9\xE8\xB1\xA1\xE5\xB1\x9E\xE4\xBA\x8E\xE6\x9F\x90\xE4\xB8\xAA\xE5\xAD\x90\xE7\xB3\xBB\xE7\xBB\x9F\xE3\x80\x82
  63
  64Sysfs \xE5\x9C\xA8\xE4\xB8\x8E\xE5\x85\xB6\xE7\x9B\xAE\xE5\xBD\x95\xE5\x85\xB3\xE8\x81\x94\xE7\x9A\x84 sysfs_dirent \xE5\xAF\xB9\xE8\xB1\xA1\xE4\xB8\xAD\xE5\x86\x85\xE9\x83\xA8\xE4\xBF\x9D\xE5\xAD\x98\xE4\xB8\x80\xE4\xB8\xAA\xE6\x8C\x87\xE5\x90\x91\xE5\xAE\x9E\xE7\x8E\xB0
  65\xE7\x9B\xAE\xE5\xBD\x95\xE7\x9A\x84 kobject \xE7\x9A\x84\xE6\x8C\x87\xE9\x92\x88\xE3\x80\x82\xE4\xBB\xA5\xE5\x89\x8D\xEF\xBC\x8C\xE8\xBF\x99\xE4\xB8\xAA kobject \xE6\x8C\x87\xE9\x92\x88\xE8\xA2\xAB sysfs \xE7\x9B\xB4\xE6\x8E\xA5\xE7\x94\xA8\xE4\xBA\x8E
  66kobject \xE6\x96\x87\xE4\xBB\xB6\xE6\x89\x93\xE5\xBC\x80\xE5\x92\x8C\xE5\x85\xB3\xE9\x97\xAD\xE7\x9A\x84\xE5\xBC\x95\xE7\x94\xA8\xE8\xAE\xA1\xE6\x95\xB0\xE3\x80\x82\xE8\x80\x8C\xE7\x8E\xB0\xE5\x9C\xA8\xE7\x9A\x84 sysfs \xE5\xAE\x9E\xE7\x8E\xB0\xE4\xB8\xAD\xEF\xBC\x8Ckobject
  67\xE5\xBC\x95\xE7\x94\xA8\xE8\xAE\xA1\xE6\x95\xB0\xE5\x8F\xAA\xE8\x83\xBD\xE9\x80\x9A\xE8\xBF\x87 sysfs_schedule_callback() \xE5\x87\xBD\xE6\x95\xB0\xE7\x9B\xB4\xE6\x8E\xA5\xE4\xBF\xAE\xE6\x94\xB9\xE3\x80\x82
  68
  69
  70\xE5\xB1\x9E\xE6\x80\xA7
  71~~~~
  72
  73kobject \xE7\x9A\x84\xE5\xB1\x9E\xE6\x80\xA7\xE5\x8F\xAF\xE5\x9C\xA8\xE6\x96\x87\xE4\xBB\xB6\xE7\xB3\xBB\xE7\xBB\x9F\xE4\xB8\xAD\xE4\xBB\xA5\xE6\x99\xAE\xE9\x80\x9A\xE6\x96\x87\xE4\xBB\xB6\xE7\x9A\x84\xE5\xBD\xA2\xE5\xBC\x8F\xE5\xAF\xBC\xE5\x87\xBA\xE3\x80\x82Sysfs \xE4\xB8\xBA\xE5\xB1\x9E\xE6\x80\xA7\xE5\xAE\x9A\xE4\xB9\x89
  74\xE4\xBA\x86\xE9\x9D\xA2\xE5\x90\x91\xE6\x96\x87\xE4\xBB\xB6 I/O \xE6\x93\x8D\xE4\xBD\x9C\xE7\x9A\x84\xE6\x96\xB9\xE6\xB3\x95\xEF\xBC\x8C\xE4\xBB\xA5\xE6\x8F\x90\xE4\xBE\x9B\xE5\xAF\xB9\xE5\x86\x85\xE6\xA0\xB8\xE5\xB1\x9E\xE6\x80\xA7\xE7\x9A\x84\xE8\xAF\xBB\xE5\x86\x99\xE3\x80\x82
  75
  76
  77\xE5\xB1\x9E\xE6\x80\xA7\xE5\xBA\x94\xE4\xB8\xBA ASCII \xE7\xA0\x81\xE6\x96\x87\xE6\x9C\xAC\xE6\x96\x87\xE4\xBB\xB6\xE3\x80\x82\xE4\xBB\xA5\xE4\xB8\x80\xE4\xB8\xAA\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xAA\xE5\xAD\x98\xE5\x82\xA8\xE4\xB8\x80\xE4\xB8\xAA\xE5\xB1\x9E\xE6\x80\xA7\xE5\x80\xBC\xE4\xB8\xBA\xE5\xAE\x9C\xE3\x80\x82\xE4\xBD\x86\xE4\xB8\x80\xE4\xB8\xAA
  78\xE6\x96\x87\xE4\xBB\xB6\xE5\x8F\xAA\xE5\x8C\x85\xE5\x90\xAB\xE4\xB8\x80\xE4\xB8\xAA\xE5\xB1\x9E\xE6\x80\xA7\xE5\x80\xBC\xE5\x8F\xAF\xE8\x83\xBD\xE5\xBD\xB1\xE5\x93\x8D\xE6\x95\x88\xE7\x8E\x87\xEF\xBC\x8C\xE6\x89\x80\xE4\xBB\xA5\xE4\xB8\x80\xE4\xB8\xAA\xE5\x8C\x85\xE5\x90\xAB\xE7\x9B\xB8\xE5\x90\x8C\xE6\x95\xB0\xE6\x8D\xAE\xE7\xB1\xBB\xE5\x9E\x8B\xE7\x9A\x84\xE5\xB1\x9E\xE6\x80\xA7\xE5\x80\xBC
  79\xE6\x95\xB0\xE7\xBB\x84\xE4\xB9\x9F\xE8\xA2\xAB\xE5\xB9\xBF\xE6\xB3\x9B\xE5\x9C\xB0\xE6\x8E\xA5\xE5\x8F\x97\xE3\x80\x82
  80
  81\xE6\xB7\xB7\xE5\x90\x88\xE7\xB1\xBB\xE5\x9E\x8B\xE3\x80\x81\xE8\xA1\xA8\xE8\xBE\xBE\xE5\xA4\x9A\xE8\xA1\x8C\xE6\x95\xB0\xE6\x8D\xAE\xE4\xBB\xA5\xE5\x8F\x8A\xE4\xB8\x80\xE4\xBA\x9B\xE6\x80\xAA\xE5\xBC\x82\xE7\x9A\x84\xE6\x95\xB0\xE6\x8D\xAE\xE6\xA0\xBC\xE5\xBC\x8F\xE4\xBC\x9A\xE9\x81\xAD\xE5\x88\xB0\xE5\xBC\xBA\xE7\x83\x88\xE5\x8F\x8D\xE5\xAF\xB9\xE3\x80\x82\xE8\xBF\x99\xE6\xA0\xB7\xE5\x81\x9A\xE6\x98\xAF
  82\xE5\xBE\x88\xE4\xB8\xA2\xE8\x84\xB8\xE7\x9A\x84,\xE8\x80\x8C\xE4\xB8\x94\xE5\x85\xB6\xE4\xBB\xA3\xE7\xA0\x81\xE4\xBC\x9A\xE5\x9C\xA8\xE6\x9C\xAA\xE9\x80\x9A\xE7\x9F\xA5\xE4\xBD\x9C\xE8\x80\x85\xE7\x9A\x84\xE6\x83\x85\xE5\x86\xB5\xE4\xB8\x8B\xE8\xA2\xAB\xE9\x87\x8D\xE5\x86\x99\xE3\x80\x82
  83
  84
  85\xE4\xB8\x80\xE4\xB8\xAA\xE7\xAE\x80\xE5\x8D\x95\xE7\x9A\x84\xE5\xB1\x9E\xE6\x80\xA7\xE7\xBB\x93\xE6\x9E\x84\xE5\xAE\x9A\xE4\xB9\x89\xE5\xA6\x82\xE4\xB8\x8B:
  86
  87struct attribute {
  88        char                    * name;
  89        struct module           *owner;
  90        umode_t                 mode;
  91};
  92
  93
  94int sysfs_create_file(struct kobject * kobj, const struct attribute * attr);
  95void sysfs_remove_file(struct kobject * kobj, const struct attribute * attr);
  96
  97
  98\xE4\xB8\x80\xE4\xB8\xAA\xE5\x8D\x95\xE7\x8B\xAC\xE7\x9A\x84\xE5\xB1\x9E\xE6\x80\xA7\xE7\xBB\x93\xE6\x9E\x84\xE5\xB9\xB6\xE4\xB8\x8D\xE5\x8C\x85\xE5\x90\xAB\xE8\xAF\xBB\xE5\x86\x99\xE5\x85\xB6\xE5\xB1\x9E\xE6\x80\xA7\xE5\x80\xBC\xE7\x9A\x84\xE6\x96\xB9\xE6\xB3\x95\xE3\x80\x82\xE5\xAD\x90\xE7\xB3\xBB\xE7\xBB\x9F\xE6\x9C\x80\xE5\xA5\xBD\xE4\xB8\xBA\xE5\xA2\x9E\xE5\x88\xA0\xE7\x89\xB9\xE5\xAE\x9A
  99\xE5\xAF\xB9\xE8\xB1\xA1\xE7\xB1\xBB\xE5\x9E\x8B\xE7\x9A\x84\xE5\xB1\x9E\xE6\x80\xA7\xE5\xAE\x9A\xE4\xB9\x89\xE8\x87\xAA\xE5\xB7\xB1\xE7\x9A\x84\xE5\xB1\x9E\xE6\x80\xA7\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE5\x92\x8C\xE5\xB0\x81\xE8\xA3\x85\xE5\x87\xBD\xE6\x95\xB0\xE3\x80\x82
 100
 101\xE4\xBE\x8B\xE5\xA6\x82:\xE9\xA9\xB1\xE5\x8A\xA8\xE7\xA8\x8B\xE5\xBA\x8F\xE6\xA8\xA1\xE5\x9E\x8B\xE5\xAE\x9A\xE4\xB9\x89\xE7\x9A\x84 device_attribute \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE5\xA6\x82\xE4\xB8\x8B:
 102
 103struct device_attribute {
 104        struct attribute        attr;
 105        ssize_t (*show)(struct device *dev, struct device_attribute *attr,
 106                        char *buf);
 107        ssize_t (*store)(struct device *dev, struct device_attribute *attr,
 108                         const char *buf, size_t count);
 109};
 110
 111int device_create_file(struct device *, const struct device_attribute *);
 112void device_remove_file(struct device *, const struct device_attribute *);
 113
 114\xE4\xB8\xBA\xE4\xBA\x86\xE5\xAE\x9A\xE4\xB9\x89\xE8\xAE\xBE\xE5\xA4\x87\xE5\xB1\x9E\xE6\x80\xA7\xEF\xBC\x8C\xE5\x90\x8C\xE6\x97\xB6\xE5\xAE\x9A\xE4\xB9\x89\xE4\xBA\x86\xE4\xB8\x80\xE4\xB8\x8B\xE8\xBE\x85\xE5\x8A\xA9\xE5\xAE\x8F:
 115
 116#define DEVICE_ATTR(_name, _mode, _show, _store) \
 117struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
 118
 119\xE4\xBE\x8B\xE5\xA6\x82:\xE5\xA3\xB0\xE6\x98\x8E
 120
 121static DEVICE_ATTR(foo, S_IWUSR | S_IRUGO, show_foo, store_foo);
 122
 123\xE7\xAD\x89\xE5\x90\x8C\xE4\xBA\x8E\xE5\xA6\x82\xE4\xB8\x8B\xE4\xBB\xA3\xE7\xA0\x81\xEF\xBC\x9A
 124
 125static struct device_attribute dev_attr_foo = {
 126       .attr    = {
 127                .name = "foo",
 128                .mode = S_IWUSR | S_IRUGO,
 129                .show = show_foo,
 130                .store = store_foo,
 131        },
 132};
 133
 134
 135\xE5\xAD\x90\xE7\xB3\xBB\xE7\xBB\x9F\xE7\x89\xB9\xE6\x9C\x89\xE7\x9A\x84\xE5\x9B\x9E\xE8\xB0\x83\xE5\x87\xBD\xE6\x95\xB0
 136~~~~~~~~~~~~~~~~~~~
 137
 138\xE5\xBD\x93\xE4\xB8\x80\xE4\xB8\xAA\xE5\xAD\x90\xE7\xB3\xBB\xE7\xBB\x9F\xE5\xAE\x9A\xE4\xB9\x89\xE4\xB8\x80\xE4\xB8\xAA\xE6\x96\xB0\xE7\x9A\x84\xE5\xB1\x9E\xE6\x80\xA7\xE7\xB1\xBB\xE5\x9E\x8B\xE6\x97\xB6\xEF\xBC\x8C\xE5\xBF\x85\xE9\xA1\xBB\xE5\xAE\x9E\xE7\x8E\xB0\xE4\xB8\x80\xE7\xB3\xBB\xE5\x88\x97\xE7\x9A\x84 sysfs \xE6\x93\x8D\xE4\xBD\x9C\xEF\xBC\x8C
 139\xE4\xBB\xA5\xE5\xB8\xAE\xE5\x8A\xA9\xE8\xAF\xBB\xE5\x86\x99\xE8\xB0\x83\xE7\x94\xA8\xE5\xAE\x9E\xE7\x8E\xB0\xE5\xB1\x9E\xE6\x80\xA7\xE6\x89\x80\xE6\x9C\x89\xE8\x80\x85\xE7\x9A\x84\xE6\x98\xBE\xE7\xA4\xBA\xE5\x92\x8C\xE5\x82\xA8\xE5\xAD\x98\xE6\x96\xB9\xE6\xB3\x95\xE3\x80\x82
 140
 141struct sysfs_ops {
 142        ssize_t (*show)(struct kobject *, struct attribute *, char *);
 143        ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
 144};
 145
 146[\xE5\xAD\x90\xE7\xB3\xBB\xE7\xBB\x9F\xE5\xBA\x94\xE5\xB7\xB2\xE7\xBB\x8F\xE5\xAE\x9A\xE4\xB9\x89\xE4\xBA\x86\xE4\xB8\x80\xE4\xB8\xAA struct kobj_type \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE4\xBD\x9C\xE4\xB8\xBA\xE8\xBF\x99\xE4\xB8\xAA\xE7\xB1\xBB\xE5\x9E\x8B\xE7\x9A\x84
 147\xE6\x8F\x8F\xE8\xBF\xB0\xE7\xAC\xA6\xEF\xBC\x8C\xE5\xB9\xB6\xE5\x9C\xA8\xE6\xAD\xA4\xE4\xBF\x9D\xE5\xAD\x98 sysfs_ops \xE7\x9A\x84\xE6\x8C\x87\xE9\x92\x88\xE3\x80\x82\xE6\x9B\xB4\xE5\xA4\x9A\xE7\x9A\x84\xE4\xBF\xA1\xE6\x81\xAF\xE5\x8F\x82\xE8\xA7\x81 kobject \xE7\x9A\x84
 148\xE6\x96\x87\xE6\xA1\xA3]
 149
 150sysfs \xE4\xBC\x9A\xE4\xB8\xBA\xE8\xBF\x99\xE4\xB8\xAA\xE7\xB1\xBB\xE5\x9E\x8B\xE8\xB0\x83\xE7\x94\xA8\xE9\x80\x82\xE5\xBD\x93\xE7\x9A\x84\xE6\x96\xB9\xE6\xB3\x95\xE3\x80\x82\xE5\xBD\x93\xE4\xB8\x80\xE4\xB8\xAA\xE6\x96\x87\xE4\xBB\xB6\xE8\xA2\xAB\xE8\xAF\xBB\xE5\x86\x99\xE6\x97\xB6\xEF\xBC\x8C\xE8\xBF\x99\xE4\xB8\xAA\xE6\x96\xB9\xE6\xB3\x95\xE4\xBC\x9A
 151\xE5\xB0\x86\xE4\xB8\x80\xE8\x88\xAC\xE7\x9A\x84kobject \xE5\x92\x8C attribute \xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93\xE6\x8C\x87\xE9\x92\x88\xE8\xBD\xAC\xE6\x8D\xA2\xE4\xB8\xBA\xE9\x80\x82\xE5\xBD\x93\xE7\x9A\x84\xE6\x8C\x87\xE9\x92\x88\xE7\xB1\xBB\xE5\x9E\x8B\xE5\x90\x8E
 152\xE8\xB0\x83\xE7\x94\xA8\xE7\x9B\xB8\xE5\x85\xB3\xE8\x81\x94\xE7\x9A\x84\xE5\x87\xBD\xE6\x95\xB0\xE3\x80\x82
 153
 154
 155\xE7\xA4\xBA\xE4\xBE\x8B:
 156
 157#define to_dev(obj) container_of(obj, struct device, kobj)
 158#define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr)
 159
 160static ssize_t dev_attr_show(struct kobject *kobj, struct attribute *attr,
 161                             char *buf)
 162{
 163        struct device_attribute *dev_attr = to_dev_attr(attr);
 164        struct device *dev = to_dev(kobj);
 165        ssize_t ret = -EIO;
 166
 167        if (dev_attr->show)
 168                ret = dev_attr->show(dev, dev_attr, buf);
 169        if (ret >= (ssize_t)PAGE_SIZE) {
 170                print_symbol("dev_attr_show: %s returned bad count\n",
 171                                (unsigned long)dev_attr->show);
 172        }
 173        return ret;
 174}
 175
 176
 177
 178\xE8\xAF\xBB\xE5\x86\x99\xE5\xB1\x9E\xE6\x80\xA7\xE6\x95\xB0\xE6\x8D\xAE
 179~~~~~~~~~~~~
 180
 181\xE5\x9C\xA8\xE5\xA3\xB0\xE6\x98\x8E\xE5\xB1\x9E\xE6\x80\xA7\xE6\x97\xB6\xEF\xBC\x8C\xE5\xBF\x85\xE9\xA1\xBB\xE6\x8C\x87\xE5\xAE\x9A show() \xE6\x88\x96 store() \xE6\x96\xB9\xE6\xB3\x95\xEF\xBC\x8C\xE4\xBB\xA5\xE5\xAE\x9E\xE7\x8E\xB0\xE5\xB1\x9E\xE6\x80\xA7\xE7\x9A\x84
 182\xE8\xAF\xBB\xE6\x88\x96\xE5\x86\x99\xE3\x80\x82\xE8\xBF\x99\xE4\xBA\x9B\xE6\x96\xB9\xE6\xB3\x95\xE7\x9A\x84\xE7\xB1\xBB\xE5\x9E\x8B\xE5\xBA\x94\xE8\xAF\xA5\xE5\x92\x8C\xE4\xBB\xA5\xE4\xB8\x8B\xE7\x9A\x84\xE8\xAE\xBE\xE5\xA4\x87\xE5\xB1\x9E\xE6\x80\xA7\xE5\xAE\x9A\xE4\xB9\x89\xE4\xB8\x80\xE6\xA0\xB7\xE7\xAE\x80\xE5\x8D\x95\xE3\x80\x82
 183
 184ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf);
 185ssize_t (*store)(struct device *dev, struct device_attribute *attr,
 186                 const char *buf, size_t count);
 187
 188\xE4\xB9\x9F\xE5\xB0\xB1\xE6\x98\xAF\xE8\xAF\xB4,\xE4\xBB\x96\xE4\xBB\xAC\xE5\xBA\x94\xE5\x8F\xAA\xE4\xBB\xA5\xE4\xB8\x80\xE4\xB8\xAA\xE5\xA4\x84\xE7\x90\x86\xE5\xAF\xB9\xE8\xB1\xA1\xE3\x80\x81\xE4\xB8\x80\xE4\xB8\xAA\xE5\xB1\x9E\xE6\x80\xA7\xE5\x92\x8C\xE4\xB8\x80\xE4\xB8\xAA\xE7\xBC\x93\xE5\x86\xB2\xE6\x8C\x87\xE9\x92\x88\xE4\xBD\x9C\xE4\xB8\xBA\xE5\x8F\x82\xE6\x95\xB0\xE3\x80\x82
 189
 190sysfs \xE4\xBC\x9A\xE5\x88\x86\xE9\x85\x8D\xE4\xB8\x80\xE4\xB8\xAA\xE5\xA4\xA7\xE5\xB0\x8F\xE4\xB8\xBA (PAGE_SIZE) \xE7\x9A\x84\xE7\xBC\x93\xE5\x86\xB2\xE5\x8C\xBA\xE5\xB9\xB6\xE4\xBC\xA0\xE9\x80\x92\xE7\xBB\x99\xE8\xBF\x99\xE4\xB8\xAA\xE6\x96\xB9\xE6\xB3\x95\xE3\x80\x82
 191Sysfs \xE5\xB0\x86\xE4\xBC\x9A\xE4\xB8\xBA\xE6\xAF\x8F\xE6\xAC\xA1\xE8\xAF\xBB\xE5\x86\x99\xE6\x93\x8D\xE4\xBD\x9C\xE8\xB0\x83\xE7\x94\xA8\xE4\xB8\x80\xE6\xAC\xA1\xE8\xBF\x99\xE4\xB8\xAA\xE6\x96\xB9\xE6\xB3\x95\xE3\x80\x82\xE8\xBF\x99\xE4\xBD\xBF\xE5\xBE\x97\xE8\xBF\x99\xE4\xBA\x9B\xE6\x96\xB9\xE6\xB3\x95\xE5\x9C\xA8\xE6\x89\xA7\xE8\xA1\x8C\xE6\x97\xB6
 192\xE4\xBC\x9A\xE5\x87\xBA\xE7\x8E\xB0\xE4\xBB\xA5\xE4\xB8\x8B\xE7\x9A\x84\xE8\xA1\x8C\xE4\xB8\xBA:
 193
 194- \xE5\x9C\xA8\xE8\xAF\xBB\xE6\x96\xB9\xE9\x9D\xA2\xEF\xBC\x88read(2)\xEF\xBC\x89\xEF\xBC\x8Cshow() \xE6\x96\xB9\xE6\xB3\x95\xE5\xBA\x94\xE8\xAF\xA5\xE5\xA1\xAB\xE5\x85\x85\xE6\x95\xB4\xE4\xB8\xAA\xE7\xBC\x93\xE5\x86\xB2\xE5\x8C\xBA\xE3\x80\x82\xE5\x9B\x9E\xE6\x83\xB3\xE5\xB1\x9E\xE6\x80\xA7
 195  \xE5\xBA\x94\xE5\x8F\xAA\xE5\xAF\xBC\xE5\x87\xBA\xE4\xBA\x86\xE4\xB8\x80\xE4\xB8\xAA\xE5\xB1\x9E\xE6\x80\xA7\xE5\x80\xBC\xE6\x88\x96\xE6\x98\xAF\xE4\xB8\x80\xE4\xB8\xAA\xE5\x90\x8C\xE7\xB1\xBB\xE5\x9E\x8B\xE5\xB1\x9E\xE6\x80\xA7\xE5\x80\xBC\xE7\x9A\x84\xE6\x95\xB0\xE7\xBB\x84\xEF\xBC\x8C\xE6\x89\x80\xE4\xBB\xA5\xE8\xBF\x99\xE4\xB8\xAA\xE4\xBB\xA3\xE4\xBB\xB7\xE5\xB0\x86
 196  \xE4\xB8\x8D\xE4\xBC\x9A\xE4\xB8\x8D\xE5\xA4\xAA\xE9\xAB\x98\xE3\x80\x82
 197
 198  \xE8\xBF\x99\xE4\xBD\xBF\xE5\xBE\x97\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE5\x8F\xAF\xE4\xBB\xA5\xE5\xB1\x80\xE9\x83\xA8\xE5\x9C\xB0\xE8\xAF\xBB\xE5\x92\x8C\xE4\xBB\xBB\xE6\x84\x8F\xE7\x9A\x84\xE5\x90\x91\xE5\x89\x8D\xE6\x90\x9C\xE7\xB4\xA2\xE6\x95\xB4\xE4\xB8\xAA\xE6\x96\x87\xE4\xBB\xB6\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4
 199  \xE5\x90\x91\xE5\x90\x8E\xE6\x90\x9C\xE7\xB4\xA2\xE5\x88\xB0\xE9\x9B\xB6\xE6\x88\x96\xE4\xBD\xBF\xE7\x94\xA8\xE2\x80\x980\xE2\x80\x99\xE5\x81\x8F\xE7\xA7\xBB\xE6\x89\xA7\xE8\xA1\x8C\xE4\xB8\x80\xE4\xB8\xAApread(2)\xE6\x93\x8D\xE4\xBD\x9C\xEF\xBC\x8Cshow()\xE6\x96\xB9\xE6\xB3\x95\xE5\xB0\x86
 200  \xE5\x86\x8D\xE6\xAC\xA1\xE8\xA2\xAB\xE8\xB0\x83\xE7\x94\xA8\xEF\xBC\x8C\xE4\xBB\xA5\xE9\x87\x8D\xE6\x96\xB0\xE5\xA1\xAB\xE5\x85\x85\xE7\xBC\x93\xE5\xAD\x98\xE3\x80\x82
 201
 202- \xE5\x9C\xA8\xE5\x86\x99\xE6\x96\xB9\xE9\x9D\xA2\xEF\xBC\x88write(2)\xEF\xBC\x89\xEF\xBC\x8Csysfs \xE5\xB8\x8C\xE6\x9C\x9B\xE5\x9C\xA8\xE7\xAC\xAC\xE4\xB8\x80\xE6\xAC\xA1\xE5\x86\x99\xE6\x93\x8D\xE4\xBD\x9C\xE6\x97\xB6\xE5\xBE\x97\xE5\x88\xB0\xE6\x95\xB4\xE4\xB8\xAA\xE7\xBC\x93\xE5\x86\xB2\xE5\x8C\xBA\xE3\x80\x82
 203  \xE4\xB9\x8B\xE5\x90\x8E Sysfs \xE4\xBC\xA0\xE9\x80\x92\xE6\x95\xB4\xE4\xB8\xAA\xE7\xBC\x93\xE5\x86\xB2\xE5\x8C\xBA\xE7\xBB\x99 store() \xE6\x96\xB9\xE6\xB3\x95\xE3\x80\x82
 204
 205  \xE5\xBD\x93\xE8\xA6\x81\xE5\x86\x99 sysfs \xE6\x96\x87\xE4\xBB\xB6\xE6\x97\xB6\xEF\xBC\x8C\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE8\xBF\x9B\xE7\xA8\x8B\xE5\xBA\x94\xE9\xA6\x96\xE5\x85\x88\xE8\xAF\xBB\xE5\x8F\x96\xE6\x95\xB4\xE4\xB8\xAA\xE6\x96\x87\xE4\xBB\xB6\xEF\xBC\x8C\xE4\xBF\xAE\xE8\xAF\xA5\xE6\x83\xB3\xE8\xA6\x81
 206  \xE6\x94\xB9\xE5\x8F\x98\xE7\x9A\x84\xE5\x80\xBC\xEF\xBC\x8C\xE7\x84\xB6\xE5\x90\x8E\xE5\x9B\x9E\xE5\x86\x99\xE6\x95\xB4\xE4\xB8\xAA\xE7\xBC\x93\xE5\x86\xB2\xE5\x8C\xBA\xE3\x80\x82
 207
 208  \xE5\x9C\xA8\xE8\xAF\xBB\xE5\x86\x99\xE5\xB1\x9E\xE6\x80\xA7\xE5\x80\xBC\xE6\x97\xB6\xEF\xBC\x8C\xE5\xB1\x9E\xE6\x80\xA7\xE6\x96\xB9\xE6\xB3\x95\xE7\x9A\x84\xE6\x89\xA7\xE8\xA1\x8C\xE5\xBA\x94\xE6\x93\x8D\xE4\xBD\x9C\xE7\x9B\xB8\xE5\x90\x8C\xE7\x9A\x84\xE7\xBC\x93\xE5\x86\xB2\xE5\x8C\xBA\xE3\x80\x82
 209
 210\xE6\xB3\xA8\xE8\xAE\xB0:
 211
 212- \xE5\x86\x99\xE6\x93\x8D\xE4\xBD\x9C\xE5\xAF\xBC\xE8\x87\xB4\xE7\x9A\x84 show() \xE6\x96\xB9\xE6\xB3\x95\xE9\x87\x8D\xE8\xBD\xBD\xEF\xBC\x8C\xE4\xBC\x9A\xE5\xBF\xBD\xE7\x95\xA5\xE5\xBD\x93\xE5\x89\x8D\xE6\x96\x87\xE4\xBB\xB6\xE4\xBD\x8D\xE7\xBD\xAE\xE3\x80\x82
 213
 214- \xE7\xBC\x93\xE5\x86\xB2\xE5\x8C\xBA\xE5\xBA\x94\xE6\x80\xBB\xE6\x98\xAF PAGE_SIZE \xE5\xA4\xA7\xE5\xB0\x8F\xE3\x80\x82\xE5\xAF\xB9\xE4\xBA\x8Ei386\xEF\xBC\x8C\xE8\xBF\x99\xE4\xB8\xAA\xE5\x80\xBC\xE4\xB8\xBA4096\xE3\x80\x82
 215
 216- show() \xE6\x96\xB9\xE6\xB3\x95\xE5\xBA\x94\xE8\xAF\xA5\xE8\xBF\x94\xE5\x9B\x9E\xE5\x86\x99\xE5\x85\xA5\xE7\xBC\x93\xE5\x86\xB2\xE5\x8C\xBA\xE7\x9A\x84\xE5\xAD\x97\xE8\x8A\x82\xE6\x95\xB0\xEF\xBC\x8C\xE4\xB9\x9F\xE5\xB0\xB1\xE6\x98\xAF snprintf()\xE7\x9A\x84
 217  \xE8\xBF\x94\xE5\x9B\x9E\xE5\x80\xBC\xE3\x80\x82
 218
 219- show() \xE5\xBA\x94\xE5\xA7\x8B\xE7\xBB\x88\xE4\xBD\xBF\xE7\x94\xA8 snprintf()\xE3\x80\x82
 220
 221- store() \xE5\xBA\x94\xE8\xBF\x94\xE5\x9B\x9E\xE7\xBC\x93\xE5\x86\xB2\xE5\x8C\xBA\xE7\x9A\x84\xE5\xB7\xB2\xE7\x94\xA8\xE5\xAD\x97\xE8\x8A\x82\xE6\x95\xB0\xE3\x80\x82\xE5\xA6\x82\xE6\x9E\x9C\xE6\x95\xB4\xE4\xB8\xAA\xE7\xBC\x93\xE5\xAD\x98\xE9\x83\xBD\xE5\xB7\xB2\xE5\xA1\xAB\xE6\xBB\xA1\xEF\xBC\x8C\xE5\x8F\xAA\xE9\x9C\x80\xE8\xBF\x94\xE5\x9B\x9E
 222  count \xE5\x8F\x82\xE6\x95\xB0\xE3\x80\x82
 223
 224- show() \xE6\x88\x96 store() \xE5\x8F\xAF\xE4\xBB\xA5\xE8\xBF\x94\xE5\x9B\x9E\xE9\x94\x99\xE8\xAF\xAF\xE5\x80\xBC\xE3\x80\x82\xE5\xBD\x93\xE5\xBE\x97\xE5\x88\xB0\xE4\xB8\x80\xE4\xB8\xAA\xE9\x9D\x9E\xE6\xB3\x95\xE5\x80\xBC\xEF\xBC\x8C\xE5\xBF\x85\xE9\xA1\xBB\xE8\xBF\x94\xE5\x9B\x9E\xE4\xB8\x80\xE4\xB8\xAA
 225  \xE9\x94\x99\xE8\xAF\xAF\xE5\x80\xBC\xE3\x80\x82
 226
 227- \xE4\xB8\x80\xE4\xB8\xAA\xE4\xBC\xA0\xE9\x80\x92\xE7\xBB\x99\xE6\x96\xB9\xE6\xB3\x95\xE7\x9A\x84\xE5\xAF\xB9\xE8\xB1\xA1\xE5\xB0\x86\xE4\xBC\x9A\xE9\x80\x9A\xE8\xBF\x87 sysfs \xE8\xB0\x83\xE7\x94\xA8\xE5\xAF\xB9\xE8\xB1\xA1\xE5\x86\x85\xE5\xB5\x8C\xE7\x9A\x84\xE5\xBC\x95\xE7\x94\xA8\xE8\xAE\xA1\xE6\x95\xB0\xE5\x9B\xBA\xE5\xAE\x9A\xE5\x9C\xA8
 228  \xE5\x86\x85\xE5\xAD\x98\xE4\xB8\xAD\xE3\x80\x82\xE5\xB0\xBD\xE7\xAE\xA1\xE5\xA6\x82\xE6\xAD\xA4\xEF\xBC\x8C\xE5\xAF\xB9\xE8\xB1\xA1\xE4\xBB\xA3\xE8\xA1\xA8\xE7\x9A\x84\xE7\x89\xA9\xE7\x90\x86\xE5\xAE\x9E\xE4\xBD\x93(\xE5\xA6\x82\xE8\xAE\xBE\xE5\xA4\x87)\xE5\x8F\xAF\xE8\x83\xBD\xE5\xB7\xB2\xE4\xB8\x8D\xE5\xAD\x98\xE5\x9C\xA8\xE3\x80\x82\xE5\xA6\x82\xE6\x9C\x89\xE5\xBF\x85\xE8\xA6\x81\xEF\xBC\x8C
 229  \xE5\xBA\x94\xE8\xAF\xA5\xE5\xAE\x9E\xE7\x8E\xB0\xE4\xB8\x80\xE4\xB8\xAA\xE6\xA3\x80\xE6\xB5\x8B\xE6\x9C\xBA\xE5\x88\xB6\xE3\x80\x82
 230
 231\xE4\xB8\x80\xE4\xB8\xAA\xE7\xAE\x80\xE5\x8D\x95\xE7\x9A\x84(\xE6\x9C\xAA\xE7\xBB\x8F\xE5\xAE\x9E\xE9\xAA\x8C\xE8\xAF\x81\xE5\xAE\x9E\xE7\x9A\x84)\xE8\xAE\xBE\xE5\xA4\x87\xE5\xB1\x9E\xE6\x80\xA7\xE5\xAE\x9E\xE7\x8E\xB0\xE5\xA6\x82\xE4\xB8\x8B\xEF\xBC\x9A
 232
 233static ssize_t show_name(struct device *dev, struct device_attribute *attr,
 234                         char *buf)
 235{
 236        return scnprintf(buf, PAGE_SIZE, "%s\n", dev->name);
 237}
 238
 239static ssize_t store_name(struct device *dev, struct device_attribute *attr,
 240                          const char *buf, size_t count)
 241{
 242        snprintf(dev->name, sizeof(dev->name), "%.*s",
 243                 (int)min(count, sizeof(dev->name) - 1), buf);
 244        return count;
 245}
 246
 247static DEVICE_ATTR(name, S_IRUGO, show_name, store_name);
 248
 249
 250\xEF\xBC\x88\xE6\xB3\xA8\xE6\x84\x8F\xEF\xBC\x9A\xE7\x9C\x9F\xE6\xAD\xA3\xE7\x9A\x84\xE5\xAE\x9E\xE7\x8E\xB0\xE4\xB8\x8D\xE5\x85\x81\xE8\xAE\xB8\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE8\xAE\xBE\xE7\xBD\xAE\xE8\xAE\xBE\xE5\xA4\x87\xE5\x90\x8D\xE3\x80\x82\xEF\xBC\x89
 251
 252\xE9\xA1\xB6\xE5\xB1\x82\xE7\x9B\xAE\xE5\xBD\x95\xE5\xB8\x83\xE5\xB1\x80
 253~~~~~~~~~~~~
 254
 255sysfs \xE7\x9B\xAE\xE5\xBD\x95\xE7\x9A\x84\xE5\xAE\x89\xE6\x8E\x92\xE6\x98\xBE\xE7\xA4\xBA\xE4\xBA\x86\xE5\x86\x85\xE6\xA0\xB8\xE6\x95\xB0\xE6\x8D\xAE\xE7\xBB\x93\xE6\x9E\x84\xE4\xB9\x8B\xE9\x97\xB4\xE7\x9A\x84\xE5\x85\xB3\xE7\xB3\xBB\xE3\x80\x82
 256
 257\xE9\xA1\xB6\xE5\xB1\x82 sysfs \xE7\x9B\xAE\xE5\xBD\x95\xE5\xA6\x82\xE4\xB8\x8B:
 258
 259block/
 260bus/
 261class/
 262dev/
 263devices/
 264firmware/
 265net/
 266fs/
 267
 268devices/ \xE5\x8C\x85\xE5\x90\xAB\xE4\xBA\x86\xE4\xB8\x80\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE6\xA0\x91\xE7\x9A\x84\xE6\x96\x87\xE4\xBB\xB6\xE7\xB3\xBB\xE7\xBB\x9F\xE8\xA1\xA8\xE7\xA4\xBA\xE3\x80\x82\xE4\xBB\x96\xE7\x9B\xB4\xE6\x8E\xA5\xE6\x98\xA0\xE5\xB0\x84\xE4\xBA\x86\xE5\x86\x85\xE9\x83\xA8\xE7\x9A\x84\xE5\x86\x85\xE6\xA0\xB8
 269\xE8\xAE\xBE\xE5\xA4\x87\xE6\xA0\x91\xEF\xBC\x8C\xE5\x8F\x8D\xE6\x98\xA0\xE4\xBA\x86\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE5\xB1\x82\xE6\xAC\xA1\xE7\xBB\x93\xE6\x9E\x84\xE3\x80\x82
 270
 271bus/ \xE5\x8C\x85\xE5\x90\xAB\xE4\xBA\x86\xE5\x86\x85\xE6\xA0\xB8\xE4\xB8\xAD\xE5\x90\x84\xE7\xA7\x8D\xE6\x80\xBB\xE7\xBA\xBF\xE7\xB1\xBB\xE5\x9E\x8B\xE7\x9A\x84\xE5\xB9\xB3\xE9\x9D\xA2\xE7\x9B\xAE\xE5\xBD\x95\xE5\xB8\x83\xE5\xB1\x80\xE3\x80\x82\xE6\xAF\x8F\xE4\xB8\xAA\xE6\x80\xBB\xE7\xBA\xBF\xE7\x9B\xAE\xE5\xBD\x95\xE5\x8C\x85\xE5\x90\xAB\xE4\xB8\xA4\xE4\xB8\xAA
 272\xE5\xAD\x90\xE7\x9B\xAE\xE5\xBD\x95:
 273
 274        devices/
 275        drivers/
 276
 277devices/ \xE5\x8C\x85\xE5\x90\xAB\xE4\xBA\x86\xE7\xB3\xBB\xE7\xBB\x9F\xE4\xB8\xAD\xE5\x87\xBA\xE7\x8E\xB0\xE7\x9A\x84\xE6\xAF\x8F\xE4\xB8\xAA\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9A\x84\xE7\xAC\xA6\xE5\x8F\xB7\xE9\x93\xBE\xE6\x8E\xA5\xEF\xBC\x8C\xE4\xBB\x96\xE4\xBB\xAC\xE6\x8C\x87\xE5\x90\x91 root/ \xE4\xB8\x8B\xE7\x9A\x84
 278\xE8\xAE\xBE\xE5\xA4\x87\xE7\x9B\xAE\xE5\xBD\x95\xE3\x80\x82
 279
 280drivers/ \xE5\x8C\x85\xE5\x90\xAB\xE4\xBA\x86\xE6\xAF\x8F\xE4\xB8\xAA\xE5\xB7\xB2\xE4\xB8\xBA\xE7\x89\xB9\xE5\xAE\x9A\xE6\x80\xBB\xE7\xBA\xBF\xE4\xB8\x8A\xE7\x9A\x84\xE8\xAE\xBE\xE5\xA4\x87\xE8\x80\x8C\xE6\x8C\x82\xE8\xBD\xBD\xE7\x9A\x84\xE9\xA9\xB1\xE5\x8A\xA8\xE7\xA8\x8B\xE5\xBA\x8F\xE7\x9A\x84\xE7\x9B\xAE\xE5\xBD\x95(\xE8\xBF\x99\xE9\x87\x8C
 281\xE5\x81\x87\xE5\xAE\x9A\xE9\xA9\xB1\xE5\x8A\xA8\xE6\xB2\xA1\xE6\x9C\x89\xE8\xB7\xA8\xE8\xB6\x8A\xE5\xA4\x9A\xE4\xB8\xAA\xE6\x80\xBB\xE7\xBA\xBF\xE7\xB1\xBB\xE5\x9E\x8B)\xE3\x80\x82
 282
 283fs/ \xE5\x8C\x85\xE5\x90\xAB\xE4\xBA\x86\xE4\xB8\x80\xE4\xB8\xAA\xE4\xB8\xBA\xE6\x96\x87\xE4\xBB\xB6\xE7\xB3\xBB\xE7\xBB\x9F\xE8\xAE\xBE\xE7\xAB\x8B\xE7\x9A\x84\xE7\x9B\xAE\xE5\xBD\x95\xE3\x80\x82\xE7\x8E\xB0\xE5\x9C\xA8\xE6\xAF\x8F\xE4\xB8\xAA\xE6\x83\xB3\xE8\xA6\x81\xE5\xAF\xBC\xE5\x87\xBA\xE5\xB1\x9E\xE6\x80\xA7\xE7\x9A\x84\xE6\x96\x87\xE4\xBB\xB6\xE7\xB3\xBB\xE7\xBB\x9F\xE5\xBF\x85\xE9\xA1\xBB
 284\xE5\x9C\xA8 fs/ \xE4\xB8\x8B\xE5\x88\x9B\xE5\xBB\xBA\xE8\x87\xAA\xE5\xB7\xB1\xE7\x9A\x84\xE5\xB1\x82\xE6\xAC\xA1\xE7\xBB\x93\xE6\x9E\x84(\xE5\x8F\x82\xE8\xA7\x81Documentation/filesystems/fuse.txt)\xE3\x80\x82
 285
 286dev/ \xE5\x8C\x85\xE5\x90\xAB\xE4\xB8\xA4\xE4\xB8\xAA\xE5\xAD\x90\xE7\x9B\xAE\xE5\xBD\x95\xEF\xBC\x9A char/ \xE5\x92\x8C block/\xE3\x80\x82\xE5\x9C\xA8\xE8\xBF\x99\xE4\xB8\xA4\xE4\xB8\xAA\xE5\xAD\x90\xE7\x9B\xAE\xE5\xBD\x95\xE4\xB8\xAD\xEF\xBC\x8C\xE6\x9C\x89\xE4\xBB\xA5
 287<major>:<minor> \xE6\xA0\xBC\xE5\xBC\x8F\xE5\x91\xBD\xE5\x90\x8D\xE7\x9A\x84\xE7\xAC\xA6\xE5\x8F\xB7\xE9\x93\xBE\xE6\x8E\xA5\xE3\x80\x82\xE8\xBF\x99\xE4\xBA\x9B\xE7\xAC\xA6\xE5\x8F\xB7\xE9\x93\xBE\xE6\x8E\xA5\xE6\x8C\x87\xE5\x90\x91 sysfs \xE7\x9B\xAE\xE5\xBD\x95
 288\xE4\xB8\xAD\xE7\x9B\xB8\xE5\xBA\x94\xE7\x9A\x84\xE8\xAE\xBE\xE5\xA4\x87\xE3\x80\x82/sys/dev \xE6\x8F\x90\xE4\xBE\x9B\xE4\xB8\x80\xE4\xB8\xAA\xE9\x80\x9A\xE8\xBF\x87\xE4\xB8\x80\xE4\xB8\xAA stat(2) \xE6\x93\x8D\xE4\xBD\x9C\xE7\xBB\x93\xE6\x9E\x9C\xEF\xBC\x8C\xE6\x9F\xA5\xE6\x89\xBE
 289\xE8\xAE\xBE\xE5\xA4\x87 sysfs \xE6\x8E\xA5\xE5\x8F\xA3\xE5\xBF\xAB\xE6\x8D\xB7\xE7\x9A\x84\xE6\x96\xB9\xE6\xB3\x95\xE3\x80\x82
 290
 291\xE6\x9B\xB4\xE5\xA4\x9A\xE6\x9C\x89\xE5\x85\xB3 driver-model \xE7\x9A\x84\xE7\x89\xB9\xE6\x80\xA7\xE4\xBF\xA1\xE6\x81\xAF\xE5\x8F\xAF\xE4\xBB\xA5\xE5\x9C\xA8 Documentation/driver-model/
 292\xE4\xB8\xAD\xE6\x89\xBE\xE5\x88\xB0\xE3\x80\x82
 293
 294
 295TODO: \xE5\xAE\x8C\xE6\x88\x90\xE8\xBF\x99\xE4\xB8\x80\xE8\x8A\x82\xE3\x80\x82
 296
 297
 298\xE5\xBD\x93\xE5\x89\x8D\xE6\x8E\xA5\xE5\x8F\xA3
 299~~~~~~~~
 300
 301\xE4\xBB\xA5\xE4\xB8\x8B\xE7\x9A\x84\xE6\x8E\xA5\xE5\x8F\xA3\xE5\xB1\x82\xE6\x99\xAE\xE9\x81\x8D\xE5\xAD\x98\xE5\x9C\xA8\xE4\xBA\x8E\xE5\xBD\x93\xE5\x89\x8D\xE7\x9A\x84sysfs\xE4\xB8\xAD:
 302
 303- \xE8\xAE\xBE\xE5\xA4\x87 (include/linux/device.h)
 304----------------------------------
 305\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93:
 306
 307struct device_attribute {
 308        struct attribute        attr;
 309        ssize_t (*show)(struct device *dev, struct device_attribute *attr,
 310                        char *buf);
 311        ssize_t (*store)(struct device *dev, struct device_attribute *attr,
 312                         const char *buf, size_t count);
 313};
 314
 315\xE5\xA3\xB0\xE6\x98\x8E:
 316
 317DEVICE_ATTR(_name, _mode, _show, _store);
 318
 319\xE5\xA2\x9E/\xE5\x88\xA0\xE5\xB1\x9E\xE6\x80\xA7:
 320
 321int device_create_file(struct device *dev, const struct device_attribute * attr);
 322void device_remove_file(struct device *dev, const struct device_attribute * attr);
 323
 324
 325- \xE6\x80\xBB\xE7\xBA\xBF\xE9\xA9\xB1\xE5\x8A\xA8\xE7\xA8\x8B\xE5\xBA\x8F (include/linux/device.h)
 326--------------------------------------
 327\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93:
 328
 329struct bus_attribute {
 330        struct attribute        attr;
 331        ssize_t (*show)(struct bus_type *, char * buf);
 332        ssize_t (*store)(struct bus_type *, const char * buf, size_t count);
 333};
 334
 335\xE5\xA3\xB0\xE6\x98\x8E:
 336
 337BUS_ATTR(_name, _mode, _show, _store)
 338
 339\xE5\xA2\x9E/\xE5\x88\xA0\xE5\xB1\x9E\xE6\x80\xA7:
 340
 341int bus_create_file(struct bus_type *, struct bus_attribute *);
 342void bus_remove_file(struct bus_type *, struct bus_attribute *);
 343
 344
 345- \xE8\xAE\xBE\xE5\xA4\x87\xE9\xA9\xB1\xE5\x8A\xA8\xE7\xA8\x8B\xE5\xBA\x8F (include/linux/device.h)
 346-----------------------------------------
 347
 348\xE7\xBB\x93\xE6\x9E\x84\xE4\xBD\x93:
 349
 350struct driver_attribute {
 351        struct attribute        attr;
 352        ssize_t (*show)(struct device_driver *, char * buf);
 353        ssize_t (*store)(struct device_driver *, const char * buf,
 354                         size_t count);
 355};
 356
 357\xE5\xA3\xB0\xE6\x98\x8E:
 358
 359DRIVER_ATTR(_name, _mode, _show, _store)
 360
 361\xE5\xA2\x9E/\xE5\x88\xA0\xE5\xB1\x9E\xE6\x80\xA7\xEF\xBC\x9A
 362
 363int driver_create_file(struct device_driver *, const struct driver_attribute *);
 364void driver_remove_file(struct device_driver *, const struct driver_attribute *);
 365
 366
 367\xE6\x96\x87\xE6\xA1\xA3
 368~~~~
 369
 370sysfs \xE7\x9B\xAE\xE5\xBD\x95\xE7\xBB\x93\xE6\x9E\x84\xE4\xBB\xA5\xE5\x8F\x8A\xE5\x85\xB6\xE4\xB8\xAD\xE5\x8C\x85\xE5\x90\xAB\xE7\x9A\x84\xE5\xB1\x9E\xE6\x80\xA7\xE5\xAE\x9A\xE4\xB9\x89\xE4\xBA\x86\xE4\xB8\x80\xE4\xB8\xAA\xE5\x86\x85\xE6\xA0\xB8\xE4\xB8\x8E\xE7\x94\xA8\xE6\x88\xB7\xE7\xA9\xBA\xE9\x97\xB4\xE4\xB9\x8B\xE9\x97\xB4\xE7\x9A\x84 ABI\xE3\x80\x82
 371\xE5\xAF\xB9\xE4\xBA\x8E\xE4\xBB\xBB\xE4\xBD\x95 ABI\xEF\xBC\x8C\xE5\x85\xB6\xE8\x87\xAA\xE8\xBA\xAB\xE7\x9A\x84\xE7\xA8\xB3\xE5\xAE\x9A\xE5\x92\x8C\xE9\x80\x82\xE5\xBD\x93\xE7\x9A\x84\xE6\x96\x87\xE6\xA1\xA3\xE6\x98\xAF\xE9\x9D\x9E\xE5\xB8\xB8\xE9\x87\x8D\xE8\xA6\x81\xE7\x9A\x84\xE3\x80\x82\xE6\x89\x80\xE6\x9C\x89\xE6\x96\xB0\xE7\x9A\x84 sysfs
 372\xE5\xB1\x9E\xE6\x80\xA7\xE5\xBF\x85\xE9\xA1\xBB\xE5\x9C\xA8 Documentation/ABI \xE4\xB8\xAD\xE6\x9C\x89\xE6\x96\x87\xE6\xA1\xA3\xE3\x80\x82\xE8\xAF\xA6\xE8\xA7\x81 Documentation/ABI/README\xE3\x80\x82
 373
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.