ioctl

Linux设备驱动之Ioctl控制   http://www.cnblogs.com/geneil/archive/2011/12/04/2275372.html

ioctl的实现   http://blog.chinaunix.net/uid-25014876-id-59419.html

 

在kernel 2.6.36 中已经完全删除了struct file_operations 中的ioctl 函数指针,取而代之的是unlocked_ioctl ,在应用程序中ioctl是兼容的,不必变化。而在驱动程序中这个指针函数变了之后最大的影响是参数中少了inode ,所以应用程序ioctl是兼容的,但驱动程序中我们的ioctl函数必须变化,否则就会发生cmd参数的变化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ioctlLinux系统中的一个系统调用,用于设备驱动程序和用户空间程序之间的通信。在GPIO驱动程序中,ioctl可以用于控制GPIO的输入输出状态。使用gpiolib库和ioctl命令可以实现GPIO的输入输出操作。 下面是一个使用ioctl控制GPIO的例子: ```c #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/gpio.h> #define GPIO_NUM 17 int main(int argc, char *argv[]) { int fd; struct gpiochip_info chip_info; struct gpioline_info line_info; struct gpiohandle_request req; int ret; fd = open("/dev/gpiochip0", O_RDWR); if (fd < 0) { perror("open"); exit(1); } ret = ioctl(fd, GPIO_GET_CHIPINFO_IOCTL, &chip_info); if (ret < 0) { perror("ioctl"); exit(1); } line_info.line_offset = GPIO_NUM; ret = ioctl(fd, GPIO_GET_LINEINFO_IOCTL, &line_info); if (ret < 0) { perror("ioctl"); exit(1); } req.lines = 1; req.lineoffsets[0] = GPIO_NUM; req.default_values[0] = 0; req.consumer_label = "gpio_test"; ret = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req); if (ret < 0) { perror("ioctl"); exit(1); } while (1) { req.values[0] = 1; ret = ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &req); if (ret < 0) { perror("ioctl"); exit(1); } sleep(2); req.values[0] = 0; ret = ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &req); if (ret < 0) { perror("ioctl"); exit(1); } sleep(2); } close(fd); return 0; } ``` 该例子中使用了Linux内核提供的GPIO驱动程序,通过打开/dev/gpiochip0设备文件,使用ioctl命令控制GPIO的输入输出状态。具体来说,该例子中使用了GPIO_GET_CHIPINFO_IOCTL和GPIO_GET_LINEINFO_IOCTL命令获取GPIO芯片和GPIO线路的信息,使用GPIO_GET_LINEHANDLE_IOCTL命令获取GPIO线路的句柄,使用GPIOHANDLE_SET_LINE_VALUES_IOCTL命令设置GPIO线路的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值