linux 驅動程式 高階字元驅動程式

2021-05-24 05:41:30 字數 1150 閱讀 3653

~ 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位元組。利...