14 Linux 字元裝置控制技術

2021-07-10 22:02:20 字數 1203 閱讀 2355

裝置控制-應用函式

在使用者空間,使用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;

Linux 字元裝置控制技術

字元裝置控制技術 一。字元裝置控制理論 1.作用 大部分裝置除了具有 讀寫裝置 的能力,還應該有 控制裝置 的能力。比如改變 波特率 2.應用程式介面 在使用者空間中使用 ioctl系統來控制裝置,原型如下 int ioctl int fd,unsigned long cmd,fd 控制的裝置檔案描...

字元裝置控制技術

1 大部分驅動程式除了需要提供讀寫裝置的能力,還應具備控制裝置的能力。2 在使用者空間,使用ioctl系統呼叫來控制裝置。函式原型 int ioctl int fd,unsigned long cmd,fd 要控制的裝置檔案描述符 cmd 傳送給裝置的控制命令 第3個引數是可選的引數,存在與否是依賴...

14 linux驅動 spi GPIO模擬

spi系列文章 1.spi 硬體 協議 2.spi gpio模擬 3.spi驅動 gpio模擬spi 只實現一下主機傳送,上公升沿傳送,空閒狀態為低電平。需要注意cpu速度過快,gpio電平設定會被合併,需要加入延時函式。另外自己實現延時的話需要使用記憶體屏障關鍵字volatile 防止被優化。in...