У меня есть камера, но у меня нет драйвера для Linux. Поэтому я пытаюсь установить драйвер для 05e1:0b01. Но его все еще не удалось.

Устройство подключено / отключено правильно отображается в /var/log/messages

Aug 19 19:15:47 example kernel: [39339.374902] usb 1-3: USB disconnect, device number 16
Aug 19 19:16:52 example kernel: [39404.464068] usb 1-3: new high speed USB device number 17 using ehci_hcd
Aug 19 19:16:55 example kernel: [39407.152965] usb 1-3: New USB device found, idVendor=05e1, idProduct=0b01
Aug 19 19:16:55 example kernel: [39407.152976] usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Aug 19 19:16:55 example kernel: [39407.152984] usb 1-3: Product: USB Camera
Aug 19 19:16:55 example kernel: [39407.152990] usb 1-3: Manufacturer: Syntek
Aug 19 19:16:55 example kernel: [39407.152997] usb 1-3: SerialNumber: 0123456789AC
Aug 19 19:16:55 example mtp-probe: checking bus 1, device 17: "/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-3"
Aug 19 19:16:55 example mtp-probe: bus: 1, device: 17 was not an MTP device

Шаг 1: Я скачал этот драйвер камеры с http://sourceforge.net/projects/syntekdriver/

Шаг 2: README файл сказал сделать это.

stk11xx-2.1.0]# make -f Makefile.standalone
make -C /lib/modules/2.6.40.3-0.fc15.i686/build SUBDIRS=/home/sun/Downloads/stk11xx-2.1.0 modules
make[1]: Entering directory `/usr/src/kernels/2.6.40.3-0.fc15.i686'
  CC [M]  /home/sun/Downloads/stk11xx-2.1.0/stk11xx-usb.o
/home/sun/Downloads/stk11xx-2.1.0/stk11xx-usb.c: In function ‘usb_stk11xx_probe’:
/home/sun/Downloads/stk11xx-2.1.0/stk11xx-usb.c:803:2: error: implicit declaration of function ‘init_MUTEX’ [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors

make[2]: *** [/home/sun/Downloads/stk11xx-2.1.0/stk11xx-usb.o] Error 1
make[1]: *** [_module_/home/sun/Downloads/stk11xx-2.1.0] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.40.3-0.fc15.i686'
make: *** [driver] Error 2

Шаг 3: Выполняя поиск в Интернете, я обнаружил, что должен добавить к stk11xx-usb. c этими новыми строками:

#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26) 
#include <linux/semaphore.h> 
#else 
#include <asm/semaphore.h> 
#endif 
#define init_MUTEX(LOCKNAME) sema_init(LOCKNAME,1);

Шаг 4: Попытаться построить снова не удалось.

stk11xx-2.1.0]# make -f Makefile.standalone
make -C /lib/modules/2.6.40.3-0.fc15.i686/build SUBDIRS=/home/sun/Downloads/stk11xx-2.1.0 modules
make[1]: Entering directory `/usr/src/kernels/2.6.40.3-0.fc15.i686'
  CC [M]  /home/sun/Downloads/stk11xx-2.1.0/stk11xx-usb.o
  CC [M]  /home/sun/Downloads/stk11xx-2.1.0/stk11xx-v4l.o
/home/sun/Downloads/stk11xx-2.1.0/stk11xx-v4l.c:43:28: fatal error: linux/videodev.h: No such file or directory
compilation terminated.
make[2]: *** [/home/sun/Downloads/stk11xx-2.1.0/stk11xx-v4l.o] Error 1
make[1]: *** [_module_/home/sun/Downloads/stk11xx-2.1.0] Error 2
make[1]: Leaving directory `/usr/src/kernels/2.6.40.3-0.fc15.i686'
make: *** [driver] Error 2
stk11xx-2.1.0]# 

Может кто-нибудь посоветовать мне, как решить это сейчас? Меня заблокировали. Более подробная информация доступна на форуме SourceForge).

3 ответа3

1

Если все еще актуально - поместите этот файл в /usr/src/(uname -a)/include/linux .

Это помогло мне для Arch и 3.9.2-1 ядра

1

Сообщение об ошибке на шаге 4 говорит о том, что компилятор не может найти файл videodev.h в вашей системе. Файл videodev.h поставляется с исходным кодом ядра (в моей системе это linux-2.6.37.3/include/kernel/videodev.h и он должен находиться в сопоставимом месте в любой исходной версии ядра). Когда вы устанавливаете заголовки ядра, этот файл будет установлен в /usr/include/linux/videodev.h - и это то, что вам не хватает.

Итак, (1) установите RPM -пакет kernel-devel, предоставленный Fedora, или (2) вы можете загрузить соответствующую версию ядра (см. uname -r но похоже, что у вас есть linux-2.6.40.3) исходный код, а затем установить Заголовки ядра (прочитайте исходный код ядра README а затем запустите make headers_install - вам может потребоваться настроить исходный код ядра, но вам, вероятно, не нужно make и make install ядро. Ваша цель - получить копию videodev.h и любых вспомогательных заголовочных файлов из исходного кода ядра в удобное для вас место на вашем диске (вероятно, /usr/include и /usr/include/linux).

Если у вас уже есть /usr/include/linux/videodev.h на вашем диске, убедитесь, что переменная среды INCLUDE указывает на /usr/include .

Теперь, если присмотреться поближе, похоже, что kernel.org люди устарели videodev.h и удалили его из исходного кода до версии 2.6.39.3 (и заменили его на videodev2.h? - пока не ясно), и выглядит как у вас linux-2.6.40.3. Я предлагаю вам получить более старую копию исходного кода ядра и вручную скопировать videodev.h в /usr/include/linux (или там, где у вас сейчас есть videodev2.h).

0

videodev.h из v4l1, который сильно изменился в поддержке в новых ядрах, даже получение этого заголовка (теперь это v4l1-videodev.h) не решит вашу проблему.

Лучше удалить всю поддержку v4l1 из драйвера, который вы компилируете. Я сделал это, и теперь он отлично скомпилирован.

большая часть кода находится в stk11xx-v4l.c в

static long v4l_stk11xx_do_ioctl(struct file *fp,
    unsigned int cmd, void __user *arg)

функция. Просто избавьтесь от всех кейсов, пока не увидите комментарий v4l2.

Тогда избавьтесь от ссылок на включения в videodev.h

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .