Страница 1 из 1
Драйвер stk11xx для вебкамер
Добавлено: 08 мар 2017, 21:34
nube
Вылезу-ка я из "глупых вопросов"
http://forum.rosalab.ru/viewtopic.php?p=82806#p82806
в отдельную тему.
Хотя, вопросы будут всё такие же глупые.

Вобщем, поковырялся в несобирающемся драйвере, нашёл пару ошибок (пока только пару).
Возник очередной глупый вопрос:
Как подсунуть в rpm исправленный файл исходника?
И где теперь искать тот rpm, который после установки из "установки программ" теперь каждый раз при загрузке пытается собрать и установить этот злосчастный драйвер?
Естественно, там, где я нашёл распакованные исходники, они каждый раз при этом перезаписываются заново.
Не пинайте особо. Напоминаю - в линуксах я полный нуб.
Чисто от нефиг делать решил поковырять пакеты, не работающие фиг знает сколько времени, со времён перехода на другие ядра.
Пытаюсь исправить ошибки (пока только имена в структурах) пользуясь документацией на ядро 4.11.
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 02:56
keleg
1) ставим abf-client
2) Регистрируемся на abf
3) Ищем и клонируем в личные репозитории нужный проект, import/syntek
4) делаем abf get -b rosa2014.1 syntek, получается папка со спеком проекта
5) Для его компиляции доустанавливаем необходимые пакеты urpmi syntek.spec
6) Пробуем компилировать и собрать пакет, abf rpmbuild
В результате получим пакеты, идентичные репозиториям. В том числе src.
Теперь можно патчить.
1) Увеличиваем в спеке номер релиза чтоб ставилось поверх
2) Смотрим дерево исходников, они есть в src и во вложенной папке после сборки.
3) Делаем еще одно дерево исходников (см примеры патчей в других проектах), там подправляем нужные файлы, делаем патч через diff
4) Добавляем патч в спек
5) abf rpmbuild - получаем исправленный пакет, который можно ставить-удалять средствами urpmi и проверять, работает ли.
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 07:06
nube
keleg писал(а):1) ставим abf-client
2) Регистрируемся на abf
........
А проще нет метода?
Фиг знает сколько ещё строчек придётся править.
И каждый раз через abf гонять, rpm собирать и версию поднимать?
Локально это как-то вообще делается?
Изменил - попробовал откомпиллить - не пошло - правим дальше, не вылазя из терминала - и так пока или не упрусь, или не исправлю все проблемы. А потом уже можно и в abf лезть.
Просто через make в директории с распакованными файлами не проходит - там make.local лезет чёрт знает куда и ругается ещё до компиляции самих исходников.
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 07:07
VictorR2007
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 08:24
keleg
nube писал(а):keleg писал(а):1) ставим abf-client
2) Регистрируемся на abf
........
А проще нет метода?
Фиг знает сколько ещё строчек придётся править.
И каждый раз через abf гонять, rpm собирать и версию поднимать?
Локально это как-то вообще делается?
Изменил - попробовал откомпиллить - не пошло - правим дальше, не вылазя из терминала - и так пока или не упрусь, или не исправлю все проблемы. А потом уже можно и в abf лезть.
Просто через make в директории с распакованными файлами не проходит - там make.local лезет чёрт знает куда и ругается ещё до компиляции самих исходников.
Пока локально, там через сайт abf гонять не нужно. А релиз поднимать удобно, чтоб можно было откатывать изменения. Оно ж все в систему ставится - вручную потом вычищать?
Можно и более "грязно" делать, каждый раз запаковывая полученные исходники в файл и подсовывая его как файл исходинков, лежащий рядом со спеком.
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 09:43
trs
Драйвер не обычный пакет, а dkms, и исполняемых файлов не содержит.
При установке из пакета rpm копируются его исходные тексты в /usr/src
Далее происходит регистрация посредством команды dkms add (база данных dkms находится в /var/lib/dkms).
Поскольку dkms подразумевает, что исходники компилируемы, то сборка (dkms build) будет происходить при каждом запуске ОС, пока не завершится успешно.
Удилить мoжно из базы вручную, или (правильнее) командой dkms remove, или целиком пакет (urpme dkms-syntek, будут удалены и исходники из /usr/src).
До того, как исходники будут собираться и работать, смысл пакетировать их вряд ли имеется.
В каталоге с исходниками должен быть файл dkms.conf . В нём можно посмотреть команды для сборки драйвера (MAKE="...") и их использовать.
Устанваливать make install и удалять make uninstall (в общем случае, но бывают нюансы).
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 12:21
nube
trs писал(а):Драйвер не обычный пакет, а dkms, и исполняемых файлов не содержит.
При установке из пакета rpm копируются его исходные тексты в /usr/src
Далее происходит регистрация посредством команды dkms add (база данных dkms находится в /var/lib/dkms).
Поскольку dkms подразумевает, что исходники компилируемы, то сборка (dkms build) будет происходить при каждом запуске ОС, пока не завершится успешно.
Удилить мoжно из базы вручную, или (правильнее) командой dkms remove, или целиком пакет (urpme dkms-syntek, будут удалены и исходники из /usr/src).
До того, как исходники будут собираться и работать, смысл пакетировать их вряд ли имеется.
В каталоге с исходниками должен быть файл dkms.conf . В нём можно посмотреть команды для сборки драйвера (MAKE="...") и их использовать.
Устанваливать make install и удалять make uninstall (в общем случае, но бывают нюансы).
Спасибо.
Содержимое dkms.conf
Код: Выделить всё
PACKAGE_VERSION=3.0.0-3
# Items below here should not have to change with each driver version
PACKAGE_NAME=syntek
BUILT_MODULE_NAME[0]="stk11xx"
DEST_MODULE_LOCATION[0]="/kernel/3rdparty/syntek"
REMAKE_INITRD="no"
AUTOINSTALL=yes
В /usr/src исправил файл исходника,
Запустил make -f Makefile.standalone
получаю выхлоп:
Код: Выделить всё
# make -f Makefile.standalone
make -C /lib/modules/4.9.9-nrj-desktop-1rosa-x86_64/build SUBDIRS=/usr/src/syntek-3.0.0-3 modules
make[1]: вход в каталог «/usr/src/linux-4.9.9-nrj-desktop-1rosa-x86_64»
CC [M] /usr/src/syntek-3.0.0-3/stk11xx-usb.o
CC [M] /usr/src/syntek-3.0.0-3/stk11xx-v4l.o
CC [M] /usr/src/syntek-3.0.0-3/stk11xx-sysfs.o
In file included from ./include/linux/thread_info.h:11:0,
from ./arch/x86/include/asm/preempt.h:6,
from ./include/linux/preempt.h:59,
from ./include/linux/spinlock.h:50,
from ./include/linux/seqlock.h:35,
from ./include/linux/time.h:5,
from ./include/linux/stat.h:18,
from ./include/linux/module.h:10,
from /usr/src/syntek-3.0.0-3/stk11xx-sysfs.c:34:
./include/linux/bug.h:37:45: ошибка: битовое поле «<anonymous>» имеет отрицательный размер
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
./include/linux/kernel.h:854:3: замечание: in expansion of macro «BUILD_BUG_ON_ZERO»
BUILD_BUG_ON_ZERO((perms) & 2) + \
^
./include/linux/sysfs.h:102:12: замечание: in expansion of macro «VERIFY_OCTAL_PERMISSIONS»
.mode = VERIFY_OCTAL_PERMISSIONS(_mode) }, \
^
./include/linux/device.h:576:45: замечание: in expansion of macro «__ATTR»
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _stor
^
/usr/src/syntek-3.0.0-3/stk11xx-sysfs.c:488:8: замечание: in expansion of macro «DEVICE_ATTR»
static DEVICE_ATTR(brightness, S_IRUGO | S_IWUGO, show_brightness, store_brig
^
./include/linux/bug.h:37:45: ошибка: битовое поле «<anonymous>» имеет отрицательный размер
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
./include/linux/kernel.h:854:3: замечание: in expansion of macro «BUILD_BUG_ON_ZERO»
BUILD_BUG_ON_ZERO((perms) & 2) + \
^
./include/linux/sysfs.h:102:12: замечание: in expansion of macro «VERIFY_OCTAL_PERMISSIONS»
.mode = VERIFY_OCTAL_PERMISSIONS(_mode) }, \
^
./include/linux/device.h:576:45: замечание: in expansion of macro «__ATTR»
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _stor
^
/usr/src/syntek-3.0.0-3/stk11xx-sysfs.c:489:8: замечание: in expansion of macro «DEVICE_ATTR»
static DEVICE_ATTR(contrast, S_IRUGO | S_IWUGO, show_contrast, store_contrast
^
./include/linux/bug.h:37:45: ошибка: битовое поле «<anonymous>» имеет отрицательный размер
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
./include/linux/kernel.h:854:3: замечание: in expansion of macro «BUILD_BUG_ON_ZERO»
BUILD_BUG_ON_ZERO((perms) & 2) + \
^
./include/linux/sysfs.h:102:12: замечание: in expansion of macro «VERIFY_OCTAL_PERMISSIONS»
.mode = VERIFY_OCTAL_PERMISSIONS(_mode) }, \
^
./include/linux/device.h:576:45: замечание: in expansion of macro «__ATTR»
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _stor
^
/usr/src/syntek-3.0.0-3/stk11xx-sysfs.c:490:8: замечание: in expansion of macro «DEVICE_ATTR»
static DEVICE_ATTR(whitebalance, S_IRUGO | S_IWUGO, show_whitebalance, store_
^
./include/linux/bug.h:37:45: ошибка: битовое поле «<anonymous>» имеет отрицательный размер
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
./include/linux/kernel.h:854:3: замечание: in expansion of macro «BUILD_BUG_ON_ZERO»
BUILD_BUG_ON_ZERO((perms) & 2) + \
^
./include/linux/sysfs.h:102:12: замечание: in expansion of macro «VERIFY_OCTAL_PERMISSIONS»
.mode = VERIFY_OCTAL_PERMISSIONS(_mode) }, \
^
./include/linux/device.h:576:45: замечание: in expansion of macro «__ATTR»
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _stor
^
/usr/src/syntek-3.0.0-3/stk11xx-sysfs.c:491:8: замечание: in expansion of macro «DEVICE_ATTR»
static DEVICE_ATTR(colour, S_IRUGO | S_IWUGO, show_colour, store_colour);
^
./include/linux/bug.h:37:45: ошибка: битовое поле «<anonymous>» имеет отрицательный размер
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
./include/linux/kernel.h:854:3: замечание: in expansion of macro «BUILD_BUG_ON_ZERO»
BUILD_BUG_ON_ZERO((perms) & 2) + \
^
./include/linux/sysfs.h:102:12: замечание: in expansion of macro «VERIFY_OCTAL_PERMISSIONS»
.mode = VERIFY_OCTAL_PERMISSIONS(_mode) }, \
^
./include/linux/device.h:576:45: замечание: in expansion of macro «__ATTR»
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _stor
^
/usr/src/syntek-3.0.0-3/stk11xx-sysfs.c:492:8: замечание: in expansion of macro «DEVICE_ATTR»
static DEVICE_ATTR(hflip, S_IRUGO | S_IWUGO, show_hflip, store_hflip);
^
./include/linux/bug.h:37:45: ошибка: битовое поле «<anonymous>» имеет отрицательный размер
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
./include/linux/kernel.h:854:3: замечание: in expansion of macro «BUILD_BUG_ON_ZERO»
BUILD_BUG_ON_ZERO((perms) & 2) + \
^
./include/linux/sysfs.h:102:12: замечание: in expansion of macro «VERIFY_OCTAL_PERMISSIONS»
.mode = VERIFY_OCTAL_PERMISSIONS(_mode) }, \
^
./include/linux/device.h:576:45: замечание: in expansion of macro «__ATTR»
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _stor
^
/usr/src/syntek-3.0.0-3/stk11xx-sysfs.c:493:8: замечание: in expansion of macro «DEVICE_ATTR»
static DEVICE_ATTR(vflip, S_IRUGO | S_IWUGO, show_vflip, store_vflip);
^
make[2]: *** [scripts/Makefile.build:294: /usr/src/syntek-3.0.0-3/stk11xx-sysfs.o] Ошибка 1
make[1]: *** [Makefile:1483: _module_/usr/src/syntek-3.0.0-3] Ошибка 2
make[1]: выход из каталога «/usr/src/linux-4.9.9-nrj-desktop-1rosa-x86_64»
make: *** [Makefile.standalone:13: driver] Ошибка 2
Ошибка, как я понимаю, из-за того, что изменён файл исходника, и что-то, где-то нужно сделать с версией?
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 13:31
trs
"As a workaround, change S_IRUGO | S_IWUGO to 0660". Даже собрался драйвер.
Почему не проходит проверка с макросами, тоже интересно

Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 13:38
trs
S_IRUGO | S_IWURS — вот так собирается.
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 13:40
nube
trs писал(а):"As a workaround, change S_IRUGO | S_IWUGO to 0660". Даже собрался драйвер.
Почему не проходит проверка с макросами, тоже интересно

Блин, а где это? Где
change S_IRUGO | S_IWUGO to 0660
?
Я тоже такое нагуглил, но "как баран на ворота"

Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 13:51
trs
Это в файле stk11xx-sysfs.c
Наверно, правильней так:
Код: Выделить всё
static DEVICE_ATTR(brightness, S_IRUGO | S_IWUSR | S_IWGRP, show_brightness, store_brightness);
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 13:56
nube
всё. нашёл.

Вот точно - смотрю в книгу, вижу фигу
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 14:17
nube
Вау!
Спасибо ещё раз,ещё много-много раз!

Правленые файлы собрал в кучу. А теперь чё с имя делать?
Как-то это всё установить можно?
Собирается вроде без ошибок (просто в папке).
А я теперь совсем растерялся и не знаю как и куда всё это...

make install сделал.
Драйвер уже должен быть в системе? или после перезагрузки? Или его через dkms надо?
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 14:38
trs
Я бы перед пакетированием проверил драйвер.
Вроде бы запускается.*
Код: Выделить всё
[33977.359794] stk11xx: Syntek USB Video Camera driver v3.0.0 startup
[33977.359797] stk11xx: Copyright(c) 2006-2012 Nicolas VIVIEN
[33977.359798] stk11xx: http://sourceforge.net/projects/syntekdriver/
[33977.359837] usbcore: registered new interface driver usb_stk11xx_driver
но без железа не ясно, будет ли от этого толк.
*По make install он, как я понял, не устанавливается, потому modprobe его не видит. Но для dkms это не дожно быть проблемой.
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 16:53
nube
trs писал(а):Я бы перед пакетированием проверил драйвер.
Вроде бы запускается.*
Код: Выделить всё
[33977.359794] stk11xx: Syntek USB Video Camera driver v3.0.0 startup
[33977.359797] stk11xx: Copyright(c) 2006-2012 Nicolas VIVIEN
[33977.359798] stk11xx: http://sourceforge.net/projects/syntekdriver/
[33977.359837] usbcore: registered new interface driver usb_stk11xx_driver
но без железа не ясно, будет ли от этого толк.
*По make install он, как я понял, не устанавливается, потому modprobe его не видит. Но для dkms это не дожно быть проблемой.
Сделал чистую установку R8.
Сделал make в папке с исходниками, сделал make install.
insmod stk11xx.ko ничего не выдаёт.
Как проверить с учётом наличия железки?
Или как его установить не через rpm?
Чем дальше, тем меньше понимаю

Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 17:48
keleg
мож, проще все же rpm собрать? Раз уже собирается.

Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 18:05
nube
keleg писал(а):мож, проще все же rpm собрать? Раз уже собирается.

А всёравно нет уверенности что заработает.
Если я сегодня ещё и в abf полезу, то забуду своё имя.
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 18:14
keleg
ну, мне через abf проще, я неопытный сборщик

Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 18:25
nube
keleg писал(а):ну, мне через abf проще, я неопытный сборщик

А давайте я отредактированные файлы сюда прикреплю, а Вы в abf соберёте?
Я настолько "неопытный сборщик", что даже не понял что Вы там про abf написали дальше, чем "установить abf"

Уж про деревья в файлах, да ещё "завести новую ветку" я промолчу

Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 18:58
nube
Ну второй пункт я тоже осилил.
По третьему по-подробнее можно?
3) Ищем и клонируем в личные репозитории нужный проект, import/syntek
Re: Драйвер stk11xx для вебкамер
Добавлено: 09 мар 2017, 21:58
keleg
вбиваем в поиск syntek, находим import/syntek, открываем, нажимаем кнопку "клонировать"
Re: Драйвер stk11xx для вебкамер
Добавлено: 10 мар 2017, 10:41
trs
nube писал(а):Сделал make в папке с исходниками, сделал make install.
insmod stk11xx.ko ничего не выдаёт.
Это хорошо, значит команда драйвер нашла и загрузила.
Сообщения от драйвера надо смотреть командой
dmesg
nube писал(а):Как проверить с учётом наличия железки?
Пока не знаю, может потребоваться выгрузить встроенные в ядро драйвера так:
Код: Выделить всё
modprobe -r gspca_stk1135
modprobe -r gspca_main
Re: Драйвер stk11xx для вебкамер
Добавлено: 10 мар 2017, 18:17
nube
trs писал(а):nube писал(а):Сделал make в папке с исходниками, сделал make install.
insmod stk11xx.ko ничего не выдаёт.
Это хорошо, значит команда драйвер нашла и загрузила.
Сообщения от драйвера надо смотреть командой
dmesg
nube писал(а):Как проверить с учётом наличия железки?
Пока не знаю, может потребоваться выгрузить встроенные в ядро драйвера так:
Код: Выделить всё
modprobe -r gspca_stk1135
modprobe -r gspca_main
Проверил
без gspca_main не запускается.
С ним запускается, но выдаёт ошибку. Камера не работает.
Не знаю есть ли смысл дальше ковырять.
В 2016.1 драйвер из ядра в принципе работает.
А он основан на этом пакете. Если чего и ковырять, то, наверное, лучше уже ту реализацию. Может быть, удастся выжать чего получше.
Хотя, он тоже gspca, и видимо в новом скайпе v4l2 пока вообще не работают.
Спасибо за помощь и за подсказки. Кое-чего "нахватался" - и то польза

Re: Драйвер stk11xx для вебкамер
Добавлено: 11 мар 2017, 06:59
keleg
а, интересно, в чем отличие? Ядро вроде одинаковое и в 2014.1 8.1 и в 2016.1
Re: Драйвер stk11xx для вебкамер
Добавлено: 11 мар 2017, 08:26
nube
keleg писал(а):а, интересно, в чем отличие? Ядро вроде одинаковое и в 2014.1 8.1 и в 2016.1
Понятия не имею.
По крайней мере, в 2016.1 в kamoso правильное соотношение сторон, а в 8.1 картинка растянутая.
Старого скайпа для 2016 не обнаружил, новый с этой камерой ни там, ни там не работает, а старый в 2014.1 принимает с камеры картинку 32х32.
Вот даже интересно. Заглянул в исходники драйвера. Почему форматы картинки не выведены в какие-нибудь конфиги? В линуксах не принято?
Зачем-то, жёстко в драйвере создаётся таблица "поддерживаемых форматов" вида " ширина от 32 до 1280 с шагом 2", и с высотой "от 32 до 1024 с шагом 2"? Чем потом руководствуются программы, выбирая формат - одному Богу известно.
camorama с этой камерой вообще не работает. Есть подозрение, что либо косяк с подсчётом полосы пропускания usb, либо определяется как usb 1.1, либо сама камера инициализируется неправильно - тормоза жуткие,
Вобщем, странный подход. Реализовано "как-то, почему-то, кое-где, иногда работает" - и всё. Чтобы что-то подкрутить - лезь в исходники ядра и разбирайся, перекомпилируй...
Re: Драйвер stk11xx для вебкамер
Добавлено: 11 мар 2017, 09:28
keleg
старый скайп в 32-разрядных репозиториях, они у вас подключены?