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