命令字:!ndx.sysclass

用法描述

可列出所有设备类及其关联的设备
支持的命令行参数:
-h 显示帮助信息,包含命令用法、参数说明及示例

开发过程

1. 找到关键全局变量

关键全局变量 作用
class_kset 统一管理系统中所有已注册的 “设备类”(struct class)(如 net 类、leds 类、tty 类),负责 “功能分类” 的创建与组织。

2. 相关内核源码和数据结构

cp->subsys.kobj.kset = class_kset;
作用:将当前设备类(struct class)对应的内核对象(kobj)所属的kset设置为class_kset。

error = kset_register(&cp->subsys);
注册kset,创建该kset对应的目录(即设备类的目录,如/sys/class/net/

error = class_add_groups(class_get(cls), cls->class_groups);
class_add_groups函数会遍历这些属性组,并调用sysfs相关接口,在设备类的sysfs目录(如/sys/class/net/)下创建对应的属性文件
调用过程为:class_add_groups -> sysfs_create_groups -> internal_create_groups -> internal_create_group -> create_files

error = sysfs_create_link用于在类目录下创建一个指向设备的符号链接

subsys_private

struct subsys_private {
    struct kset subsys;
    struct kset *devices_kset;
    struct list_head interfaces;
    struct mutex mutex;

    struct kset *drivers_kset;
    struct klist klist_devices;
    struct klist klist_drivers;
    struct blocking_notifier_head bus_notifier;
    unsigned int drivers_autoprobe:1;
    struct bus_type *bus;

    struct kset glue_dirs;
    struct class *class;
};

kset

struct kset {
    struct list_head list;
    spinlock_t list_lock;
    struct kobject kobj;
    const struct kset_uevent_ops *uevent_ops;
} __randomize_layout;

class

struct class {
    const char        *name;
    struct module        *owner;

    const struct attribute_group    **class_groups;
    const struct attribute_group    **dev_groups;
    struct kobject            *dev_kobj;

    int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
    char *(*devnode)(struct device *dev, umode_t *mode);

    void (*class_release)(struct class *class);
    void (*dev_release)(struct device *dev);

    int (*shutdown_pre)(struct device *dev);

    const struct kobj_ns_type_operations *ns_type;
    const void *(*namespace)(struct device *dev);

    void (*get_ownership)(struct device *dev, kuid_t *uid, kgid_t *gid);

    const struct dev_pm_ops *pm;

    struct subsys_private *p;
};

3. 实例测试

!ndx.sysclass

ls /sys/class

作者:郭建程  创建时间:2025-10-09 10:55
最后编辑:郭建程  更新时间:2025-11-07 11:32