字元裝置控制技術

2021-07-01 18:56:18 字數 1130 閱讀 5553

1:大部分驅動程式除了需要提供讀寫裝置的能力,還應具備控制裝置的能力。

2:在使用者空間,使用ioctl系統呼叫來控制裝置。

函式原型:

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

fd: 要控制的裝置檔案描述符

cmd: 傳送給裝置的控制命令

…: 第3個引數是可選的引數,存在與否是依賴於控

制命令(第 2 個引數 

3:當應用程式使用ioctl系統呼叫時,驅動程式將由如下函式來響應:

2.6.36 之前的核心:

long (*ioctl) (struct inode* node,struct file* filp, unsigned int

cmd,unsigned long arg)

2:2.6.36之後的核心(現在一般用的都是2.6.36以後的核心)

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

unsigned long arg)

cmd命令是從ioctl系統呼叫傳遞過來的。

4:定義命令

命令也是乙個整形數值,為了提高其可讀性,通常把這個整數分為幾個段:

1-型別(8位),2-序號,3-引數傳遞方向,4-引數長度

linux系統提供了下面的巨集來幫助進行命令的定義:

_io(type,nr):不帶引數的命令

_ior(type,nr,datatype):從裝置中讀引數的命令

_iow(type,nr,datatype):向裝置寫入引數的命令

例:#define mem_magic  『m』  //定義幻數

#define mem_set _iow(mem_magic, 0, int)

5:操作的實現

unlocked_ioctl函式的實現通常是根據引數cmd而執行乙個switch語句來實現

控制的。當命令不能匹配時,返回-einval.

程式設計模型:

switch cmd

case 命令a:

//執行a對應的操作

case 命令b:

//執行b對應的操作

default:

// return -einval

Linux 字元裝置控制技術

字元裝置控制技術 一。字元裝置控制理論 1.作用 大部分裝置除了具有 讀寫裝置 的能力,還應該有 控制裝置 的能力。比如改變 波特率 2.應用程式介面 在使用者空間中使用 ioctl系統來控制裝置,原型如下 int ioctl int fd,unsigned long cmd,fd 控制的裝置檔案描...

ioctl 字元裝置的控制技術

字元裝置的控制 1.字元裝置控制理論 1.1 作用 大部分驅動程式除了需要提供讀寫裝置的能力外,還需要具備控制裝置的能力。比如 改變波特率 1.2 應用程式介面 在使用者空間,使用ioctl系統呼叫來控制裝置,原型如下 int ioctl int fd,unsigned long cmd,fd 要控...

14 Linux 字元裝置控制技術

裝置控制 應用函式 在使用者空間,使用ioctl系統呼叫來控制裝置 int ioctl int fd,unsigned long cmd,fd 要控制的裝置檔案描述符 cmd 傳送給裝置的控制命令,其實只是用來起到標識作用 可選引數,存在與否依賴於控制命令,可以簡單地課程就是乙個引數 核心file ...