Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用内核头编译用户空间程序_C_Linux_Linux Kernel_Kernel_Linux Device Driver - Fatal编程技术网

C 如何使用内核头编译用户空间程序

C 如何使用内核头编译用户空间程序,c,linux,linux-kernel,kernel,linux-device-driver,C,Linux,Linux Kernel,Kernel,Linux Device Driver,我需要使用ioctl测试usbfs设备。 我需要使用ioctl(fd、USBDEVFS\u REAPURBNDELAY和receive)。 但是USBDEVFS\u REAPURBNDELAY是在内核头中定义的,所以我包括一些如下内核文件: #include <linux/usb.h> #include <linux/usbdevice_fs.h> #include <asm/byteorder.h> #include <linux/usb/ch9.h&

我需要使用
ioctl
测试usbfs设备。 我需要使用ioctl(fd、USBDEVFS\u REAPURBNDELAY和receive)。 但是
USBDEVFS\u REAPURBNDELAY
是在内核头中定义的,所以我包括一些如下内核文件:

#include <linux/usb.h>
#include <linux/usbdevice_fs.h>
#include <asm/byteorder.h>
#include <linux/usb/ch9.h>

用户程序不能使用内核头。即使你以某种方式这样做,也会受到强烈的劝阻。查看下面的链接以了解更多说明


如果您确实想从用户空间控制usb设备,请查看libusb

您真的不应该直接包含内核头。在某些情况下,处理它是必要的,而且可能是最好的方法,就是获取一个内核头的副本,然后只删除您需要的部分。但是在这种情况下,我不确定我是否理解为什么需要内核头。为什么仅仅包含
就不起作用

在我研究过的所有系统(两个不同的Ubuntu系统和一个RHEL 6系统)上,该文件都可以从用户空间中包含,并具有
USBDEVFS\u REAPURBNDELAY
的定义。我试过了

#include <stdio.h>
#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>

int main()
{
    printf("USBDEVFS_REAPURBNDELAY is %ld\n", USBDEVFS_REAPURBNDELAY);
    return 0;
}

因此,至少根据您上面写的内容,ioctl定义不需要任何内核头。我怀疑您认为需要的任何其他用户空间USB内容都会以干净的标题导出到用户空间。

谢谢。但我只需要一次。只是为了测试一个设备,所以我不关心内核的未来变化。:)非常感谢你。我厌倦了在没有内核头的情况下编译代码。但在运行它时,我遇到了另一个错误。我认为这与这个问题不同。所以我创造了一个新的
#include <stdio.h>
#include <sys/ioctl.h>
#include <linux/usbdevice_fs.h>

int main()
{
    printf("USBDEVFS_REAPURBNDELAY is %ld\n", USBDEVFS_REAPURBNDELAY);
    return 0;
}
USBDEVFS_REAPURBNDELAY is 1074287885