October 2017
Intermediate to advanced
586 pages
14h 8m
English
These rely on the struct bus_attribute structure:
struct bus_attribute {
struct attribute attr;
ssize_t (*show)(struct bus_type *, char * buf);
ssize_t (*store)(struct bus_type *, const char * buf, size_t count);
};
Bus attributes are declared using the BUS_ATTR macro:
BUS_ATTR(_name, _mode, _show, _store)
Any bus attribute declared using BUS_ATTR will have the prefix bus_attr_ added to the attribute variable name:
#define BUS_ATTR(_name, _mode, _show, _store) \ struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
They are created/removed using the bus_{create|remove}_file functions:
int bus_create_file(struct bus_type *, struct bus_attribute *); void bus_remove_file(struct bus_type *, struct bus_attribute ...