S5Pv210 Linux 驱动接口
2012-09-06 18:51
190 查看
第一种:fileoparetion里的open close read write ioctl........:
第二种:属性操作中对文件进行读写,这种是重要的,也是常见的:
这就完成了声明,然后再在probe里加上这么一句注册就行了:
这个就是常常能见到的驱动文件给用户的接口了。怎么用呢?这个很是困惑我一段时间,网上类似的文章也不多,大概是大家觉得这么简单的东西没必要写吧,那作为菜鸟的我来写:
如这个device_create_file后会生成的一个文件名叫isa1200_mode的文件,如生成了目录:
/sys/class/……/isa1200/device/isa1200_mode
那么对它进行读写就是这样的:sudo echo 1 >/sys/class/……/isa1200/device/isa1200_mode,也就是把1写进了文件isa1200_mode里,那么属性机制就会分析这个操作,并调用isa1200设备驱动的isa1200_mode_store函数,并会把写入的1当作参数*buf来处理。通过一句if (sscanf(buf, "%d", &enable) != 1)就把1传给了enable,一直进行接下来的工作。这下面的工作当然就好理解了,isa1200_mode_store里也是调用驱动中写好的函数来完成操作工作。
上面说是操作只是通常的用户接口,对于不同的设备还是会有其它更好的接口:
1. led_classdev,led类的一个常用接口:brightness
这就完成了声明,然后再在probe里加上这么一句注册就行了:
通过led_classdev_register就会生成目录:/sys/class/leds/ w380:icon
及其下面的/sys/class/leds/ w380:icon/brightness文件。对了,接口就是brightness文件
那么对它进行读写就是这样的:sudo echo 255 >/sys/class/leds/w380:icon/brightness 这样就打了这个LED灯。
关闭LED灯的操作就是sudo echo 0>/sys/class/leds/w380:icon/brightness
2. timed_output_dev,时间输出类的一个常用接口:enable
这就完成了声明,然后再在probe里加上这么一句注册就行了:
通过timed_output_dev_register就会生成目录:/sys/class/timed_output/isa1200
及其下面的/sys/class/timed_output/isa1200/enable文件。对了,接口就是enable文件
那么对它进行读写就是这样的:sudo echo 1 >/sys/class/timed_output/isa1200/enable
这样就打了这个motor。
关闭motor的操作就是sudo echo 0>/sys/class/timed_output/isa1200/enable
3. switch_dev:在android中常用于耳机设备:switch_class接口是name和state
通过switch_dev_register就会生成目录:/sys/class/switch/h2w
及其下面的"/sys/class/switch/h2w/name";和"/sys/class/switch/h2w/state";文件。对了,接口就是这两个文件
由驱动通过中断将判断得出的耳机名称和状态,写入name 和state.
应用程序对耳机进行名称和状态的判断就靠读出这两个文件得到。
转载自:http://blog.csdn.net/Tommy_wxie/article/details/7522447
第二种:属性操作中对文件进行读写,这种是重要的,也是常见的:
static ssize_t isa1200_mode_show(struct device *dev,struct device_attribute *attr, char *buf) { int enable; struct isa1200_chip *haptic =container_of(dev,struct isa1200_chip,dev ); return sprintf(buf, "%d/n", haptic->enable); } static ssize_t isa1200_mode_store(struct device *dev, struct device_attribute *attr,const char *buf, size_t count) { int enable; struct isa1200_chip *haptic =container_of(dev,struct isa1200_chip,dev ); if (sscanf(buf, "%d", &enable) != 1) return -EINVAL; if(enable){ haptic->enable=1; isa1200_chip_set_pwm_cycle(haptic); isa1200_chip_power_on(haptic); }else{ haptic->enable=0; isa1200_chip_power_off(haptic); } return count; } static DEVICE_ATTR(isa1200_mode, 0644, isa1200_mode_show, isa1200_mode_store);
这就完成了声明,然后再在probe里加上这么一句注册就行了:
ret = device_create_file(&pdev->dev, &dev_attr_isa1200_mode); printk(KERN_INFO "dev_attr_isa1200_mode/n"); if (ret != 0) dev_err(&pdev->dev,"No source control for dev_attr_isa1200_mode: %d/n", ret);
这个就是常常能见到的驱动文件给用户的接口了。怎么用呢?这个很是困惑我一段时间,网上类似的文章也不多,大概是大家觉得这么简单的东西没必要写吧,那作为菜鸟的我来写:
如这个device_create_file后会生成的一个文件名叫isa1200_mode的文件,如生成了目录:
/sys/class/……/isa1200/device/isa1200_mode
那么对它进行读写就是这样的:sudo echo 1 >/sys/class/……/isa1200/device/isa1200_mode,也就是把1写进了文件isa1200_mode里,那么属性机制就会分析这个操作,并调用isa1200设备驱动的isa1200_mode_store函数,并会把写入的1当作参数*buf来处理。通过一句if (sscanf(buf, "%d", &enable) != 1)就把1传给了enable,一直进行接下来的工作。这下面的工作当然就好理解了,isa1200_mode_store里也是调用驱动中写好的函数来完成操作工作。
上面说是操作只是通常的用户接口,对于不同的设备还是会有其它更好的接口:
1. led_classdev,led类的一个常用接口:brightness
static void w380_iconled_set(struct led_classdev *led_dev, enum led_brightness value) { switch (value) { case 255: s3c_gpio_setpin(S5PV210_GPJ3(2), 1); break; default: case 0: s3c_gpio_setpin(S5PV210_GPJ3(2), 0); break; } } static struct led_classdev w380_iconled = { .name = "w380:icon", .brightness_set = w380_iconled_set, };
这就完成了声明,然后再在probe里加上这么一句注册就行了:
ret = led_classdev_register(&pdev->dev, &w380_iconled); if (ret) goto err_icon;
通过led_classdev_register就会生成目录:/sys/class/leds/ w380:icon
及其下面的/sys/class/leds/ w380:icon/brightness文件。对了,接口就是brightness文件
那么对它进行读写就是这样的:sudo echo 255 >/sys/class/leds/w380:icon/brightness 这样就打了这个LED灯。
关闭LED灯的操作就是sudo echo 0>/sys/class/leds/w380:icon/brightness
2. timed_output_dev,时间输出类的一个常用接口:enable
static void isa1200_chip_enable(struct timed_output_dev *dev, int value) { struct isa1200_chip *haptic = container_of(dev, struct isa1200_chip,dev); unsigned long flags; int ret; if (value) { haptic->enable=1; ret = isa1200_chip_set_pwm_cycle(haptic); if (ret) { dev_dbg(haptic->dev.dev, "set_pwm_cycle failed/n"); return; } isa1200_chip_power_on(haptic); mdelay(value); haptic->enable=0; isa1200_chip_power_off(haptic); } else { haptic->enable=0; isa1200_chip_power_off(haptic); } }
这就完成了声明,然后再在probe里加上这么一句注册就行了:
ret = timed_output_dev_register(&haptic->dev); if (ret < 0) goto timed_reg_fail;
通过timed_output_dev_register就会生成目录:/sys/class/timed_output/isa1200
及其下面的/sys/class/timed_output/isa1200/enable文件。对了,接口就是enable文件
那么对它进行读写就是这样的:sudo echo 1 >/sys/class/timed_output/isa1200/enable
这样就打了这个motor。
关闭motor的操作就是sudo echo 0>/sys/class/timed_output/isa1200/enable
3. switch_dev:在android中常用于耳机设备:switch_class接口是name和state
通过switch_dev_register就会生成目录:/sys/class/switch/h2w
及其下面的"/sys/class/switch/h2w/name";和"/sys/class/switch/h2w/state";文件。对了,接口就是这两个文件
由驱动通过中断将判断得出的耳机名称和状态,写入name 和state.
应用程序对耳机进行名称和状态的判断就靠读出这两个文件得到。
转载自:http://blog.csdn.net/Tommy_wxie/article/details/7522447
相关文章推荐
- S5pv210 HDMI 接口在 Linux 3.0.8 驱动框架解析 (By liukun321 咕唧咕唧)
- S5pv210 HDMI 接口在 Linux 3.0.8 驱动框架解析 (By liukun321 咕唧咕唧)
- S5pv210 HDMI 接口在 Linux 3.0.8 驱动框架解析
- S5pv210 HDMI 接口在 Linux 3.0.8 驱动框架解析 (By liukun321 咕唧咕唧)
- S5pv210 HDMI 接口在 Linux 3.0.8 驱动框架解析 (By liukun321 咕唧咕唧)
- [3]ARM-Linux S5PV210 UART驱动----串口核心层、关键结构体、接口关系
- (转)S5pv210 HDMI 接口在 Linux 3.0.8 驱动框架解析 (By liukun321 咕唧咕唧)
- ARM-Linux S5PV210 UART驱动(3)----串口核心层、关键结构体、接口关系
- S5pv210 HDMI 接口在 Linux 3.0.8 驱动框架解析
- S5pv210下 HDMI 接口在 Linux 3.0.8 内核下的驱动解析
- s5pv210-Linux驱动之MMC/SD/SDIO区别
- Linux 内核驱动--多点触摸接口
- Linux设备驱动--第六章 ioctl接口
- 基于Linux视频驱动接口V4L2视频采集编程
- linux下i2c接口的电容触摸屏驱动开发
- Linux的I2C 设备驱动 -- mini2440 上i2c接口触摸屏驱动
- Linux(2.6.35.7)字符设备驱动注册接口
- Linux 网卡驱动学习(二)(网络驱动接口小结)
- linux-3.8.0 S5PV210 LCD显示屏驱动移植
- Linux驱动中completion接口…