姓名:鄭煜爍? 學(xué)號:19029100010? 學(xué)院:電子工程學(xué)院
轉(zhuǎn)自:https://blog.csdn.net/u012142460/article/details/78951664
【嵌牛導(dǎo)讀】簡單介紹相關(guān)的控制操作和命令
【嵌牛鼻子】ioctl設(shè)備基本操作
【嵌牛提問】何為ioctl設(shè)備
【嵌牛正文】
對驅(qū)動設(shè)備除了讀寫操作,還應(yīng)該有一個控制操作溜歪,內(nèi)核將對設(shè)備的控制操作委派給了ioct接口,ioctl也是一個系統(tǒng)調(diào)用,函數(shù)原型如下:
? int ioctl(int d, int request,......)
d表示文件描述符
request我們理解為命令
后面可以跟命令的參數(shù)
在文件操作集合中與ioctl對應(yīng)的函數(shù)是:
? ? ? ? ? ? ? ? ? ? ? ? ? ? long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
第一個參數(shù)表示打開的文件結(jié)構(gòu)指針
第二個參數(shù)與request對應(yīng)
第三個參數(shù)與系統(tǒng)調(diào)用的第三個參數(shù)對應(yīng)揍移。
對于第二個參數(shù)request,需要遵從一定的規(guī)則
bit31-30? ? ? ? ? 00 命令不帶參數(shù)
? ? ? ? ? ? ? ? ? ? ? 10? 命令需要從驅(qū)動中獲取數(shù)據(jù),讀方向
? ? ? ? ? ? ? ? ? ? ? ? 01 命令需要把數(shù)據(jù)寫入驅(qū)動黍图,寫方向
? ? ? ? ? ? ? ? ? ? ? ? 11 命令既要寫數(shù)據(jù)也要讀數(shù)據(jù) 讀寫
bit 29-16? ? ? ? ? 如果命令帶參數(shù),則指定參數(shù)所占用的內(nèi)存空間大小
bit15-8? ? ? ? ? ? 每個驅(qū)動全局唯一的幻數(shù)
bit7-0? ? ? ? ? ? ? ? 命令碼
內(nèi)核有命令碼來生成相關(guān)命令
命令碼如何生成:
? ? ? ? #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 :8位一個幻數(shù)奴烙,任意的一個字符
? ? nr? :自然數(shù)? 8位
? ? size :數(shù)據(jù)的類型 占 14位
? ? dir? :方向占用 2位
例:
#define SET_BAUD? _IOW('c',0,unsigned int )
————————————————
版權(quán)聲明:本文為CSDN博主「念念有余」的原創(chuàng)文章助被,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明切诀。
原文鏈接:https://blog.csdn.net/u012142460/article/details/78951664