传递IOCTL代码从内核模块到用户空间程序

问题描述:

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头文件并将其包含在用户空间程序中。但我希望,也许有一个更方便的方法。

只需将ioctl代码放在.h文件中,并从内核空间和用户空间使用相同的.h。有什么比这更方便? ;)

+0

这就是我现在要做的。但是要定义* _IO *宏,必须包含其他几个内核头文件。当只需要很少的数字时,这看起来有些过分。 – KBart

+1

_IO宏在中定义,它应该在安装了开发头文件的任何linux系统上出现。这些头文件在/ usr/include/{asm-generic,linux}中总是被导出到用户空间。 – davmac

+0

我知道,它的工作原理。但是我正在为嵌入式系统编写一个库,并希望尽可能少地依赖内核。所以我的目标是在用户空间中有原始数字,就像* #define DRV_CTL_RESET 0x150 *(为了清晰起见,只是一个随机数字)。 – KBart