zoukankan      html  css  js  c++  java
  • Linux 内核总线属性

    几乎 Linux 驱动模型中的每一层都提供一个添加属性的接口, 并且总线层不例外. bus_attribute 类型定义在 <linux/device.h> 如下:

    struct bus_attribute { struct attribute attr;

    ssize_t (*show)(struct bus_type *bus, char *buf);

    ssize_t (*store)(struct bus_type *bus, const char *buf, size_t count);

    };

    我们已经见到 struct attribute 在 "缺省属性" 一节. bus_attribute 类型也包含 2 个方法来显示和设置属性值. 大部分在 kobject 之上的设备模型层以这种方式工作.

    已经提供了一个方便的宏为在编译时间创建和初始化 bus_attribute 结构: BUS_ATTR(name, mode, show, store);

    这个宏声明一个结构, 产生它的名子通过前缀字符串 bus_attr_ 到给定的名子. 任何属于一个总线的属性应当明确使用 bus_create_file 来创建:

    int bus_create_file(struct bus_type *bus, struct bus_attribute *attr); 属性也可被去除, 使用:

    void bus_remove_file(struct bus_type *bus, struct bus_attribute *attr);

    lddbus 驱动创建一个简单属性文件, 再次, 包含源码版本号. show 方法和 bus_attribute 结构设置如下:

    static ssize_t show_bus_version(struct bus_type *bus, char *buf)

    {

    return snprintf(buf, PAGE_SIZE, "%s ", Version);

    }

    static BUS_ATTR(version, S_IRUGO, show_bus_version, NULL); 创建属性文件在模块加载时间完成:

    if (bus_create_file(&ldd_bus_type, &bus_attr_version)) printk(KERN_NOTICE "Unable to create version attribute ");

    这个调用创建一个属性文件(/sys/busldd/version) 包含 lddbus 代码的版本号.

  • 相关阅读:
    Pycharm快捷键【mac版】
    程序解数独
    c++ map
    c++ vector 初始化二维数组
    二进制求和
    数组形式的加一
    坑题:最后一个单词的长度
    最大子序和:dp
    外观数列
    双指针消重复项
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11147682.html
Copyright © 2011-2022 走看看