2012-05-22 87 views
0

時,我想按照這個article約V4L2的司機寫作。ioport.h錯誤編譯用v412程序

但我的第一個基本的嘗試,當我包括媒體/用v412-dev.h(因爲我想訪問喜歡VFL_TYPE_GRABBER一些宏)失敗。

媒體/用v412-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’ 

[...]

源:

gcc -I/usr/src/linux/arch/x86/include -I/usr/src/linux/include -o prog prog.c 
#include <asm/types.h> 
#include <linux/videodev2.h> 

#include <media/v4l2-dev.h> 

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

我編譯

它發生在2.6.32-37-仿製PAE用gcc 4.4.3的glibc 2.10 我試了Gentoo的相同與內核頭文件和gcc的近似等價版本。

我在做什麼錯?

編輯:顯示確切的包含路徑。

+0

對不起,這可能聽起來_really_光顧......但你硬是用'gcc的-I/path編譯/到/ -o包括PROG prog.c'還是你指定包括'-I'後路徑? –

+0

我不想在報價中寫出確切的路徑,我會在將來避免這種錯誤理解。實際上,我指向包含內核頭文件。 – roro

+0

我很確定'asm/*。h'不打算直接被用戶空間程序包含。它們相當於glibc頭文件的'bits/*。h'的內核頭文件,並被其他頭文件(主要是'linux/*。h')間接包含。你應該閱讀關於如何使用這個API而不是貨物的文檔... –

回答

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 

,而不是試圖第二猜測,其中包括你的路徑需要。

此外,你應該不包括頭,文件以備不時之需。