嵌入式之Linux驅(qū)動(dòng)(四)

姓名:鄭煜爍? 學(xué)號(hào):19029100010? 學(xué)院:電子工程學(xué)院

轉(zhuǎn)自:https://blog.csdn.net/u012142460/article/details/78951664

【嵌牛導(dǎo)讀】簡單介紹相關(guān)的控制操作和命令

【嵌牛鼻子】ioctl設(shè)備基本操作

【嵌牛提問】何為ioctl設(shè)備

【嵌牛正文】

對(duì)驅(qū)動(dòng)設(shè)備除了讀寫操作,還應(yīng)該有一個(gè)控制操作,內(nèi)核將對(duì)設(shè)備的控制操作委派給了ioct接口,ioctl也是一個(gè)系統(tǒng)調(diào)用,函數(shù)原型如下:

? int ioctl(int d, int request,......)

d表示文件描述符

request我們理解為命令

后面可以跟命令的參數(shù)

在文件操作集合中與ioctl對(duì)應(yīng)的函數(shù)是:

? ? ? ? ? ? ? ? ? ? ? ? ? ? long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);

第一個(gè)參數(shù)表示打開的文件結(jié)構(gòu)指針

第二個(gè)參數(shù)與request對(duì)應(yīng)

第三個(gè)參數(shù)與系統(tǒng)調(diào)用的第三個(gè)參數(shù)對(duì)應(yīng)。

對(duì)于第二個(gè)參數(shù)request,需要遵從一定的規(guī)則

bit31-30? ? ? ? ? 00 命令不帶參數(shù)

? ? ? ? ? ? ? ? ? ? ? 10? 命令需要從驅(qū)動(dòng)中獲取數(shù)據(jù),讀方向

? ? ? ? ? ? ? ? ? ? ? ? 01 命令需要把數(shù)據(jù)寫入驅(qū)動(dòng),寫方向

? ? ? ? ? ? ? ? ? ? ? ? 11 命令既要寫數(shù)據(jù)也要讀數(shù)據(jù) 讀寫

bit 29-16? ? ? ? ? 如果命令帶參數(shù),則指定參數(shù)所占用的內(nèi)存空間大小

bit15-8? ? ? ? ? ? 每個(gè)驅(qū)動(dòng)全局唯一的幻數(shù)

bit7-0? ? ? ? ? ? ? ? 命令碼

內(nèi)核有命令碼來生成相關(guān)命令

命令碼如何生成:

? ? ? ? #define _IO(type,nr)? ? _IOC(_IOC_NONE,(type),(nr),0)? ? // 生成一個(gè)命令碼

#define _IOR(type,nr,size)? ? ? _IOC(_IOC_READ,(type),(nr),sizeof(size))? // 生成一個(gè)讀命令碼

#define _IOW(type,nr,size)? ? ? _IOC(_IOC_WRITE,(type),(nr),sizeof(size))? // 生成一個(gè)寫命令碼

#define _IOWR(type,nr,size)? ? _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))? // 生成一個(gè)讀寫命令碼


? ? type :8位一個(gè)幻數(shù),任意的一個(gè)字符

? ? 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)載請(qǐng)附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/u012142460/article/details/78951664

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容