1. 程式人生 > >【14】Linux-字元裝置控制技術

【14】Linux-字元裝置控制技術

Linux-字元裝置控制技術

裝置控制-應用函式

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

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

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

cmd:傳送給裝置的控制命令,其實只是用來起到標識作用

...:可選引數,存在與否依賴於控制命令,可以簡單地課程就是一個引數

核心file_operations中對應函式

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

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

定義命令:

命令其實就是用幾個欄位來對裝置的控制命令進行更細緻的劃分,由驅動設計者自己設定。

命令由型別(1Byte)、序號、引數傳送方向、引數長度這四個段組成。其中

型別/幻數:表明這是哪個裝置的命令

序號:用來區分同一裝置的不同命令

引數傳送方向:引數傳送的方向,可能的值是_IOC_NONE(沒有資料傳輸),_IOC_READ,_IOC_WRITE(向裝置寫入引數)

引數長度:size

利用linux提供的巨集來幫助定義命令【注意不要和linux中的命令衝突】

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

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

_IOW(type, nr, datatype)

: 向裝置寫入引數的命令

操作實現

unlocked_ioctl和ioctl函式中通常是使用一個switch來對命令進行識別,從而實現對裝置的控制。當命令號不能匹配任何一個裝置所支援的命令時,返回-EINVAL

switch cmd{

case A:

break;

case B:

break;

default:

break;

}

相關推薦

14Linux-字元裝置控制技術

Linux-字元裝置控制技術 裝置控制-應用函式 在使用者空間,使用ioctl系統呼叫來控制裝置: int ioctl(int fd, unsigned long cmd, ....) fd:要控制的裝置檔案描述符 cmd:傳送給裝置的控制命令,其實只是用來起到標識作用 .

原創WebRTC的擁塞控制技術(Congestion Control)

本文為個人原創,歡迎轉載,但請務必在明顯位置註明出處! 1. 概述 對於共享網路資源的各類應用來說,擁塞控制技術的使用有利於提高頻寬利用率,同時也使得終端使用者在使用網路時能夠獲得更好的體驗。在協議層面上擁塞控制是TCP的一個總要的組成部分;但是對於非面向連結的傳輸層協議,如UDP,其在協議層面上並沒有

JS API指令碼語言-裝置控制介面說明-查詢有多少種不同的顏色

裝置控制介面說明-查詢有多少種不同的顏色 getColorCount 原型: getColorCount(topLeftX, topLeftY, bottomRightX, bottomRightY) 是否支援多裝置: 不支援 對應的 REST API: 在指定區域內查詢

JS API指令碼語言-裝置控制介面說明-獲取裝置的螢幕顏色深度

getColorBits 原型: getColorBits() 是否支援多裝置: 不支援 對應的 REST API: 獲取當前裝置的螢幕顏色深度 (getColorBits) 描述: 獲取當前裝置的螢幕顏色深度 什麼是顏色深度? 顏色深度簡單說就是最多支援多少種顏色。

JS API指令碼語言-裝置控制介面說明-獲取裝置剪貼簿的內容

裝置控制介面說明-獲取裝置剪貼簿的內容 getClipboardText 原型: getClipboardText() 是否支援多裝置: 不支援 對應的 REST API: 獲取手機剪貼簿內容 描述: 獲取當前手機剪貼簿中的文字內容 引數: 無 返回值

JS API指令碼語言-裝置控制介面說明-獲取裝置當前 Activity

裝置控制介面說明-獲取裝置當前 Activity getActivity 原型: getActivity() 是否支援多裝置: 不支援 描述: 獲取當前前臺執行的 activity。activity作為android四大元件中的一個,在我們開發的每個安卓應用中都會用到,是

JS API指令碼語言-裝置控制介面說明-獲取裝置渲染模式

裝置控制介面說明-獲取裝置渲染模式 getAcceleration 原型: getAcceleration() 是否支援多裝置: 不支援 描述: 返回當前裝置使用的渲染模式,即下圖中紅色框中的設定內容。 引數: 無 返回值: 整型: 0 – GDI;&nb

JS API指令碼語言-裝置控制介面說明-執行命令

裝置控制介面說明-執行命令 exec 原型: exec(cmd, timeout) 是否支援多裝置: 不支援 對應的 REST API: 執行命令 描述: 在裝置 shell 控制檯上同步呼叫的方式執行命令。同步呼叫是指可以在較短時間內執行完畢並且不需要使用者互動

JS API指令碼語言-裝置控制介面說明-下載檔案

裝置控制介面說明-下載檔案 download 原型: download(from, to, timeOut) 是否支援多裝置: 支援 描述: 下載指定檔案到指定目錄中,從手機中下載檔案到電腦中。 引數: from : 字串,源端檔案路徑,即需要下載的檔案。 to

JS API指令碼語言-裝置控制介面說明-判斷檔案或資料夾是否存在

裝置控制介面說明-判斷檔案或資料夾是否存在 doesExist 原型: doesExist(filePath) 是否支援多裝置: 不支援 描述: 判斷指定的檔案或資料夾是否存在。 引數: filePath: 手機上檔案或資料夾路徑 返回值: 整型:檔案或資

JS API指令碼語言-裝置控制介面說明-傳送點選事件

click 原型: click(x, y, state) click(x, y) 是否支援多裝置: 支援 對應的 REST API: 點選事件 描述: 傳送點選事件。對螢幕指標座標 (x, y) 進行點選操作(按下/彈起/滑動/點選) 引數: x:x

JS API指令碼語言-裝置控制介面說明-關閉指定 app

closeApp 原型: closeApp(packageName) 是否支援多裝置: 支援 對應的 REST API: 描述: 通過 App 包名稱關閉 App 引數: packageName:字串,App 包名稱,如: com.android.s

JS API指令碼語言-裝置控制介面說明-(過載一) 比較顏色

原型: compareColorEx(multipleColor, sim) 是否支援多裝置: 不支援 對應的 REST API: 描述: 同時比較多個指定座標點的顏色,支援多色、顏色範圍、相似度比較,這裡我們都用16 進位制顏色,如"0x001122"。

TINY4412LINUX移植筆記:(24)裝置樹EEPROM驅動

【TINY4412】LINUX移植筆記:(24)裝置樹 EEPROM驅動 宿主機 : 虛擬機器 Ubuntu 16.04 LTS / X64 目標板[底板]: Tiny4412SDK - 1506 目標板[核心板]:

複習linux之LED驅動的裝置樹方式

【前言】感謝陸老師 linux中led驅動(裝置樹)程式設計筆記 1.模組三要素 用到的標頭檔案 #include <linux/kernel.h> #include <linux/module.h> 1.1 初

TINY4412LINUX移植筆記:(27)裝置樹LCD驅動

【TINY4412】LINUX移植筆記:(27)裝置樹 LCD驅動 宿主機 : 虛擬機器 Ubuntu 16.04 LTS / X64 目標板[底板]: Tiny4412SDK - 1506 目標板[核心板]: Ti

TINY4412LINUX移植筆記:(23)裝置樹LCD觸控式螢幕驅動

【TINY4412】LINUX移植筆記:(23)裝置樹 LCD觸控式螢幕驅動 宿主機 : 虛擬機器 Ubuntu 16.04 LTS / X64 目標板[底板]: Tiny4412SDK - 1506 目標板[核心板]

TINY4412LINUX移植筆記:(22)裝置樹LCD按鍵驅動

【TINY4412】LINUX移植筆記:(22)裝置樹 LCD按鍵驅動 宿主機 : 虛擬機器 Ubuntu 16.04 LTS / X64 目標板[底板]: Tiny4412SDK - 1506 目標板[核心板]:

原創linux裝置模型之kset/kobj/ktype分析

# 背 景 - `Read the fucking source code!` --By 魯迅 - `A picture is worth a thousand words.` --By 高爾基 說明: 1. Kernel版本:4.14 2. ARM64處理器,Contex-A53,雙核 3. 使用工具:

原創Linux虛擬化KVM-Qemu分析(九)之virtio裝置

# 背景 - `Read the fucking source code!` --By 魯迅 - `A picture is worth a thousand words.` --By 高爾基 說明: 1. KVM版本:5.9.1 2. QEMU版本:5.0.0 3. 工具:Source Insight