命令字:!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
最后编辑:郭建程 更新时间:2025-11-07 11:32