static const
struct
sysfs_ops
dev_sysfs_ops = {
.show = dev_attr_show,
.store = dev_attr_store,
};
static struct kobj_type device_ktype = {
.release = device_release,
.sysfs_ops = &dev_sysfs_ops,
.namespace = device_namespace,
};
struct bus_type platform_bus_type = {
.name = "platform",
.dev_attrs = platform_dev_attrs,
.match = platform_match,
.uevent = platform_uevent,
.pm = &platform_dev_pm_ops,
};
struct device_attribute {
struct attribute attr;
ssize_t (*show)(structdevice* dev, struct device_attribute* attr,char* buf);
ssize_t (*store)(structdevice* dev, struct device_attribute* attr, const char* buf, size_t count);
};
static struct device_attribute platform_dev_attrs[] = {
__ATTR_RO(modalias),
__ATTR_NULL,
};
platform_device_register
-->device_initialize(&pdev->dev);
-->...
-->dev->kobj.kset = devices_kset;
-->kobject_init(&dev->kobj, &device_ktype);
-->...
-->return platform_device_add(pdev);
-->...
-->pdev->dev.bus = &platform_bus_type; //match()被注册
--> ret = device_add(&pdev->dev);
.show = dev_attr_show,
.store = dev_attr_store,
};
static struct kobj_type device_ktype = {
.release = device_release,
.sysfs_ops = &dev_sysfs_ops,
.namespace = device_namespace,
};
struct bus_type platform_bus_type = {
.name = "platform",
.dev_attrs = platform_dev_attrs,
.match = platform_match,
.uevent = platform_uevent,
.pm = &platform_dev_pm_ops,
};
struct device_attribute {
struct attribute attr;
ssize_t (*show)(structdevice* dev, struct device_attribute* attr,char* buf);
ssize_t (*store)(structdevice* dev, struct device_attribute* attr, const char* buf, size_t count);
};
static struct device_attribute platform_dev_attrs[] = {
__ATTR_RO(modalias),
__ATTR_NULL,
};
platform_device_register
-->device_initialize(&pdev->dev);
-->...
-->dev->kobj.kset = devices_kset;
-->kobject_init(&dev->kobj, &device_ktype);
-->...
-->return platform_device_add(pdev);
-->...
-->pdev->dev.bus = &platform_bus_type; //match()被注册
--> ret = device_add(&pdev->dev);