ioctl-basic

了解IOCTL CMD格式


更新記錄

item note
20160616 第一版

目錄


ioctl

command

  • /include/asm-generic/ioctl.h定義如下
  • ioctl command encoding: 32 bits total
type size range description
_IOC_NRBITS 8 bit[0-7] ..
_IOC_TYPEBITS 8 bit[8-15] used as a type field
_IOC_SIZEBITS 14 bit[16-29] ..
_IOC_DIRBITS 2 bit[30-31] access mode
  • 使用到定義如下
_IOC_DIRBITS value
IOC_NONE (0U) 表示無資料傳輸
IOC_WRITE (1U) write data
IOC_READ (2U) read data
  • 採用下例方式組合成32bit指令
1
2
3
4
5
#define _IOC(dir,type,nr,size) \                                         
(((dir) << _IOC_DIRSHIFT) | \
((type) << _IOC_TYPESHIFT) | \
((nr) << _IOC_NRSHIFT) | \
((size) << _IOC_SIZESHIFT))

提供使用_IO,_IOR,_IOW

1
2
3
4
#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)))

參考來源