2015-06-14 106 views
0

我想實現一個使用ioctl()方法的簡單模塊。在內核模塊中,我使用內核宏如_IO(),_IOWR()等來定義我自己的ioctl子命令。事實上,我不關心這些定義的實際值,因爲我將始終使用這些宏而不是實際值。如何在內核模塊和用戶空間應用程序之間共享相同的頭文件。

然而,當用戶空間中的程序員想要調用我的ioctl()函數時,他們需要知道這些子命​​令的實際值或宏定義。

我想,在用戶空間中,它不會是這樣的_IO(),_IOWR()宏定義,所以,我怎樣才能將這些定義導出到用戶空間以供應用程序員使用。

+0

檢查Linux內核源代碼樹中include/uapi文件夾的內容。 – 0andriy

回答

0

_IO_IOWR(等等)宏也在用戶空間頭文件中可用。這些定義可以通過#include <linux/ioctl.h>首先引入內核空間和用戶空間源。

您應該將內核頭文件分爲兩個部分:(1)那些只能由內核代碼需要 - struct定義,源極間文件的聲明,其他的#includes,或其他任何你覺得方便的是有這是用戶空間不需要的;(b)定義內核和用戶空間之間的接口。後者將包含那些定義的_IO*,並且還可能包含用於在ioctl中從用戶空間向內核傳輸信息的自定義結構定義。

然後你需要安排一個策略來共享內核和用戶空間代碼之間的界面定義頭文件。

相關問題