* An object representing a device in the bus or a class device
* Establishes an hierarchy through the parent link
* A class device usually has a device in the bus as its parent
+
+# API
+
+# Classes
+
+* linux/device.h
+* struct class
+ - name
+ - owner
+ - dev_release
+* class\\_create(owner, name)
+* class\\_destroy(class)
+* class\\_register(class)
+* class\\_unregister(class)
+
+# Devices
+
+* struct device
+ - parent
+ - devt
+ - class
+ - release
+
+# Devices API
+
+* device\\_initialize(dev)
+* get\\_device(dev)
+* put\\_device(dev)
+* dev\\_set\\_name(dev, fmt, ...)
+* dev\\_set\\_drvdata(dev, drvdata)
+* dev\\_get\\_drvdata(dev)
+
+# Devices API (cont...)
+
+* device\\_add(dev)
+* device\\_del(dev)
+* device\\_register(dev)
+* device\\_unregister(dev)
+* device\\_create(class, parent, devt, drvdata, fmt, ...)
+* device\\_destroy(class, devt)
+
+# Attributes
+
+* struct device\\_attribute
+ - attr
+ * name
+ * mode
+ - show
+ - store
+* ssize\\_t show(dev, attr, char *buf)
+* ssize\\_t store(dev, attr, char *buf, size\\_t count)
+* sprintf
+* strict\\_strtol
+* strnlen
+
+# Adding attributes
+
+* class.dev\\_attrs
+* device\\_create\\_file(dev, attr)
+* device\\_remove\\_file(dev, attr)
+
+# devtmpfs
+
+* class.devnode
+* char *devnode(dev, mode_t *)