~ ioctl方法
驅動程式的原型實現:int (*ioctl)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg);
ioctl 命令選擇
位段結構
number
direction
_ioc_read
_ioc_write
雙向資料傳輸(_ioc_read|_ioc_write)
size
構造命令編號的巨集
_ior(type, nr, datatype)
_iow(type, nr, datatype)
_iowr(type, nr, datatype)
解開位段結構的巨集
ioctl 命令號不能匹配的預設的返回值
ioctl 的預定義命令
只適用於普通檔案的命令
特定於檔案系統型別的命令
實際預定義命令
fiounclex
fioasync
fioqsize
fionbio
使用 ioctl 引數
引數說明
verify_write
addr
size
返回值是 bool 量
使用注意事項
寫入/讀取資料函式(限於 1,2,4和8個位元組)
__put_user(datum, ptr);
讀取使用者空間
當指標型別與指定型別不相符時,編譯器返回 「conversion to non-scalar type requested"
此時必須使用 copy_to_user 或者 copy_from_user
權能與受限操作
權能(capability)
定義檔案
驅動程式關心的權能
cap_net_admin
cap_sys_module
cap_sys_ramio
cap_sys_admin
cap_sys_tty_config
權能檢查
ioctl 命令的實現
非 ioctl 的裝置控制——轉議序列
linux裝置驅動程式 字元裝置驅動程式
先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...
Linux裝置驅動程式 字元裝置驅動程式
1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...
Linux 字元驅動程式(一)
在linux核心中裝置主要有三種 1 字元裝置 字元裝置的讀寫以位元組為單位,訪問時沒有快取。對字元裝置發出讀寫請求時,實際的硬體i o緊接著就發生了。一般來說,字元裝置不支援隨機訪問。典型的字元裝置包括滑鼠 鍵盤及序列口等。2 塊裝置 塊裝置讀寫以塊為單位,典型的塊大小為512或1024位元組。利...