一:字符设备控制理论:
大部分驱动程序除了提供读写设备能力,还需要具备设备控制的能力。例如改变波特率。
控制设备使用ioctl系统调用函数。当使用ioctl系统调用时驱动程序将由:2.6.36之前的内核使用ioctl,
2.6.36以后的内核使用unlocked_ioctl
cmd通过上述两个函数发送下去。
二:实现字符设备控制:
定义命令:命令就是一个整数,通常这个整数被分为几段:类型 type、序号 number、参数传输方向 direction、参数长度 size。
linux下提供了宏来帮助定义命令:
_IO(type,nr) :不带参数的命令
_IOR(type , nr , datatype) :向设备读取参数的命令
_IOW(type , nr , datatype) :向设备写入参数的命令
例如:#define MEM_MAGIC 'm' 定义幻数
#define MEM_SET_IOW(MEM_MAGIC , 0 , int)
unlocked _ioctl通常是根据命令执行一个switch语句,但是均不匹配时,返回-EINVAL
编程模型:
switch cmd
case 命令A:
执行A操作
case 命令B:
执行B操作
case 命令C:
执行C操作
Default:
return -EINVAL