Linux sysfs device_attribute

简介: /*************************************************************************** * Linux sysfs device_attribute * 声明: * 本文主要是记录linux驱动中如何在sysfs中生成设备属性。
/***************************************************************************                        
 *                    Linux sysfs device_attribute
 * 声明:                                                                                        
 *     本文主要是记录linux驱动中如何在sysfs中生成设备属性。
 *                                                                                                  
 *                                         2016-2-22 深圳 南山平山村 曾剑锋               
 **************************************************************************/                        
                                                                                                    
                                                                                                    
static ssize_t show_firmware_version(struct device *dev,            <----------+                    
        struct device_attribute *attr, char *buf)                              |                    
{                                                                              |                    
    struct bq27x00_device_info *di = dev_get_drvdata(dev);                     |                    
    int ver;                                                                   |                    
                                                                               |                    
    ver = bq27x00_battery_read_fw_version(di);                                 |                    
                                                                               |                    
    return sprintf(buf, "%d\n", ver);                                          |                    
}                                                                              |                    
                                                                               |                    
static ssize_t show_dataflash_version(struct device *dev,           <----------*-+                  
        struct device_attribute *attr, char *buf)                              | |                  
{                                                                              | |                  
    struct bq27x00_device_info *di = dev_get_drvdata(dev);                     | |                  
    int ver;                                                                   | |                  
                                                                               | |                  
    ver = bq27x00_battery_read_dataflash_version(di);                          | |                  
                                                                               | |                  
    return sprintf(buf, "%d\n", ver);                                          | |                  
}                                                                              | |                  
                                                                               | |                  
static ssize_t show_device_type(struct device *dev,                <-----------*-*-+                
        struct device_attribute *attr, char *buf)                              | | |                
{                                                                              | | |                
    struct bq27x00_device_info *di = dev_get_drvdata(dev);                     | | |                
    int dev_type;                                                              | | |                
                                                                               | | |                
    dev_type = bq27x00_battery_read_device_type(di);                           | | |                
                                                                               | | |                
    return sprintf(buf, "%d\n", dev_type);                                     | | |                
}                                                                              | | |                
                                                                               | | |                
static ssize_t show_reset(struct device *dev,                       <----------*-*-*-+              
        struct device_attribute *attr, char *buf)                              | | | |              
{                                                                              | | | |              
    struct bq27x00_device_info *di = dev_get_drvdata(dev);                     | | | |              
                                                                               | | | |              
    bq27x00_battery_reset(di);                                                 | | | |              
                                                                               | | | |              
    return sprintf(buf, "okay\n");                                             | | | |              
}                                                                              | | | |              
                                                                               | | | |              
static DEVICE_ATTR(fw_version, S_IRUGO, show_firmware_version, NULL);   <------+ | | |              
static DEVICE_ATTR(df_version, S_IRUGO, show_dataflash_version, NULL);  <------|-+ | |              
static DEVICE_ATTR(device_type, S_IRUGO, show_device_type, NULL);       <------|-|-+ |              
static DEVICE_ATTR(reset, S_IRUGO, show_reset, NULL);                   <------|-|-|-+              
                                                                               | | | |              
static struct attribute *bq27x00_attributes[] = {              <---------+     | | | |              
    &dev_attr_fw_version.attr,                                  ---------*-----+ | | |              
    &dev_attr_df_version.attr,                                  ---------*-------+ | |              
    &dev_attr_device_type.attr,                                 ---------*---------+ |              
    &dev_attr_reset.attr,                                       ---------*-----------+              
    NULL                                                                 |                          
};                                                                       |                          
                                                                         |                          
static const struct attribute_group bq27x00_attr_group = {     <---------*------+                   
    .attrs = bq27x00_attributes,                                   ------+      |                   
};                                                                              |                   
                                                                                |                   
static int __init bq27x00_battery_probe(struct i2c_client *client,              |                   
                 const struct i2c_device_id *id)                                |                   
{                                                                               |                   
    ......                                                                      |                   
    retval = sysfs_create_group(&client->dev.kobj, &bq27x00_attr_group); -------+                   
    if (retval)                                                                                     
        dev_err(&client->dev, "could not create sysfs files\n");                                    
                                                                                                    
    return 0;                                                                                       
    ......
}                                                                                                   

/**
 *  root@android:/sys/bus/i2c/devices/2-0055 # ls
 *  device_type
 *  df_version
 *  driver
 *  fw_version
 *  modalias
 *  name
 *  power
 *  power_supply
 *  reset
 *  subsystem
 *  uevent
 *  root@android:/sys/bus/i2c/devices/2-0055 # 
 */

 

目录
相关文章
|
Linux C语言
Linux驱动 | 在驱动中创建sysfs接口
Linux驱动 | 在驱动中创建sysfs接口
|
存储 Linux C++
linux内核sysfs详解【转】
转自:http://blog.csdn.net/skyflying2012/article/details/11783847 "sysfs is a ram-based filesystem initially based on ramfs.
1460 0
|
28天前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
69 8
|
28天前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
186 6
|
29天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
73 3
|
29天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
65 2
|
10天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
37 14
Linux 10 个“who”命令示例
|
19天前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
30 9
|
17天前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解