ioctl引數cmd 2錯誤

2022-09-16 18:36:08 字數 751 閱讀 1689

在寫核心驅動的時候,用到了ioctl。自己定義cmd作為ioctl的引數。如下:

enum

cmd ;

ioctl底層呼叫**:

static

long led_ioctl(struct file *file, unsigned int cmd, unsigned long

arg)

在應用層呼叫ioctl的時候,當傳入的cmd=2時會出現錯誤。

ioctl返回值為-1。錯誤號errno:14,  bad address。

上網查閱才知道需要使用_iowr等巨集來生成cmd命令,而不能自己寫。

雖然自己寫也可以,但很有可能和系統的其他cmd命令衝突。剛好當ioctl的cmd=2使就出現了錯誤。

從新定義cmd如下:

#define     type            's' 

#define level_down _iowr(type, 0, int)

#define level_up _iowr(type, 1, int)

#define gpio_input _iowr(type, 2, int)

#define gpio_output _iowr(type, 3, int)

#define gpio_get _iowr(type, 4, int)

ioctl引數詳解

本函式影響由fd引數引用的乙個開啟的檔案。include int ioctl int fd,int request,返回0 成功 1 出錯 第三個引數總是乙個指標,但指標的型別依賴於request引數。套介面操作 檔案操作 介面操作 arp快取記憶體操作 路由表操作 流系統類別request 說明資...

ioctl引數命令設定

define scull ioc magic k define scull iocreset io scull ioc magic,0 define scull iocsquantum iow scull ioc magic,1,int define scull iocsqset iow scull...

關於 ioctl 的 FIONREAD 引數

ioctl 是用來設定硬體控制暫存器,或者讀取硬體狀態暫存器的數值之類的。而read,write 是把資料丟入緩衝區,硬體的驅動從緩衝區讀取資料乙個個傳送或者把接收的資料送入緩衝區。ioctl keyfd,fionread,b 得到緩衝區裡有多少位元組要被讀取,然後將位元組數放入b裡面。接下來就可以...