裝置控制-應用函式
在使用者空間,使用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...