版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Ch5-字符去老虎钳驱动程序的高级操作,轮廓、Introduction 5.1ioctl5.2云推送式I/o 5.3池和select5.4异步通知5.5十老虎钳服务集标识符5.6十老虎钳文件的接入控制5.7向后兼容5.8快速克里弗地址, 5-Introduction,驱动程序除了读写动作外,通常还需要提供各种控制硬件的能力,但控制动作通常以ioctl作业方法实施。 但是,并非所有的去老虎钳都采用了ioctl控制方式。 一些驱动器采用了不同的控制技术。 例如,tty ioctl ()系统调用提供了用于向驱动程序发出“特定于解老虎钳的命令”的管道。 此类命令的定义和功能因硬件设备而异。 设置栈内存
2、状态,以控制I/O通道的工作模式ioctl ()的作用:从5.1-ioctl和User-space的角度看,ioctl ()系统调用的函数形式的原型如下: int ioctl (int fd,int cmd ):文件描述符和文件描述单元cmd :的控制命令:不是非定量的参数,而是可以表述为char *argp (用来以编译形式检查类型检查) int (* ioctl ) (结构文件*文件), unsigned long arg) inode指针接受声明为unsigned int cmd的参数,其中从应用程序传递的fd filp指针表示解老虎钳节点的file结构cmd的值等于ioctl ()系统
3、调用的第二个参数否则就没有意义了。 5.1-ioctl无法由编译程序检查,因此如果向ioctl ()传递无效参数,驱动程序也需要在运行时知道错误。 这一缺点是ioctl系统的定义,但是ioctl ()是用于提供一般功能的必然代价。 大部分驱动程序实施的ioctl操作方法包含switch描述,根据cmd自变量选择正确的处理步骤。 不同的命令(cmd )具有不同的代表值,通常在报头文件中定义了表示每个命令值的符号的定径套,选择5.1.1-ioctl命令编号,并且在创建ioctl的具体程序计程仪之前,必须选择与每个命令相对应的编号。 最简单的选择不能“一个一个地分配”。 在系统上,每个指令的编号必须
4、是唯一的: 防止正确命令落入错误装置所造成的损害。 如果没有重复的ioctl命令编号,则弄错对方的puller接收到EINVAL错误,不再继续。 在初版的linux中,16bits的号码:的上位8二进制位表示装置个体的“小魔术号码”的下位8二进制位与在装置内部使用的“顺序号码”在相同的系统上,没有相同小魔术号码的装置。 同一装置没有重复的号码。 选择,# definescull _ ioctl 1.0 x6b 0.1 # definescull _ ioctl 20 x6b 0.2,5.1.1-ioctl命令编号,然后选择新的划分规则: include/asm/ioctl.h (定义要使用的每
5、个字节列。 类型、魔数、序列号传输方向) Documentation/ioctl-number.txt (列出了分配给核心的所有小魔术,并说明了采用新规则的理由)。 新分类法使用4二进制位字段type(magic number) :选择符合规定的数值,用于整个驱动程序。 该字段的长度被称为_ IOC _ type bits (8比特)编号:该字段的长度在该_ IOC _ NR bits (8比特)目录:的传送方向上包括: _IOC_NONE、_IOC_READ、_IOC_WRITE、_IOC_READ | _IOC_WRITE。 从应用程序的角度来看英语。 size :用户数据量。 此字段的宽
6、度因硬件平台而异。 (8位1.4位)为了维持移动性,推荐8位以下。选择5.1.1-ioctl命令编号,整数参数的传输方式有2种,一种是透明指标,二种是直接给出明确数值的ioctl ()的一般惯例,应该使用指标来交换数值。系统调用的返还值有不语法惯例:负值表示错误,用于设置user-space的errno变量,正值的含义由系统调用本身决定。 联动atomic (实际上,驱动程序本来分离的两个动作,特别是在应用程序需要设定或释放lock的情况下):x (交换)=G (获取) s (设定) h (移位)=T (通知) q (查询),/* s means“set”t 获得通知* g means获得:
7、replybysettingthroughpointer (获得) * q means查询:响应xemeansexchange:g和satomically (更换) * HC means“shift”:标准变换*/, 定义错误_错误_错误_重置_错误(错误_错误)0/*定义错误_错误(错误_错误) 定义数据库_ iosqset _ iow,定义数据库_ io,定义数据库_ ioctuantum _ io, 定义要素_ IOC _ io,定义要素_ ior,定义要素_ IOC,定义要素,定义要素定义命令_ io (定义命令,7 ) #定义命令_ io (定义命令,8 ) #定义命令_ io (定
8、义命令,8 ) 定义语法,定义语法,定义语法,定义语法, 关1.0字,关1.1字,关键字,关键字,关键字,关键字,关键字,关键字,关键字,关键字5.1.2-ioctl的返还值、ioctl工作方法的具体内容、主要是识别命令号(cmd自变量)的switch描述。 如果cmd与命令编号不匹配,default应该做什么? 很多核心应适当采取的行为是返回价值排定(ein val ),这是合理的。 但是,在POSIX标准中返回-ENOTTY(Not a typewriter )是不合理的,而libc6将消息比较合理的“Inappropriate ioctl for device”,5.1.3-预定义的io
9、ctl命令虽然系统调用的主要作用是硬件去老虎钳,但核心本身仍可识别少数命令(差动奥尔特命令)。 因此,如果你选择的ioctl命令编号与预定命令相同,那么你写的ioctl操作方法绝对不能接收这个命令,应用在发出冲突的ioctl命令时遭遇意外。 预定指令分为三类。 可用于任何文件(正常文件、老虎钳文件、FTFO或socket )的命令只能用于正常文件的命令只有特定文件系统类型的命令驱动程序设计者才能使用第一类命令(其魔数为“t”),5.1.3-预定义的I 以下是内建于核心的ioctl指令,可用于任何档案:设定ficlex:close-on-exec旗标。 进程开始运行时(使用exec系统定调用),
10、finclex:close-on-exec标志FIOASYNC :如果设置或取消文件的“异步通知”fion bio :“文件ioctl non block I/o”,则返回filp-on 发出此命令的应用程序必须对ioctl ()的第三个参数指示要执行“设置”或“撤消”操作。 fcntl ()系统调用还会更改O_NONBBOCK标志的状态。 fcntl ()和ioctl ()非常相似,两者主要基于历史因素。 最初,UNIX的开发者面临I/O控制作业的问题1.0,决定将“文件”和“装置”视为不同的东西,但当时,拥有ioctl作业方法的唯一装置只有终端机(tty )。 这说明了如果ioctl ()
11、未收到正确的命令,则返还值为-ENOTTY的原因。 5.1.4-ioctl附加参数的使用需要在研究scull如何实施ioctl工作方法之前知道如何使用附加参数(第三参数)。 如果此参数为整数,则照原样使用。 如果是指标的话,必须多使用点心。 如果指针指向user-space地址,则必须验证该地址是否有效,以及相应的内存页是否映射在系统内存(RAM )中。如果核心高速计程仪程序尝试网站数据库超出范围的地址,处理器将主动启动异常。 从版本2.2起,是由access_ok ()函数执行的,用于验证地址的有效性,该函数定义如下: 在2.2版之前,用户必须在自各儿上进行验证。 access_ok ()返
12、回一个值。 1表示成功(可网站数据库),0表示失败(不可网站数据库)。 如何使用5.1.4-ioctl的附加参数access_ok ()函数: type必须是VERIFY_READ或VERIFY_WRITE (取决于导入到user-space还是导出)。 addr参数是要检查的user-space地址size为以字节为单位的检查范围的access_ok ()值得注意的是: access_ok ()并不是完全验证指定范围内的所有地址,而是检查的内存为kk 接入,接入,访问,访问,访问,访问。 调用access_ok ()后,驱动程序可以安心进行实际传输。 除了copy_from_user和cop
13、y_to_user函数之外,还提供了为一般数据规范设计的传输工具的关定径套字。 分离put_user(datum,ptr )、put_user(datum,ptr) get_user(datum,ptr )、类型和编号关二进制位字的字段,如果出现错误的cmd,则返回eno tty */if (_ IOC _ tr ) 返回时间:=scull _ IOC _幻象; 无法返回的if (_ IOC _ NR (cmd )。 /* direction是二进制位掩码,VERIFY_WRITE表示双向传输* Type来自用户定向,* access_ok来自密钥定向,所以“读取”和“写入”正好匹配*/if
14、在限制对象是操作项目的情况下,驱动器自身必须进行操作请求功能的权限用于判断有木有的检查。 任何人都可以读写Ex:录音带驱动器,但并非所有人都可以更改录音带摇滾乐的差动奥尔特大小。 能力分权不仅分为“特权”和“非特权”,可以向某个特定的普拉姆开放某个功能的使用权,无关的其他权力也不需要一起传递。 在user-space中,分权观念还不广泛,但在核心内部有很高的依赖性。 5.1.5-功能限制、功能分类、CAP_DAC_OVERRIDE :变更文件和目录查询的网站数据库权限的能力。 CAP_NET_ADMIN :执行网络控制器特罗尔塔斯克的功能,包括影响网络接口的操作。 CAP_SYS_MODULE :载入模组并从核心移出的功能。 cap _ sys _ raw io :执行原始输入/输出的能力。 Ex:网站数据库到数据老虎钳的I/o端口,并直接与USB数据老虎钳通讯。 CAP_SYS_ADMIN :提供系统管理工作所需的所有网站数据库的能力。 cap _ sys _ tty _ config :设置t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 挡土墙排架施工方案(3篇)
- 施工方案方法以及体会(3篇)
- 有暴雨应急预案吗(3篇)
- 水泥道路修复施工方案(3篇)
- 洛哥切片营销方案(3篇)
- 温州大桥桥台施工方案(3篇)
- 猪场金属栏杆施工方案(3篇)
- 病死松树清理施工方案(3篇)
- 粽子礼品活动方案策划(3篇)
- 药品品种营销方案模板(3篇)
- LCD1602液晶显示实验报告
- 产业安全课件
- 南京2024年江苏南京溧水区招聘编外人员社保员15人笔试历年典型考题及考点附答案解析
- 药师审方技能培训课件
- 保温板粘贴工艺
- 中央企业违规经营责任追究实施办法解读
- 第五节-枪弹痕迹检验
- 初二地理生物会考试卷
- 认知行为疗法课件
- YS/T 269-2008丁基钠(钾)黄药
- GB/T 36073-2018数据管理能力成熟度评估模型
评论
0/150
提交评论