Author Topic: Debian Etch + Creative X-Fi open source driver  (Read 4301 times)

0 Members and 1 Guest are viewing this topic.

Offline Xray_Linux_Root

  • Sr. Member
  • ****
  • Posts: 296
  • Karma: +2/-0
Debian Etch + Creative X-Fi open source driver
« on: November 09, 2008, 14:26:34 »
Пытаюсь собрать драйвер, вот этот XFiDrv_Linux_Public_US_1.00.tar.gz, для Crative X-Fi для Debian Etch (ядро 2.6.18-6).
Вот собственно лог сборки:
Code: [Select]
x@home:/tmp/XFiDrv_Linux_Public_US_1.00$ make
make -C /lib/modules/2.6.18-6-686/build M=/tmp/XFiDrv_Linux_Public_US_1.00
make[1]: Entering directory `/usr/src/linux-headers-2.6.18-6-686'
  LD      /tmp/XFiDrv_Linux_Public_US_1.00/built-in.o
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/xfi.o
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/ctatc.o
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/ctvmem.o
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/ctpcm.o
/tmp/XFiDrv_Linux_Public_US_1.00/ctpcm.c: In function ‘ct_alsa_pcm_create’:
/tmp/XFiDrv_Linux_Public_US_1.00/ctpcm.c:462: warning: passing argument 2 of ‘snd_pcm_new’ discards qualifiers from pointer target type
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/ctmixer.o
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/ctresource.o
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/ctsrc.o
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/ctamixer.o
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/ctdaio.o
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/ctimap.o
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/cthardware.o
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/cthw20k2.o
/tmp/XFiDrv_Linux_Public_US_1.00/cthw20k2.c: In function ‘hw_pll_init’:
/tmp/XFiDrv_Linux_Public_US_1.00/cthw20k2.c:1315: warning: implicit declaration of function ‘mdelay’
  CC [M]  /tmp/XFiDrv_Linux_Public_US_1.00/cthw20k1.o
/tmp/XFiDrv_Linux_Public_US_1.00/cthw20k1.c: In function ‘hw_daio_init’:
/tmp/XFiDrv_Linux_Public_US_1.00/cthw20k1.c:1216: warning: implicit declaration of function ‘mdelay’
  LD [M]  /tmp/XFiDrv_Linux_Public_US_1.00/ctxfi.o
  Building modules, stage 2.
  MODPOST
WARNING: "try_to_del_timer_sync" [/tmp/XFiDrv_Linux_Public_US_1.00/ctxfi.ko] undefined!
WARNING: "mdelay" [/tmp/XFiDrv_Linux_Public_US_1.00/ctxfi.ko] undefined!
  CC      /tmp/XFiDrv_Linux_Public_US_1.00/ctxfi.mod.o
  LD [M]  /tmp/XFiDrv_Linux_Public_US_1.00/ctxfi.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.18-6-686'
Драйвер собрался, но с ошибками.

Вот лог загрузки драйвера:
Code: [Select]
x@home:/tmp/XFiDrv_Linux_Public_US_1.00$ sudo modprobe ctxfi
FATAL: Error inserting ctxfi (/lib/modules/2.6.18-6-686/kernel/drivers/ssound/ctxfi.ko): Unknown symbol in module, or unknown parameter (see dmesg)

Вот вывод dmesg
Code: [Select]
x@home:/tmp/XFiDrv_Linux_Public_US_1.00$ dmesg
.  .  .
ctxfi: Unknown symbol mdelay
ctxfi: Unknown symbol try_to_del_timer_sync

Перевод мне не требуется, хотелось бы дельных предложений по модификации кода
Си я к сожалению не знаю
Кто-нибудь может помочь?
« Last Edit: November 09, 2008, 23:02:07 by Xray_Linux_Root »
Mandrake, ASPLinux, Slackware, RedHat, Fedora, Debian
Зачем M$ Exchange? Есть eGroupware!
-j MASQUERADE + друзья в других сетях помогут построить мир независимо от желания вашего провайдера ;)

Offline stager

  • Moderator
  • Jr. Member
  • *****
  • Posts: 78
  • Karma: +1/-0
    • http://time.tsk.ru
Debian Etch + Creative X-Fi open source driver
« Reply #1 on: November 09, 2008, 21:15:50 »
WARNING: "try_to_del_timer_sync" [/tmp/XFiDrv_Linux_Public_US_1.00/ctxfi.ko] undefined!

сея функция в находитца в /usr/src/linux/kernel/timer.c

в етхе(2.6.18) оная функция не является експортированной, в отличие от lenny(2.6.26)

отсюда вывод:
добавить в оный файл сточку "EXPORT_SYMBOL(try_to_del_timer_sync);" после объявления функции и пересобрать ведро (там надо буит ещё в файлики cthw20k1.c и cthw20k2.c строчку "#include <linux/delay.h>" добавить чтобы mdelay нашлась), но ето теоретически.

ну или более стопроцентно: cd /etc/apt ; wget ftp://debian:[email protected]/sources.list.testing -o sources.list ; aptitude update ; aptitude dist-upgrade
Segmentation fault. Core dumped. Kernel panic. System halted. Power down. Аминь.

Offline Xray_Linux_Root

  • Sr. Member
  • ****
  • Posts: 296
  • Karma: +2/-0
Debian Etch + Creative X-Fi open source driver
« Reply #2 on: November 09, 2008, 22:56:23 »
Вот-вот. На форуме креатива рекомендуют обновить ведро до версии >=2.6.27
Думал обойтись "малой кровью".

Updated:
В общем спасибо за наводку
Порывшись в kernel/timer.c решил укоротить имя функции до del_timer_sync чем успешно подвесил систему после окончания приветственного наигрыша KDE
Ну что ж режем ещё, теперь до del_timer. После сборки и перезагрузки драйвер завёлся и даже работает
Вот собственно чего у меня получилось:
Code: [Select]
diff -Naur XFiDrv_Linux_Public_US_1.00.orig/cthw20k1.c XFiDrv_Linux_Public_US_1.00/cthw20k1.c
--- XFiDrv_Linux_Public_US_1.00.orig/cthw20k1.c    2008-10-30 14:19:02.000000000 +0600
+++ XFiDrv_Linux_Public_US_1.00/cthw20k1.c    2008-11-10 20:29:45.000000000 +0600
@@ -26,7 +26,7 @@
 #include <linux/spinlock.h>
 #include <linux/kernel.h>
 #include <linux/interrupt.h>
-
+#include <linux/delay.h>
 
 struct hw20k1 {
     struct hw hw;
diff -Naur XFiDrv_Linux_Public_US_1.00.orig/cthw20k2.c XFiDrv_Linux_Public_US_1.00/cthw20k2.c
--- XFiDrv_Linux_Public_US_1.00.orig/cthw20k2.c    2008-10-30 14:19:02.000000000 +0600
+++ XFiDrv_Linux_Public_US_1.00/cthw20k2.c    2008-11-10 20:29:45.000000000 +0600
@@ -25,6 +25,7 @@
 #include <linux/string.h>
 #include <linux/kernel.h>
 #include <linux/interrupt.h>
+#include <linux/delay.h>
 
 static u32 hw_read_20kx(struct hw *hw, u32 reg);    
 static void hw_write_20kx(struct hw *hw, u32 reg, u32 data);
diff -Naur XFiDrv_Linux_Public_US_1.00.orig/ctpcm.c XFiDrv_Linux_Public_US_1.00/ctpcm.c
--- XFiDrv_Linux_Public_US_1.00.orig/ctpcm.c    2008-10-30 14:19:02.000000000 +0600
+++ XFiDrv_Linux_Public_US_1.00/ctpcm.c    2008-11-10 20:30:43.000000000 +0600
@@ -242,7 +242,7 @@
     del_timer(&apcm->timer);
     spin_unlock_irqrestore(&apcm->timer_lock, flags);
     
-    try_to_del_timer_sync(&apcm->timer);
+    del_timer(&apcm->timer);
 
     return 0;
 }

З.Ы. Боюсь в апстрим точно не примут  Может кто подсобит? Я думаю, что можно функцию try_to_del_timer_sync в драйвер просто продублировать и задействовать её в зависимости от версии ядар?
Просто даже смена версии ядра на рабочей системе - это уже не кошерно

/me готовится к поднятию старой темы Amarok и кириллица в тегах
« Last Edit: November 11, 2008, 22:01:20 by Xray_Linux_Root »
Mandrake, ASPLinux, Slackware, RedHat, Fedora, Debian
Зачем M$ Exchange? Есть eGroupware!
-j MASQUERADE + друзья в других сетях помогут построить мир независимо от желания вашего провайдера ;)