2011-05-12 185 views
4

Ubuntu 11.04 64位[在SuSE上试过32位,并且得到了同样的错误],我有gcc,并且可以编译正常的C程序..以及linux头文件在/usr/src/linux-headers-2.6*中无法编译qc-usb驱动程序?

我downlaoded此驱动程序: http://qce-ga.sourceforge.net/#download 下载,提取,跑make all这是输出

matt: /d/dl/qc-usb-0.6.6 $ make all 
make -C "/lib/modules/2.6.38-8-generic/build" SUBDIRS="/home/matt/Desktop/dl/qc-usb-0.6.6" modules V=1 USER_OPT="-DHAVE_UTSRELEASE_H=" 
make[1]: Entering directory `/usr/src/linux-headers-2.6.38-8-generic' 
test -e include/generated/autoconf.h -a -e include/config/auto.conf || (  \ 
    echo;        \ 
    echo " ERROR: Kernel configuration is invalid.";  \ 
    echo "   include/generated/autoconf.h or include/config/auto.conf are missing.";\ 
    echo "   Run 'make oldconfig && make prepare' on kernel src to fix it."; \ 
    echo;        \ 
    /bin/false) 
mkdir -p /home/matt/Desktop/dl/qc-usb-0.6.6/.tmp_versions ; rm -f /home/matt/Desktop/dl/qc-usb-0.6.6/.tmp_versions/* 
make -f scripts/Makefile.build obj=/home/matt/Desktop/dl/qc-usb-0.6.6 
    gcc -Wp,-MD,/home/matt/Desktop/dl/qc-usb-0.6.6/.qc-driver.o.d -nostdinc -isystem /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include -I/usr/src/linux-headers-2.6.38-8-generic/arch/x86/include -Iinclude -include include/generated/autoconf.h -Iubuntu/include -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m64 -mtune=generic -mno-red-zone -mcmodel=kernel -funit-at-a-time -maccumulate-outgoing-args -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -DCONFIG_AS_FXSAVEQ=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=1024 -fno-omit-frame-pointer -fno-optimize-sibling-calls -pg -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -DNOKERNEL -DHAVE_UTSRELEASE_H= -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(qc_driver)" -D"KBUILD_MODNAME=KBUILD_STR(quickcam)" -c -o /home/matt/Desktop/dl/qc-usb-0.6.6/.tmp_qc-driver.o /home/matt/Desktop/dl/qc-usb-0.6.6/qc-driver.c 
In file included from /home/matt/Desktop/dl/qc-usb-0.6.6/qc-driver.c:47:0: 
/home/matt/Desktop/dl/qc-usb-0.6.6/quickcam.h:79:28: fatal error: linux/autoconf.h: No such file or directory 
compilation terminated. 
make[2]: *** [/home/matt/Desktop/dl/qc-usb-0.6.6/qc-driver.o] Error 1 
make[1]: *** [_module_/home/matt/Desktop/dl/qc-usb-0.6.6] Error 2 
make[1]: Leaving directory `/usr/src/linux-headers-2.6.38-8-generic' 
make: *** [quickcam.ko] Error 2 

注:我试了一下,这是建议我跑[使oldconfig会& &。输出的网址如下:http://pastebin.com/ccnYn9uc

我搜索了一下,有人说在内核源代码中运行了make menuconfig,所以我运行了它,但我不知道该怎么改变..你能帮我吗?谢谢

回答

4

您试图在2.6.38上编译,但自从2.6.33(它被移动到其他地方的提交264a26838056fc2d759f58bec2e720e01fcb1bdb)后,include/linux/autoconf.h不再存在。此外,它不需要手动包含 - 内核编译系统会自动为您执行它(请参阅gcc命令行中的-include)。

您不需要运行make menuconfig,并且可能不应该使用它来更改任何内容 - 内核已针对您的发行版进行了配置,并且将其更改为与正在运行的内核不匹配的内容可能会导致模块无法正常工作。即使不需要make oldconfig;看起来像一条消息说运行make oldconfig实际上是代码来检测是否需要,并在这种情况下打印该消息(出于某种原因,您试图编译的驱动程序启用了一些详细模式,在运行它们之前打印所有命令)。

你的问题是你试图编译的驱动程序太旧 - sourceforge发布页面显示它是从2006年开始,当时最新的内核仍然是2.6.18。内核内部API不稳定,并且频繁更改,所以即使您修复了该错误(可能只是删除不正确的#include),但由于其他一些更改,它仍可能无法编译。 Linux内核附带的驱动程序不存在这个问题,因为修改API以修复所有驱动程序的责任由用户负责,但对于Linux内核树以外的驱动程序,驱动程序作者有责任密切关注内核开发,并在API更改时修复其驱动程序。

你的选择是找到一个更新的驱动程序(一个在2.6.38中工作的驱动程序),或者让一个懂得Linux内核的人将驱动程序更新到2.6.38。为了防止它在未来破产,它应该提交给Linux内核。

而实际上,内核确实似乎已经有这些设备的驱动程序。它被称为gspca_stv06xx,并声称三个USB ID是您试图编译索赔的驱动程序 - 还有更多。

+0

啊,好的。非常感谢。我会研究这个“gspca_stv06xx” – Matt 2011-05-15 19:05:28

0

你必须想知道你是什么谷歌。 http://www.google.ca/search?sourceid=chrome&ie=UTF-8&q=%22fatal+error%3A+linux%2Fautoconf.h%3A+No+such+file+or+directory%22第一个结果是关于网络摄像头(!)的https://bbs.archlinux.org/viewtopic.php?id=103348主题,尽管在Arch上它必须是相关的。它通往http://aur.archlinux.org/packages.php?ID=9861,您可以在其中找到包含autoconf.patch的tarball。阅读主题和链接的Ubuntu主题似乎很有帮助。