0
我正在爲embeeded系統創建一個驅動程序。我正在使用IOCTL函數。 設備註冊正確,打開和寫入功能按預期工作,但IOCTL不能。IOCTL:僅在開關櫃中使用參數0
當我從參數0的用戶空間調用IOCTL時,ioctl_num = 0調用my_ioctl函數,但是當我使用任何其他值時,my_ioctl內核函數未被調用。
#define READ_IOCTL _IO(UAM_DEV_MAGIC, 0)
#define WRITE_IOCTL _IO(UAM_DEV_MAGIC, 1)
#define ASK_VALUE _IO(UAM_DEV_MAGIC, 2)
當我使用READ_IOCTL(0)從用戶空間進行IOCTL調用時,一切工作正常。但是,當我嘗試WRITE_IOCTL和ASK_VALUE(1和2)。
如果我使用以下命令:
#define READ_IOCTL _IO(UAM_DEV_MAGIC, 1)
#define WRITE_IOCTL _IO(UAM_DEV_MAGIC, 0)
#define ASK_VALUE _IO(UAM_DEV_MAGIC, 2)
只適用WRITE_IOCTL從用戶空間調用。我正在使用Linux 3.16和PowerPC。任何想法有什麼不對?
這裏是一個示例驅動程序。可能會有所幫助https://github.com/jeyaramvrp/kernel-module-programming/tree/master/sample-char-dir – Jeyaram
感謝您的回答。我看過代碼,但它看起來與我所做的非常相似。它看起來像程序不會重組魔術數字。任何想法爲什麼它與0,而不是與1,2,3等工作? –
'任何想法爲什麼它與0一起工作,而不是與1,2,3等?' - 可能,您的代碼符合預定義的ioctl代碼。參見[man ioctl_list](http://man7.org/linux/man-pages/man2/ioctl_list.2.html)。 – Tsyvarev