深入理解了一下ioctl

Linux·字符设备驱动实例-基于通用摸版 字符设备驱动实例 阅读详情

常见使用场景

ioctl通常用作用户空间对内核空间的设备进行操作的接口。也就是当有一些操作需要几个模块协同工作,或者说有些操作放在用户空间操作更合适的时候使用。比如我们想通过环境关照的明暗变化调整屏幕或者数码管的显示亮度的时候就可以通过ioctl获取周围环境光强度,然后通过ioctl对屏幕亮度或者数码管的亮度进行设置。

连接纽带

在使用ioctl为什么能够在用户空间控制内核空间的模块?

1 内核模块必须是可操作的。首先模块必须注册为设备文件,这样用户空间才能打开文件。其次文件必须支持文件的基本操作,也就是必须实现struct file_operations。

2 内核模块必须通过用户空间和内核空间定义的统一的命令。

3 其它的事情,内核已经帮你做完了。

最主要的是要实现ioctl函数指针的定义。此处尤其需要注意:

1、compat_ioctl:支持64bit的driver必须要实现的ioctl,当有32bit的userspace application call 64bit kernel的IOCTL的时候,这个callback会被调用到。如果没有实现compat_ioctl,那么32位的用户程序在64位的kernel上执行ioctl时会返回错误:Not a typewriter

2、如果是64位的用户程序运行在64位的kernel上,调用的是unlocked_ioctl,如果是32位的APP运行在32位的kernel上,调用的也是unlocked_ioctl

 

参考文章:

linux 内核 - ioctl 函数详解

linux ioctl()函数详解

unlocked_ioctl和compat_ioctl

Linux i2c子系统(一) _动手写一个i2c设备驱动

ioctl compat_ioctl unlock_ioctl <br />区别:<br />ioctl 和 unlock_ioctl <br />ioctl 不会lock_kernel()<br /> <br />compat_ioctl被使用在用户空间为32位模式,而内核运行在64位模式时。这时候,需要将64位转成32位。<br /> <br />引用<br />http://blog.chinaunix.net/u1/38994/showart_2248151.html<br />对几个ioctl执行顺序的分析<br /> <br />关于ioctl,unlock 阅读详情

相关推荐

Linux驱动之ioctl函数——学习笔记(4)

PC操作系统:Ubuntu 16.04 LTS 内核版本:3.14.38 编译器:arm-poky-linux-gnueabi-gcc 4.9.1 如何创建一个字符设备以及open、close、write、read等函数的使用以及file_operations结构体注释请看Linux驱动之创建字符驱动——学习笔记(3)。 这篇文章单独说明一下ioctl的配置。 一、知识点引入 1、指针函数选择 ...

hrx-@@ 1917

compat_ioctl和unlocked_ioctl的使用场景

背景 接上一篇《蓝牙遥控器连接流程分析》,我们这次正式开始蓝牙遥控器的调试。按理来说,有了上一篇文章的理论支撑,要调试一款蓝牙遥控器应该就不难了,实际也是这样。但是调试过程中,还是遇到了一些问题,在此记录一下。 正文 在上一篇文章我们可以看到,以前在安卓平台想要创建/dev/input/eventX和/dev/hidrawX节点,蓝牙协议栈中一般有一下操作: int fd = open(...

lee_jimmy的博客 2812

深入理解ioctl函数及其用法教程

ioctl是一个系统调用,常用于设备驱动程序中的非标准设备控制操作。它提供了一种手段,允许用户空间的程序通过设备文件与内核进行通信,并对设备进行特定操作。当开发人员自定义ioctl命令时,必须确保这些命令在内核中保持唯一的命名空间。命名空间通常由一组特定的位掩码来定义,以避免与其他驱动程序或内核部分使用的命令冲突。在Linux内核中,命名空间通常由“魔术数字”和一个序号组成。魔术数字是一个驱动程序或设备相关的唯一标识符,而序号则是一个在该驱动程序内部唯一的数字,用于区分不同的命令。

weixin_35006125的博客 1653

比较:unlocked_ioctl、compat_ioctl

compat_ioctl:支持64bit的driver必须要实现的ioctl,当有32bit的userspace application call 64bit kernel的IOCTL的时候,这个callback会被调用到。如果没有实现compat_ioctl,那么32位的用户程序在64位的kernel上执行ioctl时会返回错误:Not a typewriter 。 如果是64位的用户程序运行在64位的kernel上,调用的是unlocked_ioctl,如果是32位的APP运行在32位的kernel上

Golden_Chen的专栏 3077

深入理解IOCTL调度例程与驱动程序模糊测试

本文深入探讨了Windows驱动程序中IOCTL调度例程的发现与处理机制,并详细阐述了如何通过Immunity Debugger工具构建一个针对驱动程序的模糊测试器。文章首先介绍了驱动程序加载时必经的DriverEntry例程和IOCTL调度函数的设置,然后讲解了如何通过汇编代码来定位IOCTL调度函数,并使用启发式方法找出设备支持的所有IOCTL代码。最后,文章展示了如何编写一个简单的模糊测试器来对驱动程序进行模糊测试,以发现潜在的内存损坏和溢出漏洞。

weixin_35899324的博客 261

均值回归 高频交易_基于布林带的均值回归交易策略

BOLL指标是美国股市分析家约翰·布林根据统计学中的标准差原理设计出来的一种非常简单实用的技术分析指标。一般而言,股价的运动总是围绕某一价值中枢(如均线、成本线等)在一定的范围内变动,布林线指标正是在上述条件的基础上,引进了“股价通道”的概念,其认为股价通道的宽窄随着股价波动幅度的大小而变化,而且股价通道又具有变异性,它会随着股价的变化而自动调整。由于之前大部分交易策略都是选股或者趋势追踪的择时,...

weixin_42528534的博客 1458

【深入理解IOCTL】

深入理解IOCTL 一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下: int ioctl(int fd, ind cmd, …);其中fd就是用户程序打开设备时使用open函数返回的文件标示符,cmd就是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和cmd的意义相关的。 ioctl函数是文件结构中的一个属性分量,就是说

HardessGod的博客 3706

目标检测之Mask R-CNN(Pytorch):小白动手实现项目

目标检测之Mask R-CNN:小白动手实现项目Pytorch引言Mask R-CNN原理简述代码、注释及详细解释 引言 首先声明本项目的运行环境。操作系统为Windows,编写环境为Anaconda3 + Jupyter Notebook。Pytorch版本为 torch 1.7.1+cu110 、torchvision版本为 0.8.2+cu110,cuda版本为cu100,显卡为Nvidia 2060。 我是目标检测领域的小白,刚刚完成了Pytorch的相关入门学习任务,所以我认为学习本篇博客的基础

dzc_go的博客 1万+

深入理解ioctl

一、 什么是ioctlioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用个数如下:int ioctl(int fd, ind cmd, …);其中fd就是用户程序打开设

SdustLiYang的专栏 4325

保姆级教程:用YOLOv5s搞定钢材表面缺陷检测,从数据集NEU-DET到模型部署全流程

本文提供了一份详细的YOLOv5s钢材表面缺陷检测教程,涵盖从NEU-DET数据集处理到模型部署的全流程。针对工业环境中的实际限制,如计算资源有限和标注样本少等问题,提供了优化方案和实用技巧,帮助开发者快速实现高效的钢材缺陷检测系统。

weixin_30568591的博客 465

BOM 数据模型设计

字段名数据类型必填说明物料编码 (Part Number)字符串是唯一标识,主键。建议包含分类前缀(如STD-GEN-CUS-物料名称 (Part Name)字符串是版本 (Revision)字符串是如AB1.0,与编码组合构成唯一实例。状态 (Status)枚举是设计中(Draft)已发布(Released)已归档(Archived)已作废(Obsoleted)类型 (Type)枚举是专用件(Custom)借用件(Borrowed)通用件(Generic)标准件(Standard)

Davina_yu的博客 1756

java ioctl,深入理解ioctl | 学步园

《Linux设备驱动程序》ioctl详解除了读取和写入设备之外,大部分驱动程序还需要通过设备驱动程序实行各种类型的硬件控制。简单的数据传输之外,大部分设备还可以执行其他一些操作,比如,用户空间经常会请求设备锁门,弹出介质,报告错误信息,改变波特率或者执行子破坏,等等。这些操作通常通过ioctl方法来支持。ioctl在用户空间的原型:int ioctl(int fd, unsigned long...

weixin_42509931的博客 381

Hi3516CV610 YOLOv8模型转换与部署实战:从源码到板端推理全流程解析

本文详细解析了将YOLOv8模型部署到Hi3516CV610开发板的全流程。内容涵盖从Ubuntu环境搭建、模型获取与验证,到关键的PyTorch模型转换为ONNX格式,并利用海思工具链量化生成板端可执行的.wk文件。最后,指导开发者编写板端C程序,完成视频流处理、NNIE推理及结果后处理,并提供了部署调试与性能优化的实用技巧。

weixin_29215815的博客 268

深入理解 ioctl 接口:原理、代码示例与应用场景

在 Linux 设备驱动开发领域,ioctl 接口是一个功能强大且极为重要的工具。它就像是一把万能钥匙,能让用户空间的程序与内核空间的设备驱动进行灵活且多样化的交互。下面我们就来全面深入地了解一下 ioctl 接口。

m0_57836225的博客 2887

第3版•系统集成项目管理工程师(中级) │ 第6章 数据工程

🥏第3版•系统集成项目管理工程师(中级) │ 第6章 数据工程

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

网络工程师如何利用Python自动Telnet到N个路由器并执行配置?

telnetlib是Python标准库中的一个模块,专门用于实现Telnet协议。通过telnetlib,我们可以方便地与支持Telnet协议的远程设备进行通信。telnetlib提供了基本的Telnet功能,如连接远程主机、发送命令、读取响应等,使得编写Telnet自动化脚本变得非常简单。文档:可以选择中文:虽然telnetlib的功能相对基础,但对于大多数Telnet操作来说已经足够。通过telnetlib,可以轻松地实现与网络设备的交互,完成自动化配置任务。

网络技术联盟站 298

深入理解 ioctl(二):从概念到代码实现

ioctl是一个非常重要的系统调用,它主要用于设备驱动程序与用户空间程序之间进行控制命令的传递和数据交换。简单来说,当用户空间程序需要对设备进行一些特殊操作,而这些操作无法通过常规的文件读写操作完成时,就可以使用ioctl。比如设置设备的工作模式、获取设备的状态信息等。通过以上代码示例,我们可以看到ioctl在用户空间和内核空间之间的交互过程。它为用户空间程序提供了一种灵活的方式来控制设备,同时也为内核空间的设备驱动开发提供了强大的功能支持。希望通过这篇博客,大家对ioctl。

m0_57836225的博客 568

【报错】raise pickle.UnpicklingError(_get_wo_message(str(e))) from None_pickle.UnpicklingError: Weigh

File "/opt/conda/envs/py_3.12/lib/python3.12/site-packages/torch/serialization.py", line 1470, in load raise pickle.UnpicklingError(_get_wo_message(str(e))) from None _pickle.UnpicklingError: Weights only load failed.

静谧、淡雅 783

linux 下的ioctl简介

这几天有时间看了一下《深入理解linux网络系统内幕》,有关于ioctl部分和大家分享一下。 ioctl说白了就是用户通过调用ioctl函数可以修改驱动相关的东西,函数原型如下: int ioctl(int handle, int cmd,[int *argdx, int argcx]); 如我们使用ifconfig eth0 mtu 1250 这样的命令,用来改变接口eth0的MTU是,...

七七的博客 1766

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

深入理解Linux内核态与用户态通信:Netlink与ioctl机制对比指南

Linux内核态与用户态通信是操作系统设计的核心概念之一,了解**内核态与用户态通信机制**对于深入理解Linux系统工作原理至关重要。在众多通信方式中,Netlink和ioctl是两种最常用且功能强大的机制,它们在内核与用户空间之间架起了高效的数据交换桥梁。 ## 🔍 为什么需要内核态与用户态通信? 在Linux系统中,内核运行在**内核态**(特权模式),拥有对硬件的完全访问权限,而用户

gitblog_00657的博客 862

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深入理解Linux底层文件操作:write、read、open、close、lseek和ioctl命令详解

本文深入解析Linux底层文件操作的核心系统调用,包括write、read、open、close、lseek和ioctl。write用于数据写入,read实现数据读取,open负责文件打开并返回描述符,close关闭文件释放资源,lseek控制文件指针位置,ioctl则用于设备控制。文章详细介绍了每个调用的功能、用法、返回值及注意事项,并提供了代码示例。这些系统调用是Linux文件操作的基础,掌握它们对开发高效文件管理程序至关重要,能帮助开发者更好地进行文件处理和设备交互。

qq_35803412的博客 1429

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ioctl函数

ioctl函数

u012424416的博客 262

linux函数ioctl的使用

我这里说的ioctl函数是在驱动程序里的,因为我不知道还有没有别的场合用到了ioctl, 所以就规定了我们讨论的范围。为什么要写篇文章呢,是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑。 一、 什么是ioctl。 ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等

stonesharp的专栏 836

Linux ioctl函数

Linux ioctl函数   转载自:http://www.linuxidc.com/Linux/2007-12/9623.htm     我这里说的ioctl函数是指驱动程序里的,因为我不知道还有没有别的场合用到了它,所以就规定了我们讨论的范围。写这篇文章是因为我前一阵子被ioctl给搞混了,这几天才弄明白它,于是在这里清理一下头脑。 一、 什么是ioct

elbort的专栏 808

Linux设备驱动之Ioctl控制

大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力。  一、在用户空间,使用ioctl系统调用来控制设备,原型如下: int ioctl(int fd,unsigned long cmd,...); /* fd:文件描述符 cmd:控制命令 ...:可选参数:插入*argp,具体内容依赖于cmd */   用户程序所作的只是通过命令码告诉驱动程序它想做什么,至于怎么

linux内核 665
上一篇: 设备树FDT是如何被内核识别的
下一篇: 原子操作的原理和本质
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值