compat_ioctl 32位运行环境下调用64位的ioctl内核

2024-06-20 06:58

本文主要是介绍compat_ioctl 32位运行环境下调用64位的ioctl内核,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

compat_ioctl 被使用在用户空间为32位模式,而内核运行在64位模式时常使用.unlocked_ioctl 属性指定ioctl,。这时候,需要将64位转成32位。例如PCBA测试

如何转换?

请参考下面的方式在内核中添加

 

1.   file_operations 中添加属性并指定函数

static const struct file_operations bcm2079x_dev_fops = {

.owner = THIS_MODULE,

.llseek = no_llseek,

.poll = bcm2079x_dev_poll,

.read = bcm2079x_dev_read,

.write = bcm2079x_dev_write,

.open = bcm2079x_dev_open,

.unlocked_ioctl = bcm2079x_dev_unlocked_ioctl,

.compat_ioctl = bcm2079x_dev_compat_ioctl

};

 

2. 实现新指定的函数,实现指针的转换

static long bcm2079x_dev_compat_ioctl(struct file *file,

 unsigned int cmd, unsigned long arg)

{

void __user *arg64 = compat_ptr(arg);

int result = 0;

if (!file->f_op || !file->f_op->unlocked_ioctl) {

printk("%s >> file->f_op or file->f_op->unlocked_ioctl is null\n",__func__);

return -ENOTTY;

}

switch (cmd) {

// 这里表省略.....

case BCMNFC_CHANGE_ADDR:

if (file->f_op->unlocked_ioctl)

result = file->f_op->unlocked_ioctl(file, BCMNFC_CHANGE_ADDR, (unsigned long)arg64);

break;

case BCMNFC_POWER_CTL:

if (file->f_op->unlocked_ioctl)

result = file->f_op->unlocked_ioctl(file, BCMNFC_POWER_CTL, (unsigned long)arg64);

break;

default:

printk("%s  unknown cmd \n", __func__);

 

return 0;

}

 

return 0;

}


这篇关于compat_ioctl 32位运行环境下调用64位的ioctl内核的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1077422

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

python获取cmd环境变量值的实现代码

《python获取cmd环境变量值的实现代码》:本文主要介绍在Python中获取命令行(cmd)环境变量的值,可以使用标准库中的os模块,需要的朋友可以参考下... 前言全局说明在执行py过程中,总要使用到系统环境变量一、说明1.1 环境:Windows 11 家庭版 24H2 26100.4061

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

pytest+allure环境搭建+自动化实践过程

《pytest+allure环境搭建+自动化实践过程》:本文主要介绍pytest+allure环境搭建+自动化实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、pytest下载安装1.1、安装pytest1.2、检测是否安装成功二、allure下载安装2.

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl