android中device_attr 设备属性节点 以备后用

1. 在sys下创建一个节点

static ssize_t gsensor_vendor_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
{	
	char  val;	
	//val = simple_strtoul(buf, NULL, 10);	
	sscanf(buf, "%d", &val);
	if(val == 0)
	{		
		gpio_set_value(MMA8452_CON_PIN, 0);	
	}
	else
	{		
		gpio_set_value(MMA8452_CON_PIN, 1);	
	}	
	return strlen(buf);
}

static DEVICE_ATTR(vendor, 0777, gsensor_vendor_show, gsensor_vendor_store);

static struct kobject *android_gsensor_kobj;

static int gsensor_sysfs_init(void)
{
	int ret ;

	android_gsensor_kobj = kobject_create_and_add("android_gsensor", NULL);
	if (android_gsensor_kobj == NULL) {
		mmaprintk(KERN_ERR
		       "MMA8452 gsensor_sysfs_init:"\
		       "subsystem_register failed\n");
		ret = -ENOMEM;
		goto err;
	}

	ret = sysfs_create_file(android_gsensor_kobj, &dev_attr_vendor.attr);   // "vendor"
	if (ret) {
		mmaprintk(KERN_ERR
		       "MMA8452 gsensor_sysfs_init:"\
		       "sysfs_create_group failed\n");
		goto err4;
	}

	return 0 ;
err4:
	kobject_del(android_gsensor_kobj);
err:
	return ret ;
}

2.创建一个设备节点

ssize_t led_3g_green_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
{
	u8 val;
	val = simple_strtoul(buf, NULL, 10);
	if(val == 0){
		gpio_set_value(MX53_HMS_3G_LED_GREEN_EN, 0);
	}else{
		gpio_set_value(MX53_HMS_3G_LED_GREEN_EN, 1);
	}
	return count;
}

ssize_t led_3g_green_show(struct device *dev, struct device_attribute *attr, char *buf)
{
	sprintf(buf, "%d\n", gpio_get_value(MX53_HMS_3G_LED_GREEN_EN));
	return strlen(buf);
}

ssize_t led_3g_amber_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
{
	u8 val;
	val = simple_strtoul(buf, NULL, 10);
	if(val == 0){
		gpio_set_value(MX53_HMS_3G_LED_AMBER_EN, 0);
	}else{
		gpio_set_value(MX53_HMS_3G_LED_AMBER_EN, 1);
	}
	return count;
}

ssize_t led_3g_amber_show(struct device *dev, struct device_attribute *attr, char *buf)
{
	sprintf(buf, "%d\n", gpio_get_value(MX53_HMS_3G_LED_AMBER_EN));
	return strlen(buf);
}

static DEVICE_ATTR(led_3g_green, S_IRUGO|S_IWUSR, led_3g_green_show, led_3g_green_store);
static DEVICE_ATTR(led_3g_amber, S_IRUGO|S_IWUSR, led_3g_amber_show, led_3g_amber_store);

static struct attribute* leds_mxc_gpio_attrs[] = 
{
	&dev_attr_led_3g_green.attr,
	&dev_attr_led_3g_amber.attr,
	NULL 
};
	
static const struct attribute_group leds_mxc_gpio_group =
{
	.attrs = leds_mxc_gpio_attrs,
};


result = sysfs_create_group(&drv_data->pdev->dev.kobj, &leds_mxc_gpio_group);
	if (result) {
		dev_err(&pdev->dev, "Create device file failed! ERRNO: %d\n",result);
		goto free_drv_data;
	}

以上两种方法创建的节点,通过串口,能够进行读写的操作。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值