linux驅動ioctl
① linux系統中的ioctl函數的CMD的幻數定義在哪裡定義是驅動程序中還是應用程序中
COMMAND命令字可以自己定義,也可以用不同驅動已定義的命令字。CMD命令字的用處打個比方,用戶層想使用內核層某驅動的一個功能,那麼它就可以通過IOCTL傳相應的命令字下去,給內核,內核通過接受到的命令字,實現相應功能。
② 麻煩問一下Linux下GPIO驅動的問題,ioctl函數和write函數有什麼區別,
可以用man命令查看區別
man ioctl :
NAME
ioctl - control device
man write :
NAME
write - write to a file descriptor
③ 簡要說明Linux設備驅動程序中常用的ioctl方法和read/write方法的異同點
ioctl是iocontrol的縮寫,就是IO控制。
行為上:
簡單來說,如果你在寫驅動程序時候,碰到一些IO操作,在邏輯上不能歸類到read,不能歸類到write,那就可以認為是ioctl的部分。
read和write應該是寫入和讀出數據的,應該是作為單純的數據交換的方式來處理。而ioctl則是控制read和write一些選項的。比如:你做了一個通用的讀寫IO埠的驅動模塊。read和write是從埠讀寫數據的,但是更改讀寫的埠,這個操作應該如何處理呢?顯然用ioctl來實現比較合理。比如你的read和write是可以阻塞的,或者不能阻塞的,或者對設備文件的讀寫是可以並發的,或者是不可以並發的,這些都可以寫成可以用ioctl來配置的情況。後面為了可以用ioctl來實現模塊不同的IO特點。
參數上,ioctl的一般參數格式就是命令字(常量)+命令參數的方式。
read和write的參數格式都是數據緩沖區+數據目的地指針+長度。