【14】Linux-字符設備控制技術

Linux-字符設備控制技術

設備控制-應用函數

在用戶空間,使用ioctl系統調用來控制設備:

int ioctl(int fd, unsigned long cmd, ....)

fd:要控制的設備文件描述符

cmd:發送給設備的控制命令,其實只是用來起到標識作用

...:可選參數,存在與否依賴於控制命令,可以簡單地課程就是一個參數

內核file_operations中對應函數

long (*ioctl)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg);

long (*unlocked_ioctl)(struct file *filp, unsigned int cmd, unsigned long arg);

定義命令:

命令其實就是用幾個字段來對設備的控制命令進行更細緻的劃分,由驅動設計者自己設定。

命令由類型(1Byte)、序號、參數傳送方向、參數長度這四個段組成。其中

類型/幻數:表明這是哪個設備的命令

序號:用來區分同一設備的不同命令

參數傳送方向:參數傳送的方向,可能的值是_IOC_NONE(沒有數據傳輸),_IOC_READ,_IOC_WRITE(向設備寫入參數)

參數長度:size

利用linux提供的宏來幫助定義命令【注意不要和linux中的命令衝突】

_IO(type, nr): 不帶參數的命令

_IOR(type, nr, datatype):從設備中讀參數的命令

_IOW(type, nr, datatype): 向設備寫入參數的命令

操作實現

unlocked_ioctl和ioctl函數中通常是使用一個switch來對命令進行識別,從而實現對設備的控制。當命令號不能匹配任何一個設備所支持的命令時,返回-EINVAL

switch cmd{

case A:

break;

case B:

break;

default:

break;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章