Linux Can';不编译qc usb驱动程序?
Ubuntu11.04 64位[在SuSE 32位上试用过,得到了相同的错误],我有gcc,可以编译普通的C程序。。以及/usr/src/linux-headers-2.6*中的linux头文件 我贬低了这个司机: 下载、提取、运行Linux Can';不编译qc usb驱动程序?,linux,gcc,compilation,drivers,Linux,Gcc,Compilation,Drivers,Ubuntu11.04 64位[在SuSE 32位上试用过,得到了相同的错误],我有gcc,可以编译普通的C程序。。以及/usr/src/linux-headers-2.6*中的linux头文件 我贬低了这个司机: 下载、提取、运行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
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
注意:我尝试了这建议我运行[makeoldconfig&&]。以下是输出的URL:
我在谷歌上搜索了一下,有人对我说,在内核源代码中,运行
makemenuconfig
,所以我运行了它,但我不知道要更改什么。。你能帮助我吗?谢谢人们一定想知道你在谷歌上搜索了什么。第一个结果是一个关于网络摄像头(!)的主题,尽管它在Arch上必须是相关的。它将引导您找到一个包含autoconf.patch
的tarball。阅读本主题和链接的Ubuntu主题似乎很有帮助。您正试图在2.6.38上编译,但是include/linux/autoconf.h
自2.6.33以来不再存在(它在提交264A26838056FC2D759F58BEC2E720E01FC1BDB中被移动到了其他地方)。此外,它不需要手动包含-内核构建系统会自动为您包含它(请参阅gcc
命令行中的-include
)
您不需要运行make menuconfig
,并且可能不应该使用它来更改任何内容-内核已经为您的发行版配置好了,将其更改为与正在运行的内核不匹配的内容可能会使模块无法正常工作。甚至不需要makeoldconfig
;看起来像是要运行make oldconfig
的消息,实际上是用于检测是否需要它并在这种情况下打印该消息的代码(出于某种原因,您试图编译的驱动程序启用了一些详细模式,在运行命令之前打印所有命令)
您遇到的问题是,您试图编译的驱动程序太旧了—sourceforge发布页面显示它是2006年的,当时最新的内核仍然是2.6.18。内核内部API不稳定且经常更改,因此即使您修复了该错误(可能只是删除不正确的#include
),它也可能由于其他一些更改而无法编译。Linux内核附带的驱动程序没有这个问题,因为修改API的人有责任修复所有驱动程序,但对于Linux内核树之外的驱动程序,驱动程序作者有责任密切关注内核开发,并在API发生更改时修复其驱动程序
您可以选择寻找一个更新的驱动程序(适用于2.6.38),或者让了解Linux内核的人将您的驱动程序更新到2.6.38。为了防止将来它被破坏,应该将它提交到Linux内核
事实上,内核似乎已经有了这些设备的驱动程序。它被称为gspca\u stv06xx
,并声明您试图编译的驱动程序的三个USB ID声明-以及更多声明。啊,好的。非常感谢。我会调查这个“gspca_stv06xx”