2013-01-31 32 views
1

IOCTL代碼在內核模塊通常被定義爲宏內部.C.H文件,即:傳遞IOCTL代碼從內核模塊到用戶空間程序

#define DRV_CTL_RESET   _IO(DRV_MAGIC, 0x01) 
#define DRV_CTL_DSP_TO   _IO(DRV_MAGIC, 0x02) 

和用戶空間中的使用程序是:

ioctl(drv_fd, DRV_CTL_DSP_TO, (unsigned long)tmo); 

一切都很好,但..

問題是:什麼是內核和用戶空間之間的代碼同步的好辦法ioctl

我現在的解決方案是從內核模塊的源自動生成一個API頭文件並將其包含在用戶空間程序中。但我希望,也許有一個更方便的方法。

回答

2

只需將ioctl代碼放在.h文件中,並從內核空間和用戶空間使用相同的.h。有什麼比這更方便? ;)

+0

這就是我現在要做的。但是要定義* _IO *宏,必須包含其他幾個內核頭文件。當只需要很少的數字時,這看起來有些過分。 – KBart

+1

_IO宏在中定義,它應該在安裝了開發頭文件的任何linux系統上出現。這些頭文件在/ usr/include/{asm-generic,linux}中總是被導出到用戶空間。 – davmac

+0

我知道,它的工作原理。但是我正在爲嵌入式系統編寫一個庫,並希望儘可能少地依賴內核。所以我的目標是在用戶空間中有原始數字,就像* #define DRV_CTL_RESET 0x150 *(爲了清晰起見,只是一個隨機數字)。 – KBart

相關問題