~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/Documentation/translations/zh_TW/filesystems/sysfs.txt

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /Documentation/translations/zh_TW/filesystems/sysfs.txt (Version linux-6.12-rc7) and /Documentation/translations/zh_TW/filesystems/sysfs.txt (Version linux-2.6.32.71)


  1 SPDX-License-Identifier: GPL-2.0                  
  2                                                   
  3 Chinese translated version of Documentation/fi    
  4                                                   
  5 If you have any comment or update to the conte    
  6 original document maintainer directly.  Howeve    
  7 communicating in English you can also ask the     
  8 help.  Contact the Chinese maintainer if this     
  9 or if there is a problem with the translation.    
 10                                                   
 11 Maintainer: Patrick Mochel      <mochel@osdl.or    
 12                 Mike Murphy <mamurph@cs.clemson    
 13 Chinese maintainer: Fu Wei <tekkamanninja@gmail    
 14 ----------------------------------------------    
 15 Documentation/filesystems/sysfs.rst 的中文    
 16                                                   
 17 如果想評論或更新本文的內容,請    
 18 交流有困難的話,也可以向中文版    
 19 譯存在問題,請聯繫中文版維護者    
 20 英文版維護者: Patrick Mochel    <mochel    
 21                 Mike Murphy <mamurph@cs.clemson    
 22 中文版維護者: 傅煒 Fu Wei <tekkamanni    
 23 中文版翻譯者: 傅煒 Fu Wei <tekkamanni    
 24 中文版校譯者: 傅煒 Fu Wei <tekkamanni    
 25 繁體中文版校譯者:胡皓文 Hu Haowen<    
 26                                                   
 27                                                   
 28 以下爲正文                                   
 29 ----------------------------------------------    
 30 sysfs - 用於導出內核對象(kobject)的    
 31                                                   
 32 Patrick Mochel  <mochel@osdl.org>                  
 33 Mike Murphy <mamurph@cs.clemson.edu>               
 34                                                   
 35 修訂:    16 August 2011                         
 36 原始版本:   10 January 2003                   
 37                                                   
 38                                                   
 39 sysfs 簡介:                                     
 40 ~~~~~~~~~~                                        
 41                                                   
 42 sysfs 是一個最初基於 ramfs 且位於內    
 43 數據結構及其屬性,以及它們之間    
 44                                                   
 45 sysfs 始終與 kobject 的底層結構緊密    
 46 Documentation/core-api/kobject.rst 文檔以    
 47 信息。                                         
 48                                                   
 49                                                   
 50 使用 sysfs                                      
 51 ~~~~~~~~~~~                                       
 52                                                   
 53 只要內核配置中定義了 CONFIG_SYSFS     
 54 通過以下命令掛載它:                      
 55                                                   
 56     mount -t sysfs sysfs /sys                     
 57                                                   
 58                                                   
 59 創建目錄                                      
 60 ~~~~~~~~                                          
 61                                                   
 62 任何 kobject 在系統中註冊,就會有    
 63 目錄是作爲該 kobject 的父對象所在    
 64 內核的對象層次到用戶空間。sysfs     
 65 共同祖先;例如:某些對象屬於某    
 66                                                   
 67 Sysfs 在與其目錄關聯的 kernfs_node 對    
 68 目錄的 kobject 的指針。以前,這個     
 69 kobject 文件打開和關閉的引用計數    
 70 引用計數只能通過 sysfs_schedule_callba    
 71                                                   
 72                                                   
 73 屬性                                            
 74 ~~~~                                              
 75                                                   
 76 kobject 的屬性可在文件系統中以普    
 77 了面向文件 I/O 操作的方法,以提    
 78                                                   
 79                                                   
 80 屬性應爲 ASCII 碼文本文件。以一個    
 81 文件只包含一個屬性值可能影響效    
 82 數組也被廣泛地接受。                    
 83                                                   
 84 混合類型、表達多行數據以及一些    
 85 很丟臉的,而且其代碼會在未通知作    
 86                                                   
 87                                                   
 88 一個簡單的屬性結構定義如下:          
 89                                                   
 90 struct attribute {                                
 91         char                    * name;           
 92         struct module           *owner;           
 93         umode_t                 mode;             
 94 };                                                
 95                                                   
 96                                                   
 97 int sysfs_create_file(struct kobject * kobj, c    
 98 void sysfs_remove_file(struct kobject * kobj,     
 99                                                   
100                                                   
101 一個單獨的屬性結構並不包含讀寫    
102 對象類型的屬性定義自己的屬性結    
103                                                   
104 例如:驅動程序模型定義的 device_attr    
105                                                   
106 struct device_attribute {                         
107         struct attribute        attr;             
108         ssize_t (*show)(struct device *dev, st    
109                         char *buf);               
110         ssize_t (*store)(struct device *dev, s    
111                          const char *buf, size    
112 };                                                
113                                                   
114 int device_create_file(struct device *, const     
115 void device_remove_file(struct device *, const    
116                                                   
117 爲了定義設備屬性,同時定義了一    
118                                                   
119 #define DEVICE_ATTR(_name, _mode, _show, _stor    
120 struct device_attribute dev_attr_##_name = __A    
121                                                   
122 例如:聲明                                     
123                                                   
124 static DEVICE_ATTR(foo, S_IWUSR | S_IRUGO, sho    
125                                                   
126 等同於如下代碼:                          
127                                                   
128 static struct device_attribute dev_attr_foo =     
129        .attr    = {                               
130                 .name = "foo",                    
131                 .mode = S_IWUSR | S_IRUGO,        
132                 .show = show_foo,                 
133                 .store = store_foo,               
134         },                                        
135 };                                                
136                                                   
137                                                   
138 子系統特有的回調函數                    
139 ~~~~~~~~~~~~~~~~~~~                               
140                                                   
141 當一個子系統定義一個新的屬性類    
142 以幫助讀寫調用實現屬性所有者的    
143                                                   
144 struct sysfs_ops {                                
145         ssize_t (*show)(struct kobject *, stru    
146         ssize_t (*store)(struct kobject *, str    
147 };                                                
148                                                   
149 [子系統應已經定義了一個 struct kobj    
150 描述符,並在此保存 sysfs_ops 的指    
151 文檔]                                           
152                                                   
153 sysfs 會爲這個類型調用適當的方法    
154 將一般的kobject 和 attribute 結構體指    
155 調用相關聯的函數。                       
156                                                   
157                                                   
158 示例:                                           
159                                                   
160 #define to_dev_attr(_attr) container_of(_attr,    
161                                                   
162 static ssize_t dev_attr_show(struct kobject *k    
163                              char *buf)           
164 {                                                 
165         struct device_attribute *dev_attr = to    
166         struct device *dev = kobj_to_dev(kobj)    
167         ssize_t ret = -EIO;                       
168                                                   
169         if (dev_attr->show)                       
170                 ret = dev_attr->show(dev, dev_    
171         if (ret >= (ssize_t)PAGE_SIZE) {          
172                 printk("dev_attr_show: %pS ret    
173                                 dev_attr->show    
174         }                                         
175         return ret;                               
176 }                                                 
177                                                   
178                                                   
179                                                   
180 讀寫屬性數據                                
181 ~~~~~~~~~~~~                                      
182                                                   
183 在聲明屬性時,必須指定 show() 或 s    
184 讀或寫。這些方法的類型應該和以    
185                                                   
186 ssize_t (*show)(struct device *dev, struct dev    
187 ssize_t (*store)(struct device *dev, struct de    
188                  const char *buf, size_t count    
189                                                   
190 也就是說,他們應只以一個處理對象    
191                                                   
192 sysfs 會分配一個大小爲 (PAGE_SIZE) 的    
193 Sysfs 將會爲每次讀寫操作調用一次    
194 會出現以下的行爲:                         
195                                                   
196 - 在讀方面(read(2)),show() 方法應    
197   應只導出了一個屬性值或是一個    
198   不會不太高。                              
199                                                   
200   這使得用戶空間可以局部地讀和    
201   向後搜索到零或使用‘0’偏移執    
202   再次被調用,以重新填充緩存。      
203                                                   
204 - 在寫方面(write(2)),sysfs 希望在    
205   之後 Sysfs 傳遞整個緩衝區給 store(    
206                                                   
207   當要寫 sysfs 文件時,用戶空間進    
208   改變的值,然後回寫整個緩衝區    
209                                                   
210   在讀寫屬性值時,屬性方法的執    
211                                                   
212 註記:                                           
213                                                   
214 - 寫操作導致的 show() 方法重載,會    
215                                                   
216 - 緩衝區應總是 PAGE_SIZE 大小。對於    
217                                                   
218 - show() 方法應該返回寫入緩衝區的    
219   返回值。                                    
220                                                   
221 - show() 方法在將格式化返回值返回    
222   如果可以保證不會發生緩衝區溢    
223   scnprintf()。                                  
224                                                   
225 - store() 應返回緩衝區的已用字節數    
226   count 參數。                                 
227                                                   
228 - show() 或 store() 可以返回錯誤值。    
229   錯誤值。                                    
230                                                   
231 - 一個傳遞給方法的對象將會通過 s    
232   內存中。儘管如此,對象代表的    
233   應該實現一個檢測機制。               
234                                                   
235 一個簡單的(未經實驗證實的)設備    
236                                                   
237 static ssize_t show_name(struct device *dev, s    
238                          char *buf)               
239 {                                                 
240         return scnprintf(buf, PAGE_SIZE, "%s\n    
241 }                                                 
242                                                   
243 static ssize_t store_name(struct device *dev,     
244                           const char *buf, siz    
245 {                                                 
246         snprintf(dev->name, sizeof(dev->name),    
247                  (int)min(count, sizeof(dev->n    
248         return count;                             
249 }                                                 
250                                                   
251 static DEVICE_ATTR(name, S_IRUGO, show_name, s    
252                                                   
253                                                   
254 (注意:真正的實現不允許用戶空    
255                                                   
256 頂層目錄佈局                                
257 ~~~~~~~~~~~~                                      
258                                                   
259 sysfs 目錄的安排顯示了內核數據結    
260                                                   
261 頂層 sysfs 目錄如下:                        
262                                                   
263 block/                                            
264 bus/                                              
265 class/                                            
266 dev/                                              
267 devices/                                          
268 firmware/                                         
269 net/                                              
270 fs/                                               
271                                                   
272 devices/ 包含了一個設備樹的文件系    
273 設備樹,反映了設備的層次結構。     
274                                                   
275 bus/ 包含了內核中各種總線類型的    
276 子目錄:                                        
277                                                   
278         devices/                                  
279         drivers/                                  
280                                                   
281 devices/ 包含了系統中出現的每個設    
282 設備目錄。                                   
283                                                   
284 drivers/ 包含了每個已爲特定總線上    
285 假定驅動沒有跨越多個總線類型)。    
286                                                   
287 fs/ 包含了一個爲文件系統設立的目    
288 在 fs/ 下創建自己的層次結構(參見D    
289                                                   
290 dev/ 包含兩個子目錄: char/ 和 block/    
291 <major>:<minor> 格式命名的符號鏈接。    
292 中相應的設備。/sys/dev 提供一個通    
293 設備 sysfs 接口快捷的方法。             
294                                                   
295 更多有關 driver-model 的特性信息可    
296 中找到。                                      
297                                                   
298                                                   
299 TODO: 完成這一節。                          
300                                                   
301                                                   
302 當前接口                                      
303 ~~~~~~~~                                          
304                                                   
305 以下的接口層普遍存在於當前的sysf    
306                                                   
307 - 設備 (include/linux/device.h)                 
308 ----------------------------------                
309 結構體:                                        
310                                                   
311 struct device_attribute {                         
312         struct attribute        attr;             
313         ssize_t (*show)(struct device *dev, st    
314                         char *buf);               
315         ssize_t (*store)(struct device *dev, s    
316                          const char *buf, size    
317 };                                                
318                                                   
319 聲明:                                           
320                                                   
321 DEVICE_ATTR(_name, _mode, _show, _store);         
322                                                   
323 增/刪屬性:                                    
324                                                   
325 int device_create_file(struct device *dev, con    
326 void device_remove_file(struct device *dev, co    
327                                                   
328                                                   
329 - 總線驅動程序 (include/linux/device.h)     
330 --------------------------------------            
331 結構體:                                        
332                                                   
333 struct bus_attribute {                            
334         struct attribute        attr;             
335         ssize_t (*show)(const struct bus_type     
336         ssize_t (*store)(const struct bus_type    
337 };                                                
338                                                   
339 聲明:                                           
340                                                   
341 BUS_ATTR(_name, _mode, _show, _store)             
342                                                   
343 增/刪屬性:                                    
344                                                   
345 int bus_create_file(struct bus_type *, struct     
346 void bus_remove_file(struct bus_type *, struct    
347                                                   
348                                                   
349 - 設備驅動程序 (include/linux/device.h)     
350 -----------------------------------------         
351                                                   
352 結構體:                                        
353                                                   
354 struct driver_attribute {                         
355         struct attribute        attr;             
356         ssize_t (*show)(struct device_driver *    
357         ssize_t (*store)(struct device_driver     
358                          size_t count);           
359 };                                                
360                                                   
361 聲明:                                           
362                                                   
363 DRIVER_ATTR(_name, _mode, _show, _store)          
364                                                   
365 增/刪屬性:                                  
366                                                   
367 int driver_create_file(struct device_driver *,    
368 void driver_remove_file(struct device_driver *    
369                                                   
370                                                   
371 文檔                                            
372 ~~~~                                              
373                                                   
374 sysfs 目錄結構以及其中包含的屬性    
375 對於任何 ABI,其自身的穩定和適當    
376 屬性必須在 Documentation/ABI 中有文檔    
377                                                   
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php