ioctl和unlock_ioctl的区别】的更多相关文章

今天调一个程序调了半天,发现应用程序的ioctl的cmd参数传送到驱动程序的ioctl发生改变.而根据<linux设备驱动>这个cmd应该是不变的.因为在kernel 2.6.36 中已经完全删除了struct file_operations 中的ioctl 函数指针,取而代之的是unlocked_ioctl ,所以我怀疑二者是不是兼容的.上网查了一些资料,很多文章只是泛泛谈了一下,说在应用程序中ioctl是兼容的,不必变化.而在驱动程序中这个指针函数变了之后最大的影响是参数中少了inode …
kernel 2.6.35 及之前的版本中struct file_operations 一共有3个ioctl : ioctl,unlocked_ioctl和compat_ioctl 现在只有unlocked_ioctl和compat_ioctl 了 在kernel 2.6.36 中已经完全删除了struct file_operations 中的ioctl 函数指针,取而代之的是unlocked_ioctl . 这个指针函数变了之后最大的影响是参数中少了inode ,不过这个不是问题,因为用户程序…
1.字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件? 答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件. 评:这只是其中一种方式,也叫手动创建设备文件.还有UDEV/MDEV自动创建设备文件的方式,UDEV/MDEV是运行在用户态的程序,可以动态管理设备文件,包括创建和删除设备文件,运行在用户态意味着系统要运行之后.那么在系统启动期间还有devfs创建了设备文件.一共有三种方式可以创建设备文件. 2.写一个中断服务需要注意哪些?…
fcntl(File Control)-文件控制 ioctl(In/Out Control)-I/O控制 1. fcntl作用于文件,提供对文件的基础控制:ioctl作用于文件和设备对象,一般用来向设备发送命令,或者控制设备属性: 2. fcntl是系统预先定义好的命令选项,不能自定义:ioctl可以通过驱动程序自定义,驱动程序中可以通过file_operations->unlocked_ioctl实现针对特定设备的定制命令控制:…
http://www.educity.cn/Linux/1242138.html 最近做的项目跟Linux内核的关系比较大,我们的项目需要在用户态触发一些内核态的代码运行.众所周知,内核态的代码是不能直接被用户态代码调用的,用户态代码触发内核态代码的必须要经过系统调用. 为什么选择ioctl 那么该如何实现我们的需求呢?有几种方法: 改写内核,扩大系统调用表,添加新的系统调用 利用内核模块,覆盖没被使用或这使用频率很低的一个系统调用的处理函数 利用已有的系统调用,比如ioctl,来"实现&quo…
#include <linux/ioctl.h> 定义命令 _IO(type,nr) 没有参数的命令 _IOR(type,nr,datatype) 从驱动中读数据 _IOW(type,nr,datatype) 写数据到驱动 _IOWR(type,nr,datatype) 双向传送,type和number成员作为参数被传递例: #define MEM_IOC_MAGIC 'm' #define MEM_IOCSET _IOW(MEM_IOC_MAGIC,0,int) #define MEM_IO…
http://my.oschina.net/shelllife/blog/123482 http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076075.html 今天做升级方案用到了mtd-utils中的flash_eraseall和flash_cp两个工具,在进行方案验证的时候,遭遇到各种不解和疑惑,因对MTD的原理不熟悉,所以只能多次尝试,虽然最后把方案搞定了,不过觉得MTD中的mtd和mtdblock区别这块还是值得总结学习一下.这里先…
概述 内核中驱动文件的操作通常是通过write和read函数进行的,但是很多时候再用户空间进行的操作或许不是内核中公共代码部分提供的功能,此时就需要使用一种个性化的方法进行操作--ioctl系统调用. ioctl系统调用是一种用于设备控制的公共接口,主要分为两种,一种是用户空间使用的ioctl系统调用,函数原型为: int ioctl(int fd,unsigned long cmd,...); 另一种是在内核空间使用的ioctl调用,函数原型为: int (*ioctl)(struct ino…
  在应用程序获取视频数据的流程中,都是通过 ioctl 命令与驱动程序进行交互,常见的 ioctl 命令有: VIDIOC_QUERYCAP /* 获取设备支持的操作 */ VIDIOC_G_FMT /* 获取设置支持的视频格式 */ VIDIOC_S_FMT /* 设置捕获视频的格式 */ VIDIOC_REQBUFS /* 向驱动提出申请内存的请求 */ VIDIOC_QUERYBUF /* 向驱动查询申请到的内存 */ VIDIOC_QBUF /* 将空闲的内存加入可捕获视频的队列 */…
lseek函数 文件偏移 Linux中可使用系统函数lseek来修改文件偏移量(读写位置) 每个打开的文件都记录着当前读写位置,打开文件时读写位置是0,表示文件开头,通常读写多少个字节就会将读写位置往后移多少个字节.但是有一个例外,如果以O_APPEND方式打开,每次写操作都会在文件末尾追加数据,然后将读写位置移到新的文件末尾.lseek和标准I/O库的fseek函数类似,可以移动当前读写位置(或者叫偏移量). 回忆fseek的作用及常用参数. SEEK_SET.SEEK_CUR.SEEK_EN…