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\n",
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\n");
这个调用创建一个属性文件(/sys/busldd/version)
包含 lddbus 代码的版本号.
最新文章
- ubuntu 12.04 sever下安装jre
- Android -- 使用图库文件并可以裁剪文件(ImageView)
- nodejs与模块soap的用法
- Windows 10和Visual Studio 2015 能给.Net方向的开发从业者带来什么?
- url编码 中文在url参数中传递,在请求头,响应头中传递,是如何编码的呢?
- redis在windows中的安装
- .NET Framework 4.5、4.5.1 和 4.5.2 中的新增功能
- iOS设备隐藏StateBar
- 什么是staging server
- Xcode7调试-b
- CAS SSO
- Thread类常用方法
- ABP实践学习
- GitHub提交代码后不显示用户名只显示邮箱
- 运行gedit报No protocol specified
- linux常用命令:ls命令
- [Codeforces708E]Student&#39;s Camp
- [T-ARA][For you]
- PHP 常用函数总结(一)
- selenium+python—实现基本自动化测试
热门文章
- Auto reloading enabled
- bzoj1060 时态同步
- nodeJs学习-11 multer中间件,解析post文件,上传文件
- ta-lib 里的蜡烛图形态函数源码
- Cython保护Python代码
- day10-02_多线程之进程与线程的pid
- mysql 查询当天、昨天、本周、上周、本月、上月、今年、去年数据
- win10提示 磁盘包含不是“PARTITION_BASIC_DATA_GUID";类型的分区
- java的System.currentTimeMillis()如何转换成C#的DateTime.Now.Ticks?
- kwargs.pop是什么意思