1.. include:: ../disclaimer-zh_CN.rst
2
3:Original: Documentation/core-api/kobject.rst
4
5:������:
6
7 ��������� Yanteng Si <siyanteng@loongson.cn>
8
9.. _cn_core_api_kobject.rst:
10
11=======================================================
12������kobjects���ksets���ktypes������������������������������������������
13=======================================================
14
15:������: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
16:������������������: December 19, 2007
17
18������Jon Corbet���2003���10���1������lwn.net������������������������������������������
19https://lwn.net/Articles/51437/
20
21���������������������������������������kobject������������������������������������������������������������
22������kobjects������������������������������������������������������������������������������������������
23������������������������������������������������������������������������������������������������������������
24������������������������������������������������������������
25
26 - ������kobject���������kobject���������������������������Kobjects������������������������
27   ���������������������kobject������������������������������������������������������������������������
28   ������������������������������������sysfs������������������������������
29
30  Kobjects���������������������������������������������������������������������������������������������
31  ���������������������������
32
33  ������������������ **���������** ������������������kobject���������������������������������������������������
34  ���������������������������������������������������������������������������������������������������
35
36 - ktype���������������kobject���������������������������������kobject���������������������������
37   ���������ktype���ktype���������kobject������������������������������������
38
39 - ������kset���������kobjects���������kobjects������������������ktype���������������������
40   ktype���kset���kobjects������������������������������Ksets���������������������kobjects���
41   ������������������������������������������������������kset������������������������������������kobject���
42
43 ���������������������������������������������sysfs������������������������������������������������������
44 ������������kset������������kobject���
45
46 ������������������������������������������������������������������������������������������������������������
47 ���������kobjects���
48
49
50������kobjects
51=============
52
53���������������������������������kobject������������������������������������������������������������
54kobjects������������������������������������������������������������������������������kobjects������
55���������������������������������������������������������������������������������������������kobjects���
56������������������������������������������������������������������������������������������kobject���������
57������������������������������������������������������������������������������������������������C������������
58������������������������������������������������������������������������������������
59
60���������������������������������������������������������������������list_head������������������������������
61���������������������������������������������������������
62
63��������� ``drivers/uio/uio.c`` ������IO���������������������������������������uio���������
64������������������::
65
66    struct uio_map {
67            struct kobject kobj;
68            struct uio_mem *mem;
69    };
70
71������������������uio_map������������������������������kobject������������������kobj������������������
72������������kobjects���������������������������������������������������������������������������kobject
73������������������������������������������������������������������������������������������������������
74kobject���������������������������������������������container_of()������������������ ``<linux/kernel.h>``
75���������::
76
77    container_of(ptr, type, member)
78
79������:
80
81  * ``ptr`` ���������������������kobject������������
82  * ``type`` ������������������������������
83  * ``member`` ��� ``������`` ������������������������������������
84
85container_of()������������������������������������������������������������������������������������������
86uio_map������ **���** ���kobject������������������kp������������������������������ **������** uio_map
87������������������������������::
88
89    struct uio_map *u_map = container_of(kp, struct uio_map, kobj);
90
91������������������������������������������������������������������������kobject������ **������** ���������
92��������������������� ``drivers/uio/uio.c`` ������������������������������������������::
93
94    struct uio_map {
95            struct kobject kobj;
96            struct uio_mem *mem;
97    };
98
99    #define to_map(map) container_of(map, struct uio_map, kobj)
100
101���������������������map���������������������������kobject������������������������������������������::
102
103    struct uio_map *map = to_map(kobj);
104
105
106kobjects������������
107================
108
109���������������kobject���������������������������������������������������������������������������������kobject_init()
110������������::
111
112    void kobject_init(struct kobject *kobj, struct kobj_type *ktype);
113
114ktype���������������kobject������������������������������kobject���������������������������kobj_type���
115���������kobject_init()���������������sysfs������kobject���������������������kobject_add()::
116
117    int kobject_add(struct kobject *kobj, struct kobject *parent,
118                    const char *fmt, ...);
119
120������������������kobject������������kobject���������������������kobject���������������������kset������
121���������������kobject_add()������������������kobj->kset���������kset���kobject���������������
122kobject������������������������kobject_add()���������������NULL������kobject���������������kset
123���������
124
125������kobject���������������������������������������������������������kobject������������������������������������
126���������������������kobject���������������������kobject_rename()::
127
128    int kobject_rename(struct kobject *kobj, const char *new_name);
129
130kobject_rename()���������������������������������������������������name������������������������������������
131���������������������������������������������������
132
133������������kobject_set_name()���������������������������������������������������������������������������
134���������������������������������������������������������������������
135
136���������������kobject���������������������������kobject_name()::
137
138    const char *kobject_name(const struct kobject * kobj);
139
140���������������������������������������������������kobject������������������������������������������������������
141kobject_init_and_add()::
142
143    int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,
144                             struct kobject *parent, const char *fmt, ...);
145
146������������������������������kobject_init()���kobject_add()���������������
147
148
149Uevents
150=======
151
152���������kobject������������kobject���������������������������������������������������������������������������
153���������kobject_uevent()���������::
154
155    int kobject_uevent(struct kobject *kobj, enum kobject_action action);
156
157���kobject��������������������������������������� *KOBJ_ADD* ������������������������kobject������
158������������������������������������������������������������������������������������������������������������������
159������������
160
161���kobject��������������������������������������������������������������� **KOBJ_REMOVE** ���uevent
162������kobject���������������������������������������������������������������
163
164
165������������
166========
167
168kobject���������������������������������������������������������������������������������������������������������
169������������������������������������������������������������������������������������kobject���������������������
170������������::
171
172    struct kobject *kobject_get(struct kobject *kobj);
173    void kobject_put(struct kobject *kobj);
174
175���kobject_get()������������������������kobject������������������������������kobject������������
176
177���������������������������kobject_put()���������������������������������������������������������������������
178������kobject_init()������������������������1���������������kobject���������������������kobject_put()
179���������������������
180
181������kobjects���������������������������������������������������������������������������������������������������
182������������������������������������������������������kobjects���������������������������������������������������
183���������������
184
185���������������struct kobject���������������������������������������������������������������������struct kref
186������������kobject���������������������������������kref������������������������������������Linux������������
187������������������Documentation/core-api/kref.rst
188
189
190���������������������kobjects
191====================
192
193������������������������������������sysfs������������������������������������������������������������������������
194���ksets������������������������������������������������������������������������������kobject���������������
195������������������������������������������������������������������::
196
197    struct kobject *kobject_create_and_add(const char *name, struct kobject *parent);
198
199���������������������������kobject������������������sysfs���������������kobject������������������������
200���������kobject���������������������������������::
201
202    int sysfs_create_file(struct kobject *kobj, const struct attribute *attr);
203
204������::
205
206    int sysfs_create_group(struct kobject *kobj, const struct attribute_group *grp);
207
208���������������������������������������������������kobject_create_and_add()���������kobject���
209������������kobj_attribute���������������������������������������������������������
210
211��������������������� ``samples/kobject/kobject-example.c`` ���������������������������
212kobject���������������������
213
214
215
216ktypes���������������
217================
218
219������������������������������������������������������������������kobject���������������������������������
220������������������������kobject���������������������������������������������������������������������������
221������������������kobject���������������������������sysfs������������������������������������������������
222���������������������������������������������������������������������������������������������������kobject
223������������
224
225������������������������������kobject���������������������������������������������������������������������
226���������������������kobject������������������������������������������������������kobjects������������
227���������������������������������������������������
228
229���������������kobject_add()���������������kobject������������������������kfree()������������
230���������������������������������������kobject_put()������kobject_init()������������������
231kobject_put()���������������������������������������������������
232
233���������������������kobject���release()������������������������������������������������������::
234
235    void my_object_release(struct kobject *kobj)
236    {
237            struct my_object *mine = container_of(kobj, struct my_object, kobj);
238
239            /* Perform any additional cleanup on this object, then... */
240            kfree(mine);
241    }
242
243���������������������������kobject������������������release()���������������������kobject���
244���������������������������������������������������������������������������������������������������������
245������������������������������������������������������������������������������release()������������
246������������������������������������������������������������������������������������������������
247
248���������������������������������������kfree()������������������������������������������������������
249������container_of()���������������������������������������������������������������������������������
250������������������kfree()���
251
252���������kobject������������release������������������������������������������������������������
253������������������kobject������������������������������������������������������
254
255���������������release()���������������������kobject������������������������ktype���������
256���������������������������������kobj_type::
257
258    struct kobj_type {
259            void (*release)(struct kobject *kobj);
260            const struct sysfs_ops *sysfs_ops;
261            const struct attribute_group **default_groups;
262            const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
263            const void *(*namespace)(struct kobject *kobj);
264            void (*get_ownership)(struct kobject *kobj, kuid_t *uid, kgid_t *gid);
265    };
266
267������������������������������������������������kobject������������������������������������������
268������������������kobject���������������������������kobj_type���������������������
269kobject_init()���kobject_init_and_add()���������������������������������������
270���������
271
272���������kobj_type������������release������������������������������kobject���release()
273���������������������������������������������sysfs_ops ��� default_groups���������������
274������������������������ sysfs ������������������������������������������������
275
276default_groups ��������������������������������������������������������������� ktype ������
277��� kobject ���������������
278
279
280ksets
281=====
282
283������kset������������������������������������kobjects������������������������������������������
284������ktype������������������������������������������������������������
285
286������kset���������������:
287
288 - ���������������������������������������������������kset���������������������������������������
289   ���������������������PCI������������������
290
291 - kset������sysfs���������������������������kset���������kobjects���������������������
292   ���������������kset���������������kobject������������������������������kobject���������������
293   sysfs������������������������������������������������������������
294
295 - Ksets������������kobjects��� "���������"������������uevent������������������������
296   ���������������
297
298 ���������������������������������kset���������������������������ksets���������������������kobject���
299 ������������kobject������kset������������������������������������������������������������
300
301 kset���������������������������������������������������������Kobjects���������kset���������������
302 ���������kset���������������������������������������������kset���kobjects���������������
303 ���������������������kset���������������������������������������kobject������
304
305 ������kset���������������kobject���������������������������������������������������������
306 ���������������������������������������������kset������������::
307
308  struct kset *kset_create_and_add(const char *name,
309                                   const struct kset_uevent_ops *uevent_ops,
310                                   struct kobject *parent_kobj);
311
312���������������kset���������������������::
313
314  void kset_unregister(struct kset *k);
315
316������������������������sysfs������������kset���������������������������������������������
317���������������kset���������������������������kset������������������������������������
318���������������������kset_unregister()���������������
319
320������������kset��������������������������������� ``samples/kobject/kset-example.c``
321������������������
322
323������������kset���������������������������kobjects���uevent������������������������
324���������kset_uevent_ops������������::
325
326  struct kset_uevent_ops {
327          int (* const filter)(struct kobject *kobj);
328          const char *(* const name)(struct kobject *kobj);
329          int (* const uevent)(struct kobject *kobj, struct kobj_uevent_env *env);
330  };
331
332
333���������������������kset������������������kobject���uevent���������������������������
334���������������������0������uevent���������������������������
335
336name���������������������������uevent������������������������kset���������������������
337������������������������������kset������������������������������������������������������������
338������������
339
340���uevent������������������������������������uevent������������������������������������
341���������������������������uevent������
342
343���������������������������������������������������������������������������������������kobject
344���������������kset���������������������������������kobject_add()���������������������
345kobject������������kobject_add()������������kset������������������������kobject
346���������kset��� kobject_add()���������������������������
347
348������������������kset���kobject���������kobject������������������������kset������
349������������������������kset���������������������kset���������������������������kobject
350���������������������������������kobject������������kobject���������������kset������
351���������������������kobject���������
352
353
354������Kobject
355===========
356
357���������kobject���kobject���������������������������������������������������������������
358������������������������������������������kobject_put()���������������������kobject���
359������������������������kobject������������������������������������������������������ ``KOBJ_ADD``
360uevent������������������ ``KOBJ_REMOVE`` uevent���������������������������������
361sysfs���������������������������
362
363���������������������������kobject������������������������������������������������������������������
364������������kobject_del()������sysfs���������kobject���������������������kobject
365���������������������������������������������������������������������������������������������������������
366������������������kobject_put()���������������kobject���������������������������
367
368kobject_del()������������������������������������������������������������������������������
369���������������������������������������������������������������������������������������������������
370���������kobject_del()���������������������������������������������������������������������
371������������������������������
372
373
374������������������
375============
376
377������������������ksets���kobjects���������������������������������������������
378``samples/kobject/{kobject-example.c,kset-example.c}`` ���������
379��������� ``CONFIG_SAMPLE_KOBJECT`` ������������������������������������������
380