传递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。有什么比这更方便? ;)
这就是我现在要做的。但是要定义* _IO *宏,必须包含其他几个内核头文件。当只需要很少的数字时,这看起来有些过分。 – KBart
_IO宏在中定义,它应该在安装了开发头文件的任何linux系统上出现。这些头文件在/ usr/include/{asm-generic,linux}中总是被导出到用户空间。 –
davmac
我知道,它的工作原理。但是我正在为嵌入式系统编写一个库,并希望尽可能少地依赖内核。所以我的目标是在用户空间中有原始数字,就像* #define DRV_CTL_RESET 0x150 *(为了清晰起见,只是一个随机数字)。 – KBart