当前位置: 首页 > news >正文

ioctl回顾

一、ioctl协议的命令组成

cmd本质为一个32位的数字,共分为四段:

[31-30]:读写方向dir,分为无数据(_IO)、读数据(_IOR)、写数据(_IOW)、读写数据(_IOWR)四种模式;

[29-16]:传递数据的大小size,一般利用其宏_IO、_IOR等直接传入数据的类型,如int;

[15-8]:命令的幻数type,表示设备的类型,可以是任意一个char型字符,如’a’、‘b’、‘c’等,其主要作用是使ioctl命令具有唯一的设备标识。不过在内核中’w’、‘y’、'z’三个字符已经被使用了。

[7-0]:命令的编号nr,有多个ioctl命令时,从0开始往上编号;


二、ioctl的宏

生成cmd的宏:

_IO(type,nr):用来定义没有数据传递的命令

_IOR(type,nr,size):用来定义从驱动中读取数据的命令

_IOW(type,nr,size):用来定义向驱动写入数据的命令

_IOWR(type,nr,size):用来定义数据交换类型的命令,先写入数据,再读取数据这类命令。

解析cmd的宏:

_IOC_DIR(cmd):解析命令的方向;

_IOC_TYPE(cmd):解析命令的幻数;

_IOC_NR(cmd):解析命令的编号;

_IOC_SIZE(cmd):解析命令的复制数据大小;


三、用于输入输出的时候需要注意的点

用于输入输出时需要使用copy_to_user或copy_from_user函数实现与用户空间的交互。其中,由于unlocked_ioctl函数中的arg参数是一个值,因此使用时需要注意:

  • 用户程序中ioctl函数虽然第三个参数是可变参数,但实际上只有一个,且传入的应为int类型数据的地址,即需要添加取地址符,如下:
    int rst = ioctl(fd, AFM_DEV_CMD_TEST, &aaa);
  • 驱动程序中需要对传入的arg参数进行强制类型转换,将其变回地址类型,如下:
    copy_to_user((void __user *)arg, &success_rst, sizeof(success_rst))
    copy_from_user(&print_verbos, (void __user *)arg, sizeof(print_verbos))

相关文章:

ioctl回顾

一、ioctl协议的命令组成 cmd本质为一个32位的数字,共分为四段: [31-30]:读写方向dir,分为无数据(_IO)、读数据(_IOR)、写数据(_IOW)、读写数据(_IOWR)四种模式; [29-16]:传递数据的大小size,一般利用其宏_IO、_IOR…...

jquery-validate在前端数据校验中的应用以及remote异步调用实践-以若依为例

目录 前言 一、关于Jquery Validate组件 1、validate是什么 2、内置验证方式及触发方式 3、自定义验证规则 二、基本验证实战以及Remote验证 1、基本验证实现 2、remote校验方式 三、总结 前言 随着技术的不断演进,在我们的日常开发过程中,大家一…...

如何重新设置VSCode的密钥环密码?

故障现象: 忘记了Vscode的这个密码: Enter password to unlock An application wants access to the keyring “Default ke... Password: The unlock password was incorrect Cancel Unlock 解决办法: 1.任意terminal下,输入如下…...

Android--java实现手机亮度控制

文章目录 1、开发需求2、运行环境3、主要文件4、布局文件信息5、手机界面控制代码6、debug 1、开发需求 需求:开发一个Android apk实现手机亮度控制 2、运行环境 Android studio最新版本 3、主要文件 app\src\main\AndroidManifest.xml app\src\main\res\layou…...

原点安全再次入选信通院 2024 大数据“星河”案例

近日,中国信息通信研究院和中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织开展的 2024 大数据“星河(Galaxy)”案例征集活动结果正式公布。由工银瑞信基金管理有限公司、北京原点数安科技有限公司联…...

torch.nn.init 模块介绍

PyTorch 的 torch.nn.init 模块提供了一组用于初始化张量或模型参数的函数。这些初始化方法对深度学习模型的训练收敛速度和性能有显著影响,正确选择初始化方法可以避免梯度消失或爆炸等问题。 模块功能 torch.nn.init 提供了一系列函数,用于对张量(如权重或偏置)进行初始…...

人工智能与物联网:从智慧家居到智能城市的未来蓝图

引言:未来已来,智能化的世界 想象一下,一个早晨,智能闹钟根据你的睡眠状态自动调整叫醒时间,咖啡机早已备好热腾腾的咖啡,窗帘缓缓拉开,迎接清晨的阳光。这不是科幻小说中的场景,而是…...

极狐GitLab 17.7正式发布,可从 GitLab 丝滑迁移至极狐GitLab【一】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...

纯Dart Flutter库适配HarmonyOS

纯Dart Flutter库适配HarmonyOS介绍: Flutter基本组件、Flutter布局组件、Flutter图片组件、Flutter字体、Flutter图标、Fluter路由、flutter动画、 Flutter表单、flutter异步等,纯Dart库无需任何处理,可以直接编译成HarmonyOs应用。 具体步…...

【R语言遥感技术】“R+遥感”的水环境综合评价方法

R语言在遥感领域中是一个强大的工具,它提供了一系列的功能和优势,使得遥感数据的分析和应用更加高效和灵活。以下是R语言在遥感中的具体应用: 数据处理:R语言可以处理和清洗遥感数据,包括数据转换、滤波处理、去噪和数…...

软件工程三 需求获取与结构化分析方法(需求分析、功能建模、数据建模、行为建模、数据字典等)

包括内容如下: 1. 需求获取与需求分析阶段的任务 2. 结构化分析方法 3. 系统需求规格说明 4. 需求评审 5. 需求管理 3.1 需求获取与需求分析阶段的任务 3.1包括: 需求获取的任务和原则 需求获取的过程 软件需求分析阶段的任务 3.1.1需求获取的任…...

Python 抽象基类 ABC :从实践到优雅

今天我们来聊聊 Python 中的抽象基类(Abstract Base Class,简称 ABC)。虽然这个概念在 Python 中已经存在很久了,但在日常开发中,很多人可能用得并不多,或者用得不够优雅。 让我们从一个实际场景开始&…...

Elasticsearch检索方案之一:使用from+size实现分页

前面两篇文章介绍了elasticsearch以及Kibana的安装,检索引擎以及可视化工具都已经安装完成,接下来介绍下如何使用golang的sdk实现简单的分页查询。 1、下载Elastic官方golang sdk 在讲解elasticsearch检索之前,需要先把golang的环境安装好&…...

知识图谱+大模型:打造全新智慧城市底层架构

在数字化时代,智慧城市的建设正迎来新一轮的变革。本文将探讨如何结合知识图谱和大模型技术,构建智慧城市的全新底层架构,以应对日益增长的数据量和复杂性,提升城市管理的智能化水平。 知识图谱:智慧城市的知识库 知识…...

Flutter开发HarmonyOS 鸿蒙App的好处、能力以及把Flutter项目打包成鸿蒙应用

Flutter开发HarmonyOS的好处: Flutter是谷歌公司开发的一款开源、免费的UI框架,可以让我们快速的在Android和iOS上构建高质量App。它最大的特点就是跨平台、以及高性能。 目前 Flutter 已经支持 iOS、Android、Web、Windows、macOS、Linux 的跨平台开发…...

vscode安装fortran插件配置

本章教程,主要介绍如何在vscode上安装fortran插件,以便于使用vscode运行fortran编写的程序。 一、安装插件 首先在插件商店安装这个扩展插件 然后再把Code Runner扩展插件装上 二、下载mingw64 通过网盘分享的文件:mingw64 链接: https://pan.baidu.com/s/1fwS-CwC7dgI...

容器化平台Docker初识

Docker 是一个容器化平台,可以让你打包、分发和运行应用程序。它的核心思想是通过容器技术,让应用程序在任何环境下都能以一致的方式运行。 通俗易懂的理解 快餐盒的比喻: 假设你做了一顿饭(开发了一个应用程序)&#…...

【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 1、输入数值 2、选择结构语句 3、计算结果并输出 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务:编写一个程序,该程序需输入个人数据,进而预测其成年后的身高。 相关知识 为了完成本…...

简单两步使用ssh配置内网穿透

解决问题:内网主机没有公网IP,无法从外网登录 流程 首先去阿里云租一台最便宜的服务器作为中转服务器 登录中转服务器(cloudserver) ssh [cloudserver] # 开放对应中转服务 ufw allow [remote_port] #remote_port 2222 vim /etc/ssh/sshd_config将对…...

M系列芯片切换镜像源并安装 openJDK17

1. 查找openjdk版本 执行:brew search openjdk,注意:执行命令后,如果得到的结果中没有红框内容,则需要更新一下 brew 更新 brew 分别执行以下命令: cd "$(brew --repo)" export HOMEBREW_API_D…...

英雄联盟录像编辑终极指南:免费开源工具League Director完全教程

英雄联盟录像编辑终极指南:免费开源工具League Director完全教程 【免费下载链接】leaguedirector League Director is a tool for staging and recording videos from League of Legends replays 项目地址: https://gitcode.com/gh_mirrors/le/leaguedirector …...

低代码平台扩展性有多重要?没有这能力,迟早要重构

在企业数字化转型的浪潮中,低代码平台凭借“快速搭建、降低门槛”的核心优势,成为众多企业实现高效开发的首选工具。不少企业在低代码平台选型时,往往过度关注“开发速度”“易用性”等表层指标,却忽略了一个决定平台生命周期的核…...

Windows Subsystem for Android全流程实战攻略:从环境搭建到场景落地

Windows Subsystem for Android全流程实战攻略:从环境搭建到场景落地 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA Windows Subsystem for And…...

如何开发GJSON自定义修饰符:扩展你的JSON处理能力

如何开发GJSON自定义修饰符:扩展你的JSON处理能力 【免费下载链接】gjson Get JSON values quickly - JSON parser for Go 项目地址: https://gitcode.com/gh_mirrors/gj/gjson GJSON是Go语言中一款高效的JSON解析工具,它允许开发者快速从JSON数据…...

探索Matlab在自动驾驶中的计算机视觉应用

Matlab自动驾驶,基于Matlab实现的计算机视觉代码。 计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理。 代码可正常运行在自动…...

数据结构之并查集(Union-Find)

并查集(Union-Find)详解 1. 引言 并查集(Union-Find)是一种高效的数据结构,主要用于解决动态连通性问题。它能够快速地判断两个元素是否属于同一个集合,以及将两个不同的集合合并成一个集合。并查集在图论、…...

TMSpeech:完全免费开源的Windows实时语音转文字工具终极指南

TMSpeech:完全免费开源的Windows实时语音转文字工具终极指南 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录而烦恼吗?TMSpeech是一款完全免费、开源的Windows实时语音转文字工…...

ai辅助开发新体验:在快马平台上打造会思考的智能成片ppt生成网站

最近在做一个智能PPT生成网站的项目,发现结合AI辅助开发真的能带来不少惊喜。今天就来分享一下如何利用InsCode(快马)平台快速实现一个会思考的PPT生成工具。 项目背景与核心功能 传统PPT制作需要手动整理内容、设计版式,整个过程耗时费力。而智能PPT生成…...

seo优化软件有哪些种类_seo优化软件对比

SEO优化软件有哪些种类_SEO优化软件对比 随着互联网的迅猛发展,网站在竞争中占据优势的关键在于其在搜索引擎上的排名。SEO优化软件在这一过程中扮演着不可或缺的角色。SEO优化软件究竟有哪些种类?每种软件又有什么特点呢?本文将详细探讨SEO…...

C++边缘设备编译臃肿难题(工业级轻量编译链路全拆解)

第一章:C边缘设备编译臃肿的根源与工业级轻量化必要性在资源受限的工业边缘设备(如ARM Cortex-M7微控制器、RISC-V SoC或低功耗网关)上,C项目常面临二进制体积激增、启动延迟升高和内存碎片化等严峻挑战。其根源并非语言本身&…...