Linux应用层控制GPIO的多种方法

应用层控制GPIO的方法

方法1: 写一个杂项设备实现GPIO的read/write函数。
方法2:使用/sys/class/gpio操作。
方法3: 创建设备文件供应用层使用。本文重点介绍该方法。

//driver code
static ssize_t muteLedshow(struct device *dev, struct device_attribute *attr, char *buf){
    return 0;
}

static ssize_t muteLedSet(struct device *dev, struct device_attribute *attr, const char *buf,
                   size_t count){
       int ret;
       long value;
       printk( "mute value:%d\n", value );
       gpio_set_value(rled_gpio, value);

       return count;
}
//param1; 设备文件名称,与下面的dev_attr_mute_Led 对应。
//param3; 文件权限设置。
//param2:  读函数。
//param4:  写函数。
static DEVICE_ATTR( mute_Led, 0664, muteLedshow, muteLedSet );

static int tlv320_i2c_probe(struct i2c_client *pdev,
                             const struct i2c_device_id *id)
 {
       ...
               ret = device_create_file(&pdev->dev, &dev_attr_mute_Led );
               if (ret){
                       printk("error creating sysfs files: mute_led\n");
                       return -EINVAL;
               }
}

在驱动加载后,可以看到对应/sys/devices/platform/soc/11009000.i2c/i2c-0/0-0018/mute_Led节点,应用层直接可以通过echo读写数据。

//app
int main(){
    // set gpio -> high
	system( "echo 1 > /sys/devices/platform/soc/11009000.i2c/i2c-0/0-0018/mute_Led");
	return 0;
}

你可能感兴趣的:(【驱动开发】)