i2c驱动中之用sys文件的操作。

本文详细介绍了如何在Linux I2C驱动中操作sysfs文件,包括在probe函数中创建sys文件,实现sys文件的读写功能,以及用户层如何使用这些接口进行通信。通过show_mode和store_mode函数,实现了对设备模式的读取和设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在probe函数中添加创建函数。

        int ret = 0;

        .......

         ret = driver_create_file(&client->driver->driver, &driver_attr_mode);
         if(ret)
                goto err1;

         err1:

                driver_remove_file(&client->driver->driver, &driver_attr_mode);

2、实现sys文件的主文件操作函数包括读和写文件的操作。
static int s_value=0;

static ssize_t show_mode(struct device_driver *dev, char *buf)
{
       u32 reg;
       reg = s_value;
       return snprintf(buf, PAGE_SIZE, "%u \n", reg);
}


static ssize_t store_mode(struct device_driver *dev, const char *buf, size_t count)
{

       char *endp;
       int err = 0;
       int mode = simple_strtoul(buf, &endp, base);  //buf指向字符串的开始,endp为指向要分析的字符串末尾处的位置,base为要用的基数。(base为要用的基数(进制数),base为0表示通过cp来自动判断基数,函数自动可识别的基数:‘0x’表示16进制,‘0’表示8进制,其它都认定为10进制。通常设为0)

       size_t num = endp - buf;

       if (*endp && isspace(*endp))   //检查参数c是否为空格字符,也就是判断是否为空格(' ')、水平定位字符

//('\t')、归位键('\r')、换行('\n')、垂直定位字符('\v')或翻页('\f')的情况。

//返回值,若参数c为空格字符,则返回TRUE,否则返回NULL(0)。

         num++;
       if (num != count)
               return -EINVAL;
       switch(mode)    //mode对应是echo传进来的参数
       {
               case option1:
               {
                       s_value=0;
                        //对用户层输入的信息进行操作。
                       break;
               }
               case option2:
               {
                       s_value=1;
                        //对用户层输入的信息进行操作。

                       break;
               }
               default:
                       err = -EOPNOTSUPP;
                       printk("without the option \n");
                       break;
       }
       return count;
}

3、属性文件的创建说明

        DRIVER_ATTR(mode, 0644, show_mode, store_mode);

4、用户层的使用说明

        echo ‘0’ > /sys/bus/i2c/driver/xxx/mode (0对应option1)

        echo '1' > /sys/bus/i2c/driver/xxx/mode (1对应option2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值