编译v4l2程序时出现ioport.h错误

时间:2012-05-22 14:03:26

标签: c header v4l2 v4l ioports

我想按照article关于v4l2的驱动程序编写。

但是当我包含media / v4l2-dev.h时,我的第一个基本尝试失败了(因为我想访问像VFL_TYPE_GRABBER这样的宏)。

media / v4l2-dev.h包含linux / device.h,其中包含linux / ioport.h,它与此输出崩溃:

In file included from /usr/src/linux/include/linux/device.h:16,
                 from /usr/src/linux/include/media/v4l2-dev.h:14,
                 from driv.c:11:
/usr/src/linux/include/linux/ioport.h:19: error: expected specifier-qualifier-list         before ‘resource_size_t’
/usr/src/linux/include/linux/ioport.h:116: error: expected declaration specifiers or ‘...’ before ‘resource_size_t’
/usr/src/linux/include/linux/ioport.h:116: error: expected declaration specifiers or ‘...’ before ‘resource_size_t’
/usr/src/linux/include/linux/ioport.h:121: error: expected declaration specifiers or ‘...’ before ‘resource_size_t’

[...]

来源:

#include <asm/types.h>
#include <linux/videodev2.h>

#include <media/v4l2-dev.h>

int main(int argc, char **argv) {
    return 0;
}

我编译:

gcc -I/usr/src/linux/arch/x86/include -I/usr/src/linux/include -o prog prog.c

它出现在2.6.32-37-generic-pae上,带有gcc 4.4.3 glibc 2.10 我在gentoo上尝试了相同版本的kernel-headers和gcc。

我做错了什么?

编辑:指明确切的包含路径。

1 个答案:

答案 0 :(得分:0)

如果您正在进行驱动程序开发,那么您也可以使用提供的框架来执行此操作。 我建议从一个驱动程序的现有构建项目开始(例如that),通常是一个简单的Makefile:

KERNEL_VERSION := `uname -r`
KERNEL_DIR := /lib/modules/$(KERNEL_VERSION)/build

PWD := $(shell pwd)

obj-m := mymodule.o

all: mymodule
mymodule:
    @echo "Building my driver..."
    $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
install:
    $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules_install
    depmod -ae
clean:
    rm -f *~
    rm -f Module.symvers Module.markers modules.order
    $(MAKE) -C $(KERNEL_DIR) M=$(PWD) clean

而不是试图猜测哪些包含你需要的路径。

此外,您可能不应该在需要之前包含头文件。