linux设备驱动学习,linux设备驱动学习4

Linux设备驱动程序学习(4)

-高级字符驱动程序操作[(1)ioctl and llseek]

今天进入《Linux设备驱动程序(第3版)》第六章高级字符驱动程序操作的学习。

一、ioctl

大部分设备除了读写能力,还可进行超出简单的数据传输之外的操作,所以设备驱动也必须具备进行各种硬件控制操作的能力. 这些操作常常通过ioctl 方法来支持,它有和用户空间版本不同的原型:

281f3d03b4eded2e47e80aa7af900d32.png

需要注意的是:不管可选的参数arg是否由用户给定为一个整数或一个指针,它都以一个unsigned long 的形式传递。如果调用程序不传递arg参数, 被驱动收到的arg 值是未定义的。因为在arg参数上的类型检查被关闭了,所以若一个非法参数传递给ioctl,编译器是无法报警的,且任何关联的错误难以查找.

选择ioctl命令

为了防止向错误的设备使用正确的命令,命令号应该在系统范围内唯一。为方便程序员创建唯一的ioctl 命令代号,每个命令号被划分为多个位字段。要按Linux 内核的约定方法为驱动选择ioctl 的命令号, 应该首先看看include/asm/ioctl.h 和Documentation/ioctl-number.txt。要使用的位字段符号定义在:

type(幻数):8 位宽(_IOC_TYPEBITS),参考ioctl-number.txt选择一个数,并在整个驱动中使用它。

number(序数):顺序编号,8 位宽(_IOC_NRBITS)。

direction(数据传送的方向):可能的值是_IOC_NONE(没有数据传输)、_IOC_READ、_IOC_WRITE 和_IOC_READ|_IOC_WRITE (双向传输数据)。该字段是一个位掩码(两位), 因此可使用AND 操作来抽取_IOC_READ 和_IOC_WRITE。

size(数据的大小):宽度与体系结构有关,ARM为14位.可在宏_IOC_SIZEBITS 中找到特定体系的值.

中包含的定义了一些构造命令编号的宏:

55171e1fa7e11bc39d4db4589a5c634b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

几个删除重复记录的SQL语句

几个删除重复记录的SQL语句在大的数据库应用中,经常因为各种原因遇到重复的记录,造成数据的冗余和维护上的不便。1.用rowid方法2.用group by方法3.用distinct方法 1。用rowid方法据据oracle带的rowid属性,进行判断,是否存在重复,语…

【转】产品经理如何进行BRD,MRD,PRD,DRD,FRD编写

转载自:http://minjiechenjava.iteye.com/blog/2304490, 侵删 PRD文档即产品需求文档,也叫业务需求文档。是产品项目由“概念化”阶段进入到“图纸化”阶段的最主要的一个文档。 产品需求文档的作用就是“对MRD中的内容进行指标化和技术化”…

linux磁盘永久挂载教程,linux 永久磁盘挂载

包年包月实例过期后,如果未在规定时间内续费,实例和磁盘均会自动释放,数据永久丢失,无法找回。关于预付费资源过期后的状态变化,请参考 预付费(包年包月)。在使用包年包月实例过程中,如果您觉得当前实例配置…

[代码阅读] ECS toString实现方法

引言 ECS 提供了一种编程方式来生成以不同标记语言编写的文档。它设计为通过面向对象的抽象来生成所有标签。 ECS 目前版本为1.4.2 ,支持 HTML 4.0 和 XML 。 因为工作原因,作者粗略读了ECS的部分原代码,着重了解ECS如果通过toString方法…

【转】设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示

设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(1.准备工作) 原创 Sean Yu 云计算实战 2019-12-06 本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品。 主要实战的内容为: 将设备遥…

linux系统管理Linux系统实验,实验三 linux系统管理

实验三 linux系统管理【实验目的】练习Linux系统管理,熟悉Linux系统管理。【实验要求】通过Liunx用户和组管理、设备管理、文件系统管理、进程管理和shell程序设计,能够掌握linux系统管理,完成系统日常维护和管理工作,最后上交实验…

【转】Azure Messaging-ServiceBus Messaging消息队列技术系列1-基本概念和架构

前段时间研究了Window Azure ServiceBus Messaging消息队列技术,搞了很多技术研究和代码验证,最近准备总结一下,分享给大家。 首先,Windows Azure提供了两种类型的消息队列机制:Azure Queues和ServiceBus Queues。 其…

Atlas应用程序调试技巧

本文为翻译文章,原文地址:http://atlas.asp.net/docs/Overview/debug.aspx “Atlas”程序由服务器端代码和客户端代码组成,并且,浏览器可能会要去异步请求一些数据。那么,怎样才能Debug这样的web程序呢。本文将告诉…

linux 自动连接无限,hotplug应用实例:自动连接无线网

Linux内核提供了一种机制,使得有热插拔事件(比如插入或拔出U盘)发生时可以执行一个程序,在本文中我称之为hotplug程序。内核在调用hotplug程序时会传递一个命令行参数,这个参数是发生热插拔事件的子系统名称,常见的有usb, module,…

网络数据库的复制和同步(转摘)

数据库复本--网络数据库的复制和同步(1) 数据库复本是复制数据库的技术,利用这种技术,可以是数据库的几个拷贝保持同步。数据库的每个拷贝称为一个复本,并且每个复本都包含一个公共的表、查询、窗体、报表、宏和模块的集合;每个复…

【转】Azure Messaging-ServiceBus Messaging消息队列技术系列2-编程SDK入门

各位,上一篇基本概念和架构中,我们介绍了Window Azure ServiceBus的消息队列技术的概览。接下来,我们进入编程模式和详细功能介绍模式,一点一点把ServiceBus技术研究出来。 本章我们主要介绍ServiceBus的编程SDK编程入门。 首先…

linux octave源码安装,在Linux操作系统上安装Octave的方法

本文介绍在Ubuntu、Debian、Arch Linux、Fedora、OpenSUSE操作系统上安装Octave(也称GNU Octave)的方法,它还支持Flatpak方式安装。简介GNU Octave是一种用于科学和数学计算操作的解释性命令语言,它与Matlab兼容,支持各种扩展,允许…

C#做的一个加密/解密的类

C#做的一个加密/解密的类 大家要有兴趣,可以一起来讨论一下 WebService数据交互安全问题,以下的这个代码,可以用于Dotnet环境下的任何托管方式的应用程序,在实际应用中有两个实例。其中,有一个挂在Internet上的&#x…

【转】理解Azure订阅,账户,活动目录AD,租户等概念

理解Azure订阅,账户,活动目录AD,租户等概念 订阅是啥? 活动目录AD Active Directory啥是租户?订阅是啥? “An Azure subscription is a logical unit of Azure services that links to an Azure account,…

linux安装静默安装was7,WAS7.0 - 安装并升级WAS7.0.0.31(静默安装)

WAS7.0 - 安装并升级WAS7.0.0.31(静默安装)安装之前需要准备的文件:C1G35ML.tar.gz:WAS7.0安装包C1G36ML.tar.gz:WAS升级工具7.0.0-WS-WASSDK-LinuxX64-FP0000031.pak 7.0.0-WS-WAS-LinuxX64-FP0000031.pak :7.0.0.31升级包&…

Vb.Net实现图片合并(相框效果)

Vb.Net实现图片合并(相框效果) Imports System.DrawingImports System.Drawing.ImagingImports System.Drawing.Drawing2D Public Class ImgMerg Public Shared Function MergedImage(ByVal innerImgPath As String, ByVal outerImgPath As String, ByVal mergImgPath As St…

【转】Azure云存储及存储账户概述***

本文介绍下Azure云存储及存储账户。 1、什么是微软Azure云存储 微软Azure云存储是微软提供的云端数据存储服务,是一种可伸缩、持久化的数据存储服务,可以在Internet上被访问并按实际存储容量收费。它也可以被REST API访问,可以保存Azure云端…

插入法排序c语言程序,插入排序算法及C语言实现

插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。直接插入排序是插入排序算法中的一种,采用的方法是:在添加新的记录时&a…

5分钟能回答的人,年薪25万美金以上

据说,在美国,5分钟能回答这道题的人,平均年薪25万美金以上,题目如下:5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城。他们决定这么分: 1. 抽签决定自己的号码(1&…

【转】Microsoft Azure存储服务:存储账户****

在正式使用 Microsoft Azure 存储服务之前,你至少需要有一个 Azure 订阅并创建「存储账户」。Azure 订阅账户可以访问和使用各种 Azure 服务,在有了 Azure 订阅之后便可以开始创建「存储账户」并开始使用前面存储类型与访问中曾介绍过的 blobs、表&#…