LDD3 study note 2

2023-11-02 05:32
文章标签 note study ldd3

本文主要是介绍LDD3 study note 2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LDD3 study note 2

-v0.1 2016.12.31 Sherlock init

这篇文章在note1的基础上,进一步记录实现一个ioctl要注意的地方。相关的代码在:
https://github.com/wangzhou/scull.git, tag: scull_2

1. ioctl

驱动可以通过ioctl函数定义一组和用户态程序交互的接口.
ioctl的用户态接口是:int ioctl(int d, int request, …). 一般我们可以认为是:
int ioctl(int fd, int cmd, int arg)。其中fd是要操作的文件,cmd是下发的命令字,
和驱动里ioctl实现的命令字是一一对应的。arg是传入内核的参数,可以看到一般的情况
下arg这个参数是一个指针变量。

2. 命令码

cmd不是可以随便定义的,具体可以参考linux/Documentation/ioctl/ioctl-number.txt
这个文档。简单来讲,一个命令字是四段组成的。每段具体是什么内容可以查看LDD3或者
上面的文档。生成命令字需要用内核提供的一组宏,这组宏的定义在:
linux/include/uapi/asm-generic/ioctl.h

一般定义命令字用下面这组宏:

#define _IO(type,nr)        _IOC(_IOC_NONE,(type),(nr),0)
#define _IOR(type,nr,size)  _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOW(type,nr,size)  _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))

type是在ioctl-number.txt里讲过的魔术字,作为命令字最基本的区分。nr是ioctl接口
的第几个命令,一般是0,1,2…, size LDD3上解释的不是很清楚,暂时用int(Fix me)。
命令的类型会合成命令字中的一段。这样,以上四段内容会拼成一个ioctl的命令字。

可以看到一个ioctl支持的接口命令中type,size一样的,命令的类型和序号有可能有区别。

3. 用户态头文件

ioctl是一种用户态和内核交流信息的方式。用户态调用ioctl的时候,发起的命令、传入
内核的数据结构, 在用户态都要有定义。目前的本人的做法是,在用户态的头文件中拷贝
内核中命令码生成的相关宏定义(Fix me),对于交流信息的数据结构,也在用户态头文件中
再定义一次。

4. 传变量和传指针

受到ioctl接口的限制, 用户态可以使用传变量和传指针的方式向内核发送信息, 传变量
也只能是一个unsigned long类型。内核向用户态传信息,就只能向用户态传进来的指针里
写数据了。

这篇关于LDD3 study note 2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

(南京观海微电子)——GH7006 Application Note

Features ⚫ Single chip solution for a WXGA α-Si type LCD display ⚫ Integrate 1200 channel source driver and timing controller ⚫ Display Resolution: ◼ 800 RGB x 480 ◼ 640 RGB x 480 ⚫ Display int

chapter06 面向对象基础 知识点Note

文章目录 前言类的设计 属性和行为对象的内存解析 (堆 栈 方法区)类的成员之一 变量(属性) field类的成员之二 方法 method对象数组方法重载 overload可变个数的形参 语法糖方法的值传递机制递归关键字package importMVC设计模式import导入面向对象特征之一 封装类的成员之三 构造器JavaBeanUML类图 前言 ` 面向对象封装 面向

Study Plan For Algorithms - Part24

1. 包含min函数的栈 定义栈的数据结构,要求在该类型中实现一个 min 函数,能够获取栈的最小元素。在该栈中,调用 min、push 以及 pop 函数的时间复杂度均为 O (1)。 方法: class MinStack:def __init__(self):self.stack = []self.min_stack = [float('inf')]def push(self, x):sel

Cmake note

cmake 指定交叉编译工具 指定install安装目录 $CC=arm-linux-uclibcgnueabi-gcc cmake -DCMAKE_INSTALL_PREFIX=./output . $make $make install 删除camke cache文件: find . -iname ‘cmake’ -not -name CMakeLists.txt -exec rm -rf

chapter01 Java语言概述 知识点Note

JavaSE JavaEE JavaME 大数据 Java基础常用技术栈 mysql JDBC SSM spring+spring mvc+mybatis Linux nacos Hadoop Flink JAVA EE 消息队列 rabbitMQ docker 数据库 redis spring boot springcloud ssh struts + spring + hiber

chapter03 流程语句 知识点Note

@TOC 分支结构if-else 和 switch-case switch(表达式){case 常量值1:语句块1;//break;case 常量值2:语句块2;//break; // ...[default:语句块n+1;break;]} switch-case 执行过程: 第1步:根据switch中表达式的值,依次匹配各个case。如果表达式的值等于某个case中的常量值,则执行对

Study Plan For Algorithms - Part21

1. 二叉树的镜像 输入一个二叉树,输出它的镜像。 方法一: class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef mirrorTree(root):if not root:return Nonetemp, left,

work note

1:  sum_total 是什么意思?  没有百度出来 见proce:  rptMohthCdr

Self-study Python Fish-C Note20 P64to65

类和对象 (part 3) 本节主要介绍 类和对象的多态和鸭子类型、私有变量和 __slots__(原视频P64-65)\ 多态 多态是面向对象编程的三大特征之一,另外两个是封装和继承。多态是指同一个运算符、函数或对象,在不同场景下具有不同作用效果的情况。 Python 是一门动态语言,多态本来就是 Python的一种特性。 比如: 加号:两边都是数字的时候就是执行算术运算(相加),如果两边

note-Redis实战3 核心-数据安全与性能保障

助记提要 快照持久化的作用和缺点Redis创建快照的时机AOF文件同步的三种配置AOF文件重写的方式Redis复制的配置项和控制命令Redis复制过程 5步Redis主从链确认数据写入从服务器硬盘故障处理的两步Redis事务命令 5个Redis事务的特点 3点非事务型流水线使用性能测试工具评估客户端的性能 4章 数据安全与性能保障 持久化和复制 故障恢复 事务和流水线 4.1 快照持久