ioctl和unlock ioctl的區別

2022-09-16 18:54:14 字數 661 閱讀 4259

今天調乙個程式調了半天,發現應用程式的ioctl的cmd引數傳送到驅動程式的ioctl發生改變。而根據《linux裝置驅動》這個cmd應該是不變的。因為在kernel 2.6.36 中已經完全刪除了struct file_operations 中的ioctl 函式指標,取而代之的是unlocked_ioctl ,所以我懷疑二者是不是相容的。上網查了一些資料,很多文章只是泛泛談了一下,說在應用程式中ioctl是相容的,不必變化。而在驅動程式中這個指標函式變了之後最大的影響是引數中少了inode,所以應用程式ioctl是相容的,但驅動程式中我們的ioctl函式必須變化,否則就會發生cmd引數的變化:

原來的驅動程式

static const struct file_operations globalmem_fops=

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

}改變後的

static const struct file_operations globalmem_fops=

;int globalmem_ioctl(struct file* filp, unsigned int cmd,unsigned long arg)//沒有inode引數!

}

使用ioctl和核心交換資料

1.前言 使用ioctl系統呼叫是使用者空間向核心交換資料的常用方法之一,從ioctl這個名稱上看,本意是針對i o裝置進行的控制操作,但實際並不限制是真正的i o裝置,能是所有乙個核心裝置即可。2.基本過程 在核心空間中ioctl是非常多核心操作結構的乙個成員函式,如檔案操作結構struct fi...

ioctl相關知識

一 什麼是ioctl ioctl是裝置驅動程式中對裝置的i o通道進行管理的函式。所謂對i o通道進行管理,就是對裝置的一些特性進行控制,例如串列埠的傳輸波特率 馬達的轉速等等。它的呼叫個數如下 int ioctl int fd,ind cmd,其中fd就是使用者程式開啟裝置時使用open函式返回的...

ioctl初步理解

ioctl系統呼叫是為使用者空間建立的一種控制硬體裝置的通道。比如控制串列埠的波特率,馬達的轉速等等。是使用者空間和核心空間進行通訊的方式之一。要實現乙個ioctl,需要使用者空間和核心空間兩方面的配合。如果想要乙個硬體支援ioctl,則要在其驅動函式中加入ioctl的實現,應用程式想要通過ioct...