1:/* include/linux/device.h, line 434 */2:structclass_interface{3:structlist_headnode;4:structclass*class;5:6:int(*add_dev)(structdevice*,structclass_interface*);7:void(*remove_dev)(structdevice*,structclass_interface*);8:}; 3. 功能及内部逻辑解析 3.1 class的功能 看完上面的东西,蜗蜗...
36structbin_attribute *dev_bin_attrs;//类似dev_attrs,只不过是二进制类型attribute37structkobject *dev_kobj;//表示该class下的设备在/sys/ 2.2 struct class_interface struct class_interface是这样的一个结构:它允许class driver在class下有设备添加或移除的时候,调用预先设置好的回调函数(add_dev和remove_dev...
int class_interface_register(struct class_interface *class_intf) { struct class *parent; struct class_dev_iter iter; struct device *dev; if (!class_intf || !class_intf->class) return -ENODEV; parent = class_get(class_intf->class); if (!parent) return -EINVAL; mutex_lock(&parent->p...
struct class_interface { struct list_head node; struct class *class; int (*add_dev) (struct device *, struct class_interface *); void (*remove_dev) (struct device *, struct class_interface *); }; /*注册或注销接口的函数:*/ int class_interface_register(struct class_interface *class_int...
structmodule*owner;/* 属性 */structclass_attribute*class_attrs;conststructattribute_group**dev_groups;/* 内部对象 */structkobject*dev_kobj;// 设备发出uevent消息时添加环境变量用的// 还记得在core.c中的dev_uevent()函数,其中就包含对设备所属bus或class中dev_uevent()方法的调用,// 只是bus结构中...
; struct class_interface就是之前被串在class->p->class_interface上的类接口的结构。用于描述设备类对外的一种接口。node就是class->p->class_interfa 22、ce链表上的节点。class是指向所属class的指针。add_dev()是在有设备添加到所属class时调用的函数。当然,如果class_interface比设备更晚添加到class,也会...
struct class *class; const struct attribute_group **groups; /* optional groups */ void (*release)(struct device *dev); struct iommu_group *iommu_group; bool offline_disabled:1; bool offline:1; }; device结构体比较复杂,同时其中还包含了dma, numa, pintrl, pm相关的知识,本小节不做过多谈论...
内核的进程 VMA 原本保存于一个被修改过的红黑树,受到位于 mm_struct 内的 mmap_sem(5.8 后更名为 mmap_lock)保护。mmap_sem 是 Linux 内核臭名昭著的大坑,这个锁的竞争也成为内核最重要的性能瓶颈之一。历史上,人们付出了无数的努力来降低这个锁的竞争,这里面最著名的莫过于在 page fault 的处理中,采用 SP...
intdevice_add(struct device*dev){struct device*parent=NULL;struct kobject*kobj;struct class_interface*class_intf;int error=-EINVAL;dev=get_device(dev);//增加此设备的引用计数if(!dev)goto done;if(!dev->p){error=device_private_init(dev);---Aif(error)goto done;}/* * for statically alloca...
每个phy 芯片会创建一个 struct phy_device 类型的设备,对应的有 struct phy_driver 类型的驱动,这两者实际上是挂载在 mdio_bus_type 总线上的,mac 会被注册成 struct net_device。 phy_devicestructphy_device{ structphy_driver*drv;// PHY设备驱动 ...