0

v4l2 のドライバー作成に関するこの記事をフォローしたいと思いました。

しかし、media/v4l2-dev.h をインクルードすると、最初の基本的な試行が失敗しました (VFL_TYPE_GRABBER などのマクロにアクセスしたいため)。

media/v4l2-dev.h には、次の出力でクラッシュする linux/ioport.h を含む linux/device.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

これは、gcc 4.4.3 glibc 2.10 を使用した 2.6.32-37-generic-pae で発生します。kernel-headers と gcc のほぼ同等のバージョンを使用して、gentoo で同じことを試しました。

私は何を間違っていますか?

編集: 正確なインクルード パスを示します。

4

1 に答える 1

0

ドライバー開発を行っている場合は、提供されているフレームワークを使用して行うこともできます。ドライバー用の既存のビルドプロジェクト(たとえば、そのプロジェクト)から始めることをお勧めします。通常は、これと同じくらい単純な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

必要なパスを含む推測を試みるのではなく。

さらに、必要になる前にヘッダーファイルをインクルードしないでください。

于 2012-07-26T12:06:52.477 に答える