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

1. 在sys下创建一个节点

[cpp]  view plain copy
  1. static ssize_t gsensor_vendor_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)  
  2. {     
  3.     char  val;    
  4.     //val = simple_strtoul(buf, NULL, 10);    
  5.     sscanf(buf, "%d", &val);  
  6.     if(val == 0)  
  7.     {         
  8.         gpio_set_value(MMA8452_CON_PIN, 0);   
  9.     }  
  10.     else  
  11.     {         
  12.         gpio_set_value(MMA8452_CON_PIN, 1);   
  13.     }     
  14.     return strlen(buf);  
  15. }  
  16.   
  17. static DEVICE_ATTR(vendor, 0777, gsensor_vendor_show, gsensor_vendor_store);  
  18.   
  19. static struct kobject *android_gsensor_kobj;  
  20.   
  21. static int gsensor_sysfs_init(void)  
  22. {  
  23.     int ret ;  
  24.   
  25.     android_gsensor_kobj = kobject_create_and_add("android_gsensor", NULL);  
  26.     if (android_gsensor_kobj == NULL) {  
  27.         mmaprintk(KERN_ERR  
  28.                "MMA8452 gsensor_sysfs_init:"\  
  29.                "subsystem_register failed\n");  
  30.         ret = -ENOMEM;  
  31.         goto err;  
  32.     }  
  33.   
  34.     ret = sysfs_create_file(android_gsensor_kobj, &dev_attr_vendor.attr);   // "vendor"  
  35.     if (ret) {  
  36.         mmaprintk(KERN_ERR  
  37.                "MMA8452 gsensor_sysfs_init:"\  
  38.                "sysfs_create_group failed\n");  
  39.         goto err4;  
  40.     }  
  41.   
  42.     return 0 ;  
  43. err4:  
  44.     kobject_del(android_gsensor_kobj);  
  45. err:  
  46.     return ret ;  
  47. }  

2.创建一个设备节点

[cpp]  view plain copy
  1. ssize_t led_3g_green_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)  
  2. {  
  3.     u8 val;  
  4.     val = simple_strtoul(buf, NULL, 10);  
  5.     if(val == 0){  
  6.         gpio_set_value(MX53_HMS_3G_LED_GREEN_EN, 0);  
  7.     }else{  
  8.         gpio_set_value(MX53_HMS_3G_LED_GREEN_EN, 1);  
  9.     }  
  10.     return count;  
  11. }  
  12.   
  13. ssize_t led_3g_green_show(struct device *dev, struct device_attribute *attr, char *buf)  
  14. {  
  15.     sprintf(buf, "%d\n", gpio_get_value(MX53_HMS_3G_LED_GREEN_EN));  
  16.     return strlen(buf);  
  17. }  
  18.   
  19. ssize_t led_3g_amber_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)  
  20. {  
  21.     u8 val;  
  22.     val = simple_strtoul(buf, NULL, 10);  
  23.     if(val == 0){  
  24.         gpio_set_value(MX53_HMS_3G_LED_AMBER_EN, 0);  
  25.     }else{  
  26.         gpio_set_value(MX53_HMS_3G_LED_AMBER_EN, 1);  
  27.     }  
  28.     return count;  
  29. }  
  30.   
  31. ssize_t led_3g_amber_show(struct device *dev, struct device_attribute *attr, char *buf)  
  32. {  
  33.     sprintf(buf, "%d\n", gpio_get_value(MX53_HMS_3G_LED_AMBER_EN));  
  34.     return strlen(buf);  
  35. }  
  36.   
  37. static DEVICE_ATTR(led_3g_green, S_IRUGO|S_IWUSR, led_3g_green_show, led_3g_green_store);  
  38. static DEVICE_ATTR(led_3g_amber, S_IRUGO|S_IWUSR, led_3g_amber_show, led_3g_amber_store);  
  39.   
  40. static struct attribute* leds_mxc_gpio_attrs[] =   
  41. {  
  42.     &dev_attr_led_3g_green.attr,  
  43.     &dev_attr_led_3g_amber.attr,  
  44.     NULL   
  45. };  
  46.       
  47. static const struct attribute_group leds_mxc_gpio_group =  
  48. {  
  49.     .attrs = leds_mxc_gpio_attrs,  
  50. };  
  51.   
  52.   
  53. result = sysfs_create_group(&drv_data->pdev->dev.kobj, &leds_mxc_gpio_group);  
  54.     if (result) {  
  55.         dev_err(&pdev->dev, "Create device file failed! ERRNO: %d\n",result);  
  56.         goto free_drv_data;  
  57.     }  

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


你可能感兴趣的:(android中device_attr 设备属性节点 以备后用)