Автор Тема: Проблем след инсталация на ново ядро  (Прочетена 6354 пъти)

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #30 -: Sep 14, 2012, 16:22 »
да пробваме да закачим библиотеките ръчно преди скайп

Код:
sudo ldconfig -l /usr/local/lib/libv4l/v4l1compat.so
sudo ldconfig -l /usr/local/lib/libv4/v4l2convert.so
LD_PRELOAD=/usr/local/lib/libv4l/v4l1compat.so skype

Това което още е под въпрос е дали камерата ти се вижда като устройство, не от скайп, а от ядрото, т.е. дали има необходимия модул (което се опитвахме да направим първо). Ако не се нашите упражнения с библиотеки са не на място. Виж какво устройство има като видео:

Код:
ls -l /dev/video*
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.

polaana

  • Напреднали
  • *****
  • Публикации: 61
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #31 -: Sep 14, 2012, 17:59 »
space@space-desktop:~$ ls -l /dev/video*
ls: няма достъп до /dev/video*: Няма такъв файл или директория
space@space-desktop:~$
Активен

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #32 -: Sep 14, 2012, 19:01 »
Първо въпрос: работи ли сега с guvcview?

Второ: ще се връщаме към гит, значи няма модул. Пусни ls -la microdia, трябва да ти даде подобно на това по-долу, ако правилно съм следвал историята:

Цитат
-rw-rw-r--  1 drago drago    67 Sep 14 11:41 .config
-rw-rw-r--  1 drago drago 10212 Sep 14 11:41 Doxyfile
drwxrwxr-x  8 drago drago  4096 Sep 14 11:41 .git/
-rw-rw-r--  1 drago drago   301 Sep 14 11:41 .gitignore
-rw-rw-r--  1 drago drago  2189 Sep 14 11:41 hv7131r.c
-rw-rw-r--  1 drago drago   597 Sep 14 11:41 Kconfig
-rw-rw-r--  1 drago drago   937 Sep 14 11:41 Makefile
-rw-rw-r--  1 drago drago 19931 Sep 14 11:41 micron.c
-rw-rw-r--  1 drago drago  7101 Sep 14 11:41 micron.h
-rw-rw-r--  1 drago drago 21958 Sep 14 11:41 omnivision.c
-rw-rw-r--  1 drago drago 17680 Sep 14 11:41 omnivision.h
-rw-rw-r--  1 drago drago  4991 Sep 14 11:41 README
-rw-rw-r--  1 drago drago 38561 Sep 14 11:41 sn9c20x-bridge.c
-rw-rw-r--  1 drago drago  2900 Sep 14 11:41 sn9c20x-bridge.h
-rw-rw-r--  1 drago drago 12433 Sep 14 11:41 sn9c20x-debugfs.c
-rw-rw-r--  1 drago drago  9658 Sep 14 11:41 sn9c20x-dev.c
-rw-rw-r--  1 drago drago 13279 Sep 14 11:41 sn9c20x.h
-rw-rw-r--  1 drago drago 14523 Sep 14 11:41 sn9c20x-queue.c
-rw-rw-r--  1 drago drago 31392 Sep 14 11:41 sn9c20x-sysfs.c
-rw-rw-r--  1 drago drago 34743 Sep 14 11:41 sn9c20x-usb.c
-rw-rw-r--  1 drago drago 36187 Sep 14 11:41 sn9c20x-v4l2.c

Следва
Код:
cd microdia
make
sudo modprobe videodev
sudo modprobe compat-ioctl32

sudo insmod ./microdia.ko

strip -g microdia.ko
sudo cp microdia.ko /lib/modules/`uname -r`/kernel/drivers/media/video/usbvideo/
sudo depmod -a

Ако всичко мине нормално (ако не - публикувай съобщенията за грешки), изключи камерата от USB-то, включи я пак и пробвай със скайп или cheese.

За домашно (желателно преди да се бориш пак, за да има това което правиш и някакъв смисъл, а не да е голо копиране) http://wiki.ubuntuusers-bg.org/doku.php?id=ubuntu_chicks и http://wiki.ubuntuusers-bg.org/doku.php?id=work_with_console

ПП BTW ако го бориш сега цъкни на линка в подписа ми, за няколко часа съм на линия в IRC чат, може да го решим оперативно. Напиши ми ника в чата, компа ще ми даде нишан че ме търси някой.
« Последна редакция: Sep 14, 2012, 19:10 от dejuren »
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.

polaana

  • Напреднали
  • *****
  • Публикации: 61
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #33 -: Sep 15, 2012, 11:17 »
dejuren, благодаря за wiki-то ! вече не работи с guvcview, казва че няма драйвери. компилирането върви добре до:sudo modprobe compat-ioctl32

rw-r--r--  1 space space 34743 2012-09-11 17:20 sn9c20x-usb.c
-rw-r--r--  1 space space 36187 2012-09-11 17:20 sn9c20x-v4l2.c
space@space-desktop:~$ cd microdia
space@space-desktop:~/microdia$ make
make -C /lib/modules/2.6.32-42-generic/build SUBDIRS=/home/space/microdia modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-42-generic'
  CC [M]  /home/space/microdia/sn9c20x-usb.o
  CC [M]  /home/space/microdia/sn9c20x-v4l2.o
  CC [M]  /home/space/microdia/sn9c20x-sysfs.o
  CC [M]  /home/space/microdia/sn9c20x-dev.o
  CC [M]  /home/space/microdia/sn9c20x-queue.o
  CC [M]  /home/space/microdia/sn9c20x-bridge.o
  CC [M]  /home/space/microdia/omnivision.o
  CC [M]  /home/space/microdia/micron.o
  CC [M]  /home/space/microdia/hv7131r.o
  CC [M]  /home/space/microdia/sn9c20x-debugfs.o
  LD [M]  /home/space/microdia/sn9c20x.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/space/microdia/sn9c20x.mod.o
  LD [M]  /home/space/microdia/sn9c20x.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-42-generic'
space@space-desktop:~/microdia$ sudo modprobe videodev
[sudo] password for space:
space@space-desktop:~/microdia$ sudo modprobe compat-ioctl32
FATAL: Module compat_ioctl32 not found.
space@space-desktop:~/microdia$

За съжаление снощи много късно видях поста ти .
Активен

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #34 -: Sep 15, 2012, 15:08 »
Дай тогава да рискуваме една стъпка - пробвай направо следващата команда (само нея, без последните 3) и cheese/skype.
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.

polaana

  • Напреднали
  • *****
  • Публикации: 61
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #35 -: Sep 16, 2012, 11:53 »
space@space-desktop:~/microdia$ sudo insmod ./microdia.ko
insmod: can't read './microdia.ko': No such file or directory
space@space-desktop:~/microdia$
« Последна редакция: Sep 16, 2012, 11:58 от polaana »
Активен

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #36 -: Sep 16, 2012, 17:25 »
А, усетих аз че съм в грешка, ама рекох хайде за пробата... Тествай сега

Код:
sudo insmod ./sn9c20x.ko

и после cheese/skype
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.

polaana

  • Напреднали
  • *****
  • Публикации: 61
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #37 -: Sep 17, 2012, 09:27 »
rw-r--r--  1 space vboxusers  31348 2012-09-15 11:10 .sn9c20x-v4l2.o.cmd
-rw-r--r--  1 space vboxusers  61215 2012-09-16 11:56 tags
drwxr-xr-x  2 space vboxusers   4096 2012-09-16 11:56 .tmp_versions
space@space-desktop:~$ cd microdia
space@space-desktop:~/microdia$ sudo modprobe videodev
[sudo] password for space:
space@space-desktop:~/microdia$ sudo insmod ./sn9c20x.ko
insmod: error inserting './sn9c20x.ko': -1 Device or resource busy
space@space-desktop:~/microdia$
Активен

laskov

  • Напреднали
  • *****
  • Публикации: 3166
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #38 -: Sep 17, 2012, 10:19 »
Аз пак, като черна станция ...
След инсталиране на ново ядро, обикновено при зареждането на машината, зареждащата програма дава възможност за избор на ядро, като по подразбиране е последното инсталирано. Би трябвало да може да се избере и зареди предишното ядро.
// извинявайте, че се опитвам да обезмисля целия положен от вас труд да подкарате тази камера. :)
« Последна редакция: Sep 17, 2012, 10:21 от laskov »
Активен

Не си мислете, че понеже Вие мислите правилно, всички мислят като Вас! Затова, когато има избори, идете и гласувайте, за да не сте изненадани после от резултата, и за да не твърди всяка партия, че тя е спечелила, а Б.Б. (С.С., ...) е загубил, а трети да управлява.  Наздраве!  [_]3

polaana

  • Напреднали
  • *****
  • Публикации: 61
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #39 -: Sep 17, 2012, 13:50 »
Аз съм казала че ще я мъча тази камера докато тръгне :) А за ядрото, аз в момента съм с оригиналното ядро за Убунту 10.04, 2.6.32-42-generic, така че друго няма, а инак изпробвах почти всички ядра, вкл най-новите, с никое не тръгва. Доколкото видях тук: http://ubuntuforums.org/showthread.php?t=1137793, преди версия 10.04 се е получавало по този начин. Опитвам се да разгадая това какво е : http://patchwork.linuxtv.org/patch/11042/ , https://patchwork.kernel.org/patch/1171531/ ???
« Последна редакция: Sep 17, 2012, 13:54 от polaana »
Активен

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #40 -: Sep 17, 2012, 19:15 »
ок, значи чисто нов модул се проваля с трясък при зареждане, и после отиваме на ниво пачове. Според мен колега polaana ти е малко рано, но така и така сме там. Значи ако ще пачваш сорса на модула (спри ме в момента в който не разбираш какво казвам) първо го копирай и работи върху копието. Т.е. трябва да копираш директория microdia. След което отиваш в новата копирана директория и си приготвяш пач. Това ще е копие от страниците които си публикувала от трите минуса (---) в началото до двата в края/ или до края. В случая:

Код:
--- a/drivers/media/video/gspca/sn9c20x.c
+++ b/drivers/media/video/gspca/sn9c20x.c
@@ -2070,10 +2070,13 @@  static int sd_start(struct gspca_dev *gspca_dev)
  set_gamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma));
  set_redblue(gspca_dev, v4l2_ctrl_g_ctrl(sd->blue),
  v4l2_ctrl_g_ctrl(sd->red));
- set_gain(gspca_dev, v4l2_ctrl_g_ctrl(sd->gain));
- set_exposure(gspca_dev, v4l2_ctrl_g_ctrl(sd->exposure));
- set_hvflip(gspca_dev, v4l2_ctrl_g_ctrl(sd->hflip),
- v4l2_ctrl_g_ctrl(sd->vflip));
+ if (sd->gain)
+ set_gain(gspca_dev, v4l2_ctrl_g_ctrl(sd->gain));
+ if (sd->exposure)
+ set_exposure(gspca_dev, v4l2_ctrl_g_ctrl(sd->exposure));
+ if (sd->hflip)
+ set_hvflip(gspca_dev, v4l2_ctrl_g_ctrl(sd->hflip),
+ v4l2_ctrl_g_ctrl(sd->vflip));
 
  reg_w1(gspca_dev, 0x1007, 0x20);
  reg_w1(gspca_dev, 0x1061, 0x03);
@@ -2176,7 +2179,7 @@  static void sd_dqcallback(struct gspca_dev *gspca_dev)
  struct sd *sd = (struct sd *) gspca_dev;
  int avg_lum;
 
- if (!v4l2_ctrl_g_ctrl(sd->autogain))
+ if (sd->autogain == NULL || !v4l2_ctrl_g_ctrl(sd->autogain))
  return;
 
  avg_lum = atomic_read(&sd->avg_lum);

Код:
--- a/drivers/media/video/gspca/sn9c20x.c
+++ b/drivers/media/video/gspca/sn9c20x.c
@@ -28,6 +28,7 @@
 #include "jpeg.h"
 
 #include <media/v4l2-chip-ident.h>
+#include <media/v4l2-ctrls.h>
 #include <linux/dmi.h>
 
 MODULE_AUTHOR("Brian Johnson <brijohn@gmail.com>, "
@@ -66,28 +67,32 @@  MODULE_LICENSE("GPL");
 #define LED_REVERSE 0x2 /* some cameras unset gpio to turn on leds */
 #define FLIP_DETECT 0x4
 
-enum e_ctrl {
- BRIGHTNESS,
- CONTRAST,
- SATURATION,
- HUE,
- GAMMA,
- BLUE,
- RED,
- VFLIP,
- HFLIP,
- EXPOSURE,
- GAIN,
- AUTOGAIN,
- QUALITY,
- NCTRLS /* number of controls */
-};
-
 /* specific webcam descriptor */
 struct sd {
  struct gspca_dev gspca_dev;
 
- struct gspca_ctrl ctrls[NCTRLS];
+ struct v4l2_ctrl_handler ctrl_handler;
+ struct { /* color control cluster */
+ struct v4l2_ctrl *brightness;
+ struct v4l2_ctrl *contrast;
+ struct v4l2_ctrl *saturation;
+ struct v4l2_ctrl *hue;
+ };
+ struct { /* blue/red balance control cluster */
+ struct v4l2_ctrl *blue;
+ struct v4l2_ctrl *red;
+ };
+ struct { /* h/vflip control cluster */
+ struct v4l2_ctrl *hflip;
+ struct v4l2_ctrl *vflip;
+ };
+ struct v4l2_ctrl *gamma;
+ struct { /* autogain and exposure or gain control cluster */
+ struct v4l2_ctrl *autogain;
+ struct v4l2_ctrl *exposure;
+ struct v4l2_ctrl *gain;
+ };
+ struct v4l2_ctrl *jpegqual;
 
  struct work_struct work;
  struct workqueue_struct *work_thread;
@@ -167,175 +172,6 @@  static const struct dmi_system_id flip_dmi_table[] = {
  {}
 };
 
-static void set_cmatrix(struct gspca_dev *gspca_dev);
-static void set_gamma(struct gspca_dev *gspca_dev);
-static void set_redblue(struct gspca_dev *gspca_dev);
-static void set_hvflip(struct gspca_dev *gspca_dev);
-static void set_exposure(struct gspca_dev *gspca_dev);
-static void set_gain(struct gspca_dev *gspca_dev);
-static void set_quality(struct gspca_dev *gspca_dev);
-
-static const struct ctrl sd_ctrls[NCTRLS] = {
-[BRIGHTNESS] = {
-     {
- .id      = V4L2_CID_BRIGHTNESS,
- .type    = V4L2_CTRL_TYPE_INTEGER,
- .name    = "Brightness",
- .minimum = 0,
- .maximum = 0xff,
- .step    = 1,
- .default_value = 0x7f
-     },
-     .set_control = set_cmatrix
- },
-[CONTRAST] = {
-     {
- .id      = V4L2_CID_CONTRAST,
- .type    = V4L2_CTRL_TYPE_INTEGER,
- .name    = "Contrast",
- .minimum = 0,
- .maximum = 0xff,
- .step    = 1,
- .default_value = 0x7f
-     },
-     .set_control = set_cmatrix
- },
-[SATURATION] = {
-     {
- .id      = V4L2_CID_SATURATION,
- .type    = V4L2_CTRL_TYPE_INTEGER,
- .name    = "Saturation",
- .minimum = 0,
- .maximum = 0xff,
- .step    = 1,
- .default_value = 0x7f
-     },
-     .set_control = set_cmatrix
- },
-[HUE] = {
-     {
- .id      = V4L2_CID_HUE,
- .type    = V4L2_CTRL_TYPE_INTEGER,
- .name    = "Hue",
- .minimum = -180,
- .maximum = 180,
- .step    = 1,
- .default_value = 0
-     },
-     .set_control = set_cmatrix
- },
-[GAMMA] = {
-     {
- .id      = V4L2_CID_GAMMA,
- .type    = V4L2_CTRL_TYPE_INTEGER,
- .name    = "Gamma",
- .minimum = 0,
- .maximum = 0xff,
- .step    = 1,
- .default_value = 0x10
-     },
-     .set_control = set_gamma
- },
-[BLUE] = {
-     {
- .id = V4L2_CID_BLUE_BALANCE,
- .type = V4L2_CTRL_TYPE_INTEGER,
- .name = "Blue Balance",
- .minimum = 0,
- .maximum = 0x7f,
- .step = 1,
- .default_value = 0x28
-     },
-     .set_control = set_redblue
- },
-[RED] = {
-     {
- .id = V4L2_CID_RED_BALANCE,
- .type = V4L2_CTRL_TYPE_INTEGER,
- .name = "Red Balance",
- .minimum = 0,
- .maximum = 0x7f,
- .step = 1,
- .default_value = 0x28
-     },
-     .set_control = set_redblue
- },
-[HFLIP] = {
-     {
- .id      = V4L2_CID_HFLIP,
- .type    = V4L2_CTRL_TYPE_BOOLEAN,
- .name    = "Horizontal Flip",
- .minimum = 0,
- .maximum = 1,
- .step    = 1,
- .default_value = 0,
-     },
-     .set_control = set_hvflip
- },
-[VFLIP] = {
-     {
- .id      = V4L2_CID_VFLIP,
- .type    = V4L2_CTRL_TYPE_BOOLEAN,
- .name    = "Vertical Flip",
- .minimum = 0,
- .maximum = 1,
- .step    = 1,
- .default_value = 0,
-     },
-     .set_control = set_hvflip
- },
-[EXPOSURE] = {
-     {
- .id      = V4L2_CID_EXPOSURE,
- .type    = V4L2_CTRL_TYPE_INTEGER,
- .name    = "Exposure",
- .minimum = 0,
- .maximum = 0x1780,
- .step    = 1,
- .default_value = 0x33,
-     },
-     .set_control = set_exposure
- },
-[GAIN] = {
-     {
- .id      = V4L2_CID_GAIN,
- .type    = V4L2_CTRL_TYPE_INTEGER,
- .name    = "Gain",
- .minimum = 0,
- .maximum = 28,
- .step    = 1,
- .default_value = 0,
-     },
-     .set_control = set_gain
- },
-[AUTOGAIN] = {
-     {
- .id      = V4L2_CID_AUTOGAIN,
- .type    = V4L2_CTRL_TYPE_BOOLEAN,
- .name    = "Auto Exposure",
- .minimum = 0,
- .maximum = 1,
- .step    = 1,
- .default_value = 1,
-     },
- },
-[QUALITY] = {
-     {
- .id      = V4L2_CID_JPEG_COMPRESSION_QUALITY,
- .type    = V4L2_CTRL_TYPE_INTEGER,
- .name    = "Compression Quality",
-#define QUALITY_MIN 50
-#define QUALITY_MAX 90
-#define QUALITY_DEF 80
- .minimum = QUALITY_MIN,
- .maximum = QUALITY_MAX,
- .step    = 1,
- .default_value = QUALITY_DEF,
-     },
-     .set_control = set_quality
- },
-};
-
 static const struct v4l2_pix_format vga_mode[] = {
  {160, 120, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
  .bytesperline = 160,
@@ -1296,8 +1132,6 @@  static void ov9655_init_sensor(struct gspca_dev *gspca_dev)
  if (gspca_dev->usb_err < 0)
  pr_err("OV9655 sensor initialization failed\n");
 
- /* disable hflip and vflip */
- gspca_dev->ctrl_dis = (1 << HFLIP) | (1 << VFLIP);
  sd->hstart = 1;
  sd->vstart = 2;
 }
@@ -1312,9 +1146,6 @@  static void soi968_init_sensor(struct gspca_dev *gspca_dev)
  if (gspca_dev->usb_err < 0)
  pr_err("SOI968 sensor initialization failed\n");
 
- /* disable hflip and vflip */
- gspca_dev->ctrl_dis = (1 << HFLIP) | (1 << VFLIP)
- | (1 << EXPOSURE);
  sd->hstart = 60;
  sd->vstart = 11;
 }
@@ -1342,8 +1173,6 @@  static void ov7670_init_sensor(struct gspca_dev *gspca_dev)
  if (gspca_dev->usb_err < 0)
  pr_err("OV7670 sensor initialization failed\n");
 
- /* disable hflip and vflip */
- gspca_dev->ctrl_dis = (1 << HFLIP) | (1 << VFLIP);
  sd->hstart = 0;
  sd->vstart = 1;
 }
@@ -1380,9 +1209,6 @@  static void mt9v_init_sensor(struct gspca_dev *gspca_dev)
  pr_err("MT9V111 sensor initialization failed\n");
  return;
  }
- gspca_dev->ctrl_dis = (1 << EXPOSURE)
- | (1 << AUTOGAIN)
- | (1 << GAIN);
  sd->hstart = 2;
  sd->vstart = 2;
  sd->sensor = SENSOR_MT9V111;
@@ -1424,8 +1250,6 @@  static void mt9m112_init_sensor(struct gspca_dev *gspca_dev)
  if (gspca_dev->usb_err < 0)
  pr_err("MT9M112 sensor initialization failed\n");
 
- gspca_dev->ctrl_dis = (1 << EXPOSURE) | (1 << AUTOGAIN)
- | (1 << GAIN);
  sd->hstart = 0;
  sd->vstart = 2;
 }
@@ -1438,8 +1262,6 @@  static void mt9m111_init_sensor(struct gspca_dev *gspca_dev)
  if (gspca_dev->usb_err < 0)
  pr_err("MT9M111 sensor initialization failed\n");
 
- gspca_dev->ctrl_dis = (1 << EXPOSURE) | (1 << AUTOGAIN)
- | (1 << GAIN);
  sd->hstart = 0;
  sd->vstart = 2;
 }
@@ -1472,8 +1294,6 @@  static void mt9m001_init_sensor(struct gspca_dev *gspca_dev)
  if (gspca_dev->usb_err < 0)
  pr_err("MT9M001 sensor initialization failed\n");
 
- /* disable hflip and vflip */
- gspca_dev->ctrl_dis = (1 << HFLIP) | (1 << VFLIP);
  sd->hstart = 1;
  sd->vstart = 1;
 }
@@ -1490,20 +1310,18 @@  static void hv7131r_init_sensor(struct gspca_dev *gspca_dev)
  sd->vstart = 1;
 }
 
-static void set_cmatrix(struct gspca_dev *gspca_dev)
+static void set_cmatrix(struct gspca_dev *gspca_dev,
+ s32 brightness, s32 contrast, s32 satur, s32 hue)
 {
- struct sd *sd = (struct sd *) gspca_dev;
- int satur;
- s32 hue_coord, hue_index = 180 + sd->ctrls[HUE].val;
+ s32 hue_coord, hue_index = 180 + hue;
  u8 cmatrix[21];
 
  memset(cmatrix, 0, sizeof cmatrix);
- cmatrix[2] = (sd->ctrls[CONTRAST].val * 0x25 / 0x100) + 0x26;
+ cmatrix[2] = (contrast * 0x25 / 0x100) + 0x26;
  cmatrix[0] = 0x13 + (cmatrix[2] - 0x26) * 0x13 / 0x25;
  cmatrix[4] = 0x07 + (cmatrix[2] - 0x26) * 0x07 / 0x25;
- cmatrix[18] = sd->ctrls[BRIGHTNESS].val - 0x80;
+ cmatrix[18] = brightness - 0x80;
 
- satur = sd->ctrls[SATURATION].val;
  hue_coord = (hsv_red_x[hue_index] * satur) >> 8;
  cmatrix[6] = hue_coord;
  cmatrix[7] = (hue_coord >> 8) & 0x0f;
@@ -1531,11 +1349,10 @@  static void set_cmatrix(struct gspca_dev *gspca_dev)
  reg_w(gspca_dev, 0x10e1, cmatrix, 21);
 }
 
-static void set_gamma(struct gspca_dev *gspca_dev)
+static void set_gamma(struct gspca_dev *gspca_dev, s32 val)
 {
- struct sd *sd = (struct sd *) gspca_dev;
  u8 gamma[17];
- u8 gval = sd->ctrls[GAMMA].val * 0xb8 / 0x100;
+ u8 gval = val * 0xb8 / 0x100;
 
  gamma[0] = 0x0a;
  gamma[1] = 0x13 + (gval * (0xcb - 0x13) / 0xb8);
@@ -1558,26 +1375,21 @@  static void set_gamma(struct gspca_dev *gspca_dev)
  reg_w(gspca_dev, 0x1190, gamma, 17);
 }
 
-static void set_redblue(struct gspca_dev *gspca_dev)
+static void set_redblue(struct gspca_dev *gspca_dev, s32 blue, s32 red)
 {
- struct sd *sd = (struct sd *) gspca_dev;
-
- reg_w1(gspca_dev, 0x118c, sd->ctrls[RED].val);
- reg_w1(gspca_dev, 0x118f, sd->ctrls[BLUE].val);
+ reg_w1(gspca_dev, 0x118c, red);
+ reg_w1(gspca_dev, 0x118f, blue);
 }
 
-static void set_hvflip(struct gspca_dev *gspca_dev)
+static void set_hvflip(struct gspca_dev *gspca_dev, s32 hflip, s32 vflip)
 {
- u8 value, tslb, hflip, vflip;
+ u8 value, tslb;
  u16 value2;
  struct sd *sd = (struct sd *) gspca_dev;
 
  if ((sd->flags & FLIP_DETECT) && dmi_check_system(flip_dmi_table)) {
- hflip = !sd->ctrls[HFLIP].val;
- vflip = !sd->ctrls[VFLIP].val;
- } else {
- hflip = sd->ctrls[HFLIP].val;
- vflip = sd->ctrls[VFLIP].val;
+ hflip = !hflip;
+ vflip = !vflip;
  }
 
  switch (sd->sensor) {
@@ -1640,17 +1452,16 @@  static void set_hvflip(struct gspca_dev *gspca_dev)
  }
 }
 
-static void set_exposure(struct gspca_dev *gspca_dev)
+static void set_exposure(struct gspca_dev *gspca_dev, s32 expo)
 {
  struct sd *sd = (struct sd *) gspca_dev;
  u8 exp[8] = {sd->i2c_intf, sd->i2c_addr,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x10};
- int expo, expo2;
+ int expo2;
 
  if (gspca_dev->streaming)
  exp[7] = 0x1e;
 
- expo = sd->ctrls[EXPOSURE].val;
  switch (sd->sensor) {
  case SENSOR_OV7660:
  case SENSOR_OV7670:
@@ -1697,17 +1508,15 @@  static void set_exposure(struct gspca_dev *gspca_dev)
  i2c_w(gspca_dev, exp);
 }
 
-static void set_gain(struct gspca_dev *gspca_dev)
+static void set_gain(struct gspca_dev *gspca_dev, s32 g)
 {
  struct sd *sd = (struct sd *) gspca_dev;
  u8 gain[8] = {sd->i2c_intf, sd->i2c_addr,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x10};
- int g;
 
  if (gspca_dev->streaming)
  gain[7] = 0x15; /* or 1d ? */
 
- g = sd->ctrls[GAIN].val;
  switch (sd->sensor) {
  case SENSOR_OV7660:
  case SENSOR_OV7670:
@@ -1746,11 +1555,11 @@  static void set_gain(struct gspca_dev *gspca_dev)
  i2c_w(gspca_dev, gain);
 }
 
-static void set_quality(struct gspca_dev *gspca_dev)
+static void set_quality(struct gspca_dev *gspca_dev, s32 val)
 {
  struct sd *sd = (struct sd *) gspca_dev;
 
- jpeg_set_qual(sd->jpeg_hdr, sd->ctrls[QUALITY].val);
+ jpeg_set_qual(sd->jpeg_hdr, val);
  reg_w1(gspca_dev, 0x1061, 0x01); /* stop transfer */
  reg_w1(gspca_dev, 0x10e0, sd->fmt | 0x20); /* write QTAB */
  reg_w(gspca_dev, 0x1100, &sd->jpeg_hdr[JPEG_QT0_OFFSET], 64);
@@ -1879,13 +1688,129 @@  static int sd_config(struct gspca_dev *gspca_dev,
  sd->older_step = 0;
  sd->exposure_step = 16;
 
- gspca_dev->cam.ctrls = sd->ctrls;
-
  INIT_WORK(&sd->work, qual_upd);
 
  return 0;
 }
 
+static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
+{
+ struct sd *sd = container_of(ctrl->handler, struct sd, ctrl_handler);
+ struct gspca_dev *gspca_dev = &sd->gspca_dev;
+
+ gspca_dev->usb_err = 0;
+
+ if (!gspca_dev->streaming)
+ return 0;
+
+ switch (ctrl->id) {
+ /* color control cluster */
+ case V4L2_CID_BRIGHTNESS:
+ set_cmatrix(&sd->gspca_dev, sd->brightness->val,
+ sd->contrast->val, sd->saturation->val, sd->hue->val);
+ break;
+ case V4L2_CID_GAMMA:
+ set_gamma(&sd->gspca_dev, ctrl->val);
+ break;
+ /* blue/red balance cluster */
+ case V4L2_CID_BLUE_BALANCE:
+ set_redblue(&sd->gspca_dev, sd->blue->val, sd->red->val);
+ break;
+ /* h/vflip cluster */
+ case V4L2_CID_HFLIP:
+ set_hvflip(&sd->gspca_dev, sd->hflip->val, sd->vflip->val);
+ break;
+ /* standalone exposure control */
+ case V4L2_CID_EXPOSURE:
+ set_exposure(&sd->gspca_dev, ctrl->val);
+ break;
+ /* standalone gain control */
+ case V4L2_CID_GAIN:
+ set_gain(&sd->gspca_dev, ctrl->val);
+ break;
+ /* autogain + exposure or gain control cluster */
+ case V4L2_CID_AUTOGAIN:
+ if (sd->sensor == SENSOR_SOI968)
+ set_gain(&sd->gspca_dev, sd->gain->val);
+ else
+ set_exposure(&sd->gspca_dev, sd->exposure->val);
+ break;
+ case V4L2_CID_JPEG_COMPRESSION_QUALITY:
+ set_quality(&sd->gspca_dev, ctrl->val);
+ break;
+ }
+ return gspca_dev->usb_err;
+}
+
+static const struct v4l2_ctrl_ops sd_ctrl_ops = {
+ .s_ctrl = sd_s_ctrl,
+};
+
+static int sd_init_controls(struct gspca_dev *gspca_dev)
+{
+ struct sd *sd = (struct sd *) gspca_dev;
+ struct v4l2_ctrl_handler *hdl = &sd->ctrl_handler;
+
+ gspca_dev->vdev.ctrl_handler = hdl;
+ v4l2_ctrl_handler_init(hdl, 13);
+
+ sd->brightness = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_BRIGHTNESS, 0, 255, 1, 127);
+ sd->contrast = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_CONTRAST, 0, 255, 1, 127);
+ sd->saturation = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_SATURATION, 0, 255, 1, 127);
+ sd->hue = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_HUE, -180, 180, 1, 0);
+ v4l2_ctrl_cluster(4, &sd->brightness);
+
+ sd->gamma = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_GAMMA, 0, 255, 1, 0x10);
+ sd->blue = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_BLUE_BALANCE, 0, 127, 1, 0x28);
+ sd->red = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_RED_BALANCE, 0, 127, 1, 0x28);
+ v4l2_ctrl_cluster(2, &sd->blue);
+
+ if (sd->sensor != SENSOR_OV9650 && sd->sensor != SENSOR_SOI968 &&
+     sd->sensor != SENSOR_OV7670 && sd->sensor != SENSOR_MT9M001) {
+ sd->hflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_HFLIP, 0, 1, 1, 0);
+ sd->vflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_VFLIP, 0, 1, 1, 0);
+ v4l2_ctrl_cluster(2, &sd->hflip);
+ }
+
+ if (sd->sensor != SENSOR_SOI968 && sd->sensor != SENSOR_MT9VPRB &&
+     sd->sensor != SENSOR_MT9M112 && sd->sensor != SENSOR_MT9M111)
+ sd->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_EXPOSURE, 0, 0x1780, 1, 0x33);
+
+ if (sd->sensor != SENSOR_MT9VPRB && sd->sensor != SENSOR_MT9M112 &&
+     sd->sensor != SENSOR_MT9M111) {
+ sd->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_GAIN, 0, 28, 1, 0);
+ sd->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
+ if (sd->sensor == SENSOR_SOI968)
+ /* this sensor doesn't have the exposure control and
+    autogain is clustered with gain instead. This works
+    because sd->exposure == NULL. */
+ v4l2_ctrl_auto_cluster(3, &sd->autogain, 0, false);
+ else
+ /* Otherwise autogain is clustered with exposure. */
+ v4l2_ctrl_auto_cluster(2, &sd->autogain, 0, false);
+ }
+
+ sd->jpegqual = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
+ V4L2_CID_JPEG_COMPRESSION_QUALITY, 50, 90, 1, 80);
+ if (hdl->error) {
+ pr_err("Could not initialize controls\n");
+ return hdl->error;
+ }
+ return 0;
+}
+
 static int sd_init(struct gspca_dev *gspca_dev)
 {
  struct sd *sd = (struct sd *) gspca_dev;
@@ -1978,7 +1903,6 @@  static int sd_init(struct gspca_dev *gspca_dev)
  pr_err("Unsupported sensor\n");
  gspca_dev->usb_err = -ENODEV;
  }
-
  return gspca_dev->usb_err;
 }
 
@@ -2096,7 +2020,7 @@  static int sd_start(struct gspca_dev *gspca_dev)
 
  jpeg_define(sd->jpeg_hdr, height, width,
  0x21);
- jpeg_set_qual(sd->jpeg_hdr, sd->ctrls[QUALITY].val);
+ jpeg_set_qual(sd->jpeg_hdr, v4l2_ctrl_g_ctrl(sd->jpegqual));
 
  if (mode & MODE_RAW)
  fmt = 0x2d;
@@ -2133,12 +2057,17 @@  static int sd_start(struct gspca_dev *gspca_dev)
  reg_w1(gspca_dev, 0x1189, scale);
  reg_w1(gspca_dev, 0x10e0, fmt);
 
- set_cmatrix(gspca_dev);
- set_gamma(gspca_dev);
- set_redblue(gspca_dev);
- set_gain(gspca_dev);
- set_exposure(gspca_dev);
- set_hvflip(gspca_dev);
+ set_cmatrix(gspca_dev, v4l2_ctrl_g_ctrl(sd->brightness),
+ v4l2_ctrl_g_ctrl(sd->contrast),
+ v4l2_ctrl_g_ctrl(sd->saturation),
+ v4l2_ctrl_g_ctrl(sd->hue));
+ set_gamma(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma));
+ set_redblue(gspca_dev, v4l2_ctrl_g_ctrl(sd->blue),
+ v4l2_ctrl_g_ctrl(sd->red));
+ set_gain(gspca_dev, v4l2_ctrl_g_ctrl(sd->gain));
+ set_exposure(gspca_dev, v4l2_ctrl_g_ctrl(sd->exposure));
+ set_hvflip(gspca_dev, v4l2_ctrl_g_ctrl(sd->hflip),
+ v4l2_ctrl_g_ctrl(sd->vflip));
 
  reg_w1(gspca_dev, 0x1007, 0x20);
  reg_w1(gspca_dev, 0x1061, 0x03);
@@ -2177,6 +2106,9 @@  static void sd_stop0(struct gspca_dev *gspca_dev)
 static void do_autoexposure(struct gspca_dev *gspca_dev, u16 avg_lum)
 {
  struct sd *sd = (struct sd *) gspca_dev;
+ s32 cur_exp = v4l2_ctrl_g_ctrl(sd->exposure);
+ s32 max = sd->exposure->maximum - sd->exposure_step;
+ s32 min = sd->exposure->minimum + sd->exposure_step;
  s16 new_exp;
 
  /*
@@ -2185,16 +2117,15 @@  static void do_autoexposure(struct gspca_dev *gspca_dev, u16 avg_lum)
  * and exposure steps
  */
  if (avg_lum < MIN_AVG_LUM) {
- if (sd->ctrls[EXPOSURE].val > 0x1770)
+ if (cur_exp > max)
  return;
 
- new_exp = sd->ctrls[EXPOSURE].val + sd->exposure_step;
- if (new_exp > 0x1770)
- new_exp = 0x1770;
- if (new_exp < 0x10)
- new_exp = 0x10;
- sd->ctrls[EXPOSURE].val = new_exp;
- set_exposure(gspca_dev);
+ new_exp = cur_exp + sd->exposure_step;
+ if (new_exp > max)
+ new_exp = max;
+ if (new_exp < min)
+ new_exp = min;
+ v4l2_ctrl_s_ctrl(sd->exposure, new_exp);
 
  sd->older_step = sd->old_step;
  sd->old_step = 1;
@@ -2205,15 +2136,14 @@  static void do_autoexposure(struct gspca_dev *gspca_dev, u16 avg_lum)
  sd->exposure_step += 2;
  }
  if (avg_lum > MAX_AVG_LUM) {
- if (sd->ctrls[EXPOSURE].val < 0x10)
+ if (cur_exp < min)
  return;
- new_exp = sd->ctrls[EXPOSURE].val - sd->exposure_step;
- if (new_exp > 0x1700)
- new_exp = 0x1770;
- if (new_exp < 0x10)
- new_exp = 0x10;
- sd->ctrls[EXPOSURE].val = new_exp;
- set_exposure(gspca_dev);
+ new_exp = cur_exp - sd->exposure_step;
+ if (new_exp > max)
+ new_exp = max;
+ if (new_exp < min)
+ new_exp = min;
+ v4l2_ctrl_s_ctrl(sd->exposure, new_exp);
  sd->older_step = sd->old_step;
  sd->old_step = 0;
 
@@ -2227,19 +2157,12 @@  static void do_autoexposure(struct gspca_dev *gspca_dev, u16 avg_lum)
 static void do_autogain(struct gspca_dev *gspca_dev, u16 avg_lum)
 {
  struct sd *sd = (struct sd *) gspca_dev;
+ s32 cur_gain = v4l2_ctrl_g_ctrl(sd->gain);
 
- if (avg_lum < MIN_AVG_LUM) {
- if (sd->ctrls[GAIN].val + 1 <= 28) {
- sd->ctrls[GAIN].val++;
- set_gain(gspca_dev);
- }
- }
- if (avg_lum > MAX_AVG_LUM) {
- if (sd->ctrls[GAIN].val > 0) {
- sd->ctrls[GAIN].val--;
- set_gain(gspca_dev);
- }
- }
+ if (avg_lum < MIN_AVG_LUM && cur_gain < sd->gain->maximum)
+ v4l2_ctrl_s_ctrl(sd->gain, cur_gain + 1);
+ if (avg_lum > MAX_AVG_LUM && cur_gain > sd->gain->minimum)
+ v4l2_ctrl_s_ctrl(sd->gain, cur_gain - 1);
 }
 
 static void sd_dqcallback(struct gspca_dev *gspca_dev)
@@ -2247,7 +2170,7 @@  static void sd_dqcallback(struct gspca_dev *gspca_dev)
  struct sd *sd = (struct sd *) gspca_dev;
  int avg_lum;
 
- if (!sd->ctrls[AUTOGAIN].val)
+ if (!v4l2_ctrl_g_ctrl(sd->autogain))
  return;
 
  avg_lum = atomic_read(&sd->avg_lum);
@@ -2263,10 +2186,11 @@  static void qual_upd(struct work_struct *work)
 {
  struct sd *sd = container_of(work, struct sd, work);
  struct gspca_dev *gspca_dev = &sd->gspca_dev;
+ s32 qual = v4l2_ctrl_g_ctrl(sd->jpegqual);
 
  mutex_lock(&gspca_dev->usb_lock);
- PDEBUG(D_STREAM, "qual_upd %d%%", sd->ctrls[QUALITY].val);
- set_quality(gspca_dev);
+ PDEBUG(D_STREAM, "qual_upd %d%%", qual);
+ set_quality(gspca_dev, qual);
  mutex_unlock(&gspca_dev->usb_lock);
 }
 
@@ -2315,14 +2239,18 @@  static void transfer_check(struct gspca_dev *gspca_dev,
  if (new_qual != 0) {
  sd->nchg += new_qual;
  if (sd->nchg < -6 || sd->nchg >= 12) {
+ /* Note: we are in interrupt context, so we can't
+    use v4l2_ctrl_g/s_ctrl here. Access the value
+    directly instead. */
+ s32 curqual = sd->jpegqual->cur.val;
  sd->nchg = 0;
- new_qual += sd->ctrls[QUALITY].val;
- if (new_qual < QUALITY_MIN)
- new_qual = QUALITY_MIN;
- else if (new_qual > QUALITY_MAX)
- new_qual = QUALITY_MAX;
- if (new_qual != sd->ctrls[QUALITY].val) {
- sd->ctrls[QUALITY].val = new_qual;
+ new_qual += curqual;
+ if (new_qual < sd->jpegqual->minimum)
+ new_qual = sd->jpegqual->minimum;
+ else if (new_qual > sd->jpegqual->maximum)
+ new_qual = sd->jpegqual->maximum;
+ if (new_qual != curqual) {
+ sd->jpegqual->cur.val = new_qual;
  queue_work(sd->work_thread, &sd->work);
  }
  }
@@ -2402,10 +2330,9 @@  static void sd_pkt_scan(struct gspca_dev *gspca_dev,
 /* sub-driver description */
 static const struct sd_desc sd_desc = {
  .name = KBUILD_MODNAME,
- .ctrls = sd_ctrls,
- .nctrls = ARRAY_SIZE(sd_ctrls),
  .config = sd_config,
  .init = sd_init,
+ .init_controls = sd_init_controls,
  .isoc_init = sd_isoc_init,
  .start = sd_start,
  .stopN = sd_stopN,

Надявам се са публикували пълните пачове. Та целия този код записваш във файл с произволно име (примерно opit.patch) След което
Код:
patch -p1 < opit.patch
make
sudo insmod ./sn9c20x.ko

И така докато реши да не дава съобщения за грешка.

От друга страна държа да кажа, че има значително по-лесен начин за разрешаване на проблема - нова камера. Желанието ти да го бориш докато тръгне е чудесно, но трябва да имаш представа защо го правиш: защото ти е интересно да го бориш, или защото искаш резултат. Ако е първото - вече си на верния път. Ако е второто - по-лесно ще е с някоя logitech, която работи.
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.

polaana

  • Напреднали
  • *****
  • Публикации: 61
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #41 -: Sep 18, 2012, 21:27 »
Истината е че ми е интересно :) Допреди няколко месеца за Линукс само бях чувала че е нещо супер сложно и само за хора много на "ти" с компютрите, но ми се наложи да пробвам един професионален софтуер който използваше Убунту и се оказа че ОС много ми допада и започнах да го ползвам за основна ОС. Сега пробвам и другите по-популярни дистрибуции, и съм много благодарна че има хора като теб които не жалят време и търпение за новобранци като мен. Извинявам се за оффтопика :)
За пача имам няколко въпроса:
 Има ли значение за кое ядро е?
Има ли значение къде ще запиша файла?
И това ли са командите ?
cp mikrodia/etc/tmp
cd mikrodia/etc/tmp
patch -p1 < opit.patch
make
sudo insmod ./sn9c20x.ko
Активен

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #42 -: Sep 18, 2012, 21:43 »
За пача имам няколко въпроса:
 Има ли значение за кое ядро е?
Има ли значение къде ще запиша файла?
И това ли са командите ?
cp mikrodia/etc/tmp
cd mikrodia/etc/tmp
patch -p1 < opit.patch
make
sudo insmod ./sn9c20x.ko


Пача в случая не е за ядро, а за модула microdia, така че версията на ядрото не играе. Да, има значение къде ще е записан. В смисъл трябва да подадеш верния файл в patch -p1 < opit.patch Може например така: patch -p1 < /home/username/directory/opit.patch с използване на пълния път, моят пример е с opit.patch в текущата директория. И последно с командите - много близо, но нека копирането не е в /etc:
Код:
cp -a ~/mikrodia /tmp
cd /tmp/microdia
# тук правиш пача в текущата директория с текстов редактор и записваш, напр gedit opit.patch (copy/paste, save, close)
patch -p1 < opit.patch
make
sudo insmod ./sn9c20x.ko
Понеже пачовете са два пробвай първо с единия, копирай наново директорията, после пробвай с другия, и накрая с двата. В смисъл проба е ако модулът се зарежда нормално да пробваш и скайп/чийз. Ако не ясно че правиш упражнението отново.

ПП офтопик и аз: кой професионален софтуер под Убунту и във връзка с какво ако не е тайна? Любопитен съм къде се използва линух като основна ОС.

ППП Ти да видиш! В моето чекмедже за всичко се въргаля една камера, която не работи и по репорт е ID 0c45:60af Microdia VideoCAM Look!! Другото което се оказа е, че в новото ми ядро поддръжката и е махната, а в старото я има, но не съм рестартирал в него да видя ще ли или не ще. (редакция - пробвах, но от първата проба не мина) Провери плийз има ли поддръжка в твоето ядро: grep -i sn9 /boot/config-2.6.32-42-generic - замести само номера на версията с твоята. Резултата при мен изглежда така:

Код:
grep -i sn9 /boot/config-2.6.32-42-generic
CONFIG_USB_GSPCA_SN9C20X=m
# CONFIG_USB_GSPCA_SN9C20X_EVDEV is not set
CONFIG_USB_SN9C102=m

ППП и в крайна сметка стигнах до тук: http://www.linux-projects.org/modules/mydownloads/viewcat.php?cid=2 - модул от април тази година. Май това ще е по-добрия начин от битката с пачовете. В крайна сметка очаква се всички правилни пачове да са включени в последната версия, а неправилните да не са. Аз лично ще пробвам утре какъв ще е ефекта.

« Последна редакция: Sep 19, 2012, 05:44 от dejuren »
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.

polaana

  • Напреднали
  • *****
  • Публикации: 61
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #43 -: Sep 21, 2012, 20:55 »
Извинявам се, но нямах време да влизам тези дни. Свалих файла от последния линк, но не успях да разбера обеснянията в инфо файла как да го инсталирам, Пачовете ще опитам утре да ги мъча ако ми остане време.

ПП http://vladster.net/bg/downloads.aspx?os=linux , ей това беше първия  ми досег с Линукс :)
Активен

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Re: Проблем след инсталация на ново ядро
« Отговор #44 -: Sep 21, 2012, 23:03 »
А, нищо страшно, и аз също... малко прогрес от днес, в графата "липсата на резултат си е резултат". Компилацията на модула който посочих последен се проваля. В смисъл проваля се дори след като започна да се ровичкам в кода, за да сменя пътя до някой некоректно насочени хедър файлове. Гадта (кодът) включва асемблер хедъри, които някога са станали архитектурно зависими в ubuntu-headers пакета, и оттам се променят пътя на три хедър файла. Накрая ми писна и не съм се занимавал да променя пътя на всички три съответно архитектурата, надявах се два от тях да работят и generic.

Което е малко по-любопитно е, че текущото ми ядро включва модул за камерата:

Код:
dpkg -L linux-image-3.2.0-31-generic | grep sn9c102
/lib/modules/3.2.0-31-generic/kernel/drivers/media/video/sn9c102
/lib/modules/3.2.0-31-generic/kernel/drivers/media/video/sn9c102/sn9c102.ko

С други думи (поне теоретично) тя трябва да работи без компилации. Не съм тествал, камерата е в къщи, но ще видим като се прибера - имам същия комп и инсталация и у дома.
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.