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;
}
以上两种方法创建的节点,通过串口,能够进行读写的操作。