• ioctl


    ioctl是设备驱动程序中对设备的I/O通道进行管理的函数

    int ioctl(int fd, int cmd, …)

    fd:用户程序打开设备时返回的文件标示符
    cmd:用户程序对设备的控制命令

    定义格式

    | 设备类型| 序列号| 方向 |数据尺寸|
    |---------|-------|------|--------|
    |  8 bit  | 8 bit |2 bit |8~14 bit|
    |---------|-------|------|--------|

    宏头文件

    asm/ioctl.h

    宏注释

    #define _IOC_SIZEBITS 14 //大小(size)字段的字位宽度,14bits
    #define _IOC_NRBITS   8  //序数(number)字段的字位宽度,8bits
    #define _IOC_TYPEBITS 8  //幻数(type)字段的字位宽度,8bits
    
    #define _IOC_DIRSHIFT  (_IOC_SIZESHIFT+_IOC_SIZEBITS) //16+14
    #define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS) //0+8
    #define _IOC_NRSHIFT   0 //0
    #define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS) //8+8
    
    #define _IOC(dir, type, nr, size) 
    (((dir) << _IOC_DIRSHIFT) | 
    ((type) << _IOC_TYPESHIFT) | 
    ((nr) << _IOC_NRSHIFT) | 
    ((size) << _IOC_SIZESHIFT))
    
    #define _IOC_NONE 0U    //没有数据传输
    #define _IOC_WRITE 1U   //向设备写入数据
    #define _IOC_READ 2U    //从设备中读取数据
    
    #define _IO(type,nr) _IOC(_IOC_NONE, (type), (nr), 0)
    #define _IOR(type,nr,size) _IOC(_IOC_READ, (type), (nr), sizeof(size))
    #define _IOW(type,nr,size) _IOC(_IOC_WRITE, (type), (nr), sizeof(size))
    #define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE, (type), (nr), sizeof(size))

    type(魔数): 魔数范围为 0~255 。通常,用英文字符 “A” ~ “Z” 或者 “a” ~ “z” 来表示。不同的设备驱动程序最好设置不同的魔数,但并不是要求绝对,也是可以使用其他设备驱动程序已用过的魔数
    nr(序列号):通常,从 0开始递增,相同设备驱动程序上可以重复使用该值。例如,读取和写入命令中使用了相同的基数,设备驱动程序也能分辨出来
    size(变量型):变量或者是变量的类型

    cmd组成

    _IOC(dir, type, nr, size)
    _IO(type, nr)   //简单方法

    举例

    #define NEWCHAR_IOC_MAGIC   'M'
    #define NEWCHAR_SET    _IO(NEWCHAR_IOC_MAGIC, 0)
    #define NEWCHAR_GET    _IO(NEWCHAR_IOC_MAGIC, 1)
    #define NEWCHAR_IOC_MAXNR   1
  • 相关阅读:
    开不了的窗_____window.open
    IIS项目发布完整流程
    理解MVC模式
    ASP.NET MVC 基础(01)
    C#之线程和并发
    vue时间格式化
    windows 2013 datacenter 安装sql server2008 r2兼容性
    SQL Server DBA十大必备工具使生活轻松
    ORACLE主要的系统表和系统视图
    Oracle中spool命令实现的两种方法比较
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709819.html
Copyright © 2020-2023  润新知