DVB-T und Linux

Started by bdn, 14. Aug 2009, 23:18

previous topic - next topic
Go Down

bdn

Hallo,

von Hoernchen:
Quote

... und schwupps is das DVB-T-Bild da.

Leider noch nicht :(

Ich öffne hier ein neues Thread um alles was bekannt ist zu sammeln.


Hardware kann mann in wiki nachschlagen: http://www.t-hack.com/wiki/index.php/X300t_tuner.
Seid Kernel 2.6.27 (Kernel log http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.27, suche nach "drx") gibt es theoretisch Support für Micronas DRX3575D demodulator. Ich habe brutal entsprechende Dateien samt Kconfig ins linux-2.6.15 reingebastelt (nur drivers/media/dvb/frontends/ tree) aber natürlich mit kompilieren klappt es nicht:

Code: [Select]

CC [M]  drivers/media/dvb/frontends/drx397xD.o
In file included from drivers/media/dvb/frontends/drx397xD.c:81:
drivers/media/dvb/frontends/drx397xD_fw.h:21: warning: implicit declaration of function `__RW_LOCK_UNLOCKED'
drivers/media/dvb/frontends/drx397xD_fw.h:21: warning: missing braces around initializer
drivers/media/dvb/frontends/drx397xD_fw.h:21: warning: (near initialization for `fw[0].lock')
drivers/media/dvb/frontends/drx397xD_fw.h:21: warning: excess elements in struct initializer
drivers/media/dvb/frontends/drx397xD_fw.h:21: warning: (near initialization for `fw[0].lock.raw_lock')
drivers/media/dvb/frontends/drx397xD_fw.h:22: warning: excess elements in struct initializer
drivers/media/dvb/frontends/drx397xD_fw.h:22: warning: (near initialization for `fw[1].lock.raw_lock')
drivers/media/dvb/frontends/drx397xD.c: In function `PLL_Set':
drivers/media/dvb/frontends/drx397xD.c:309: error: request for member `tuner_ops' in something not a structure or union
drivers/media/dvb/frontends/drx397xD.c:310: error: request for member `tuner_ops' in something not a structure or union
drivers/media/dvb/frontends/drx397xD.c:314: error: request for member `tuner_ops' in something not a structure or union
drivers/media/dvb/frontends/drx397xD.c:315: error: request for member `tuner_ops' in something not a structure or union
drivers/media/dvb/frontends/drx397xD.c:318: error: request for member `tuner_ops' in something not a structure or union
drivers/media/dvb/frontends/drx397xD.c:322: error: request for member `tuner_ops' in something not a structure or union
drivers/media/dvb/frontends/drx397xD.c: In function `drx_tune':
drivers/media/dvb/frontends/drx397xD.c:1031: warning: implicit declaration of function `div64_u64'
make[4]: *** [drivers/media/dvb/frontends/drx397xD.o] Error 1
make[3]: *** [drivers/media/dvb/frontends] Error 2
make[2]: *** [drivers/media/dvb] Error 2
make[1]: *** [drivers/media] Error 2
make: *** [drivers] Error


Muss wohl mehr reingebastelt werden :(.
Ist es überhaupt eine Option?

Um es noch schlimmer zu machen der Treiber braucht Firmware die nirgendwo zu finden ist.

In WCE-Umgebung der Driver für DVB-T ist vorhanden: laut mce222 (http://www.t-hack.com/forum/index.php?topic=26.msg138#msg138 KmmDev.dll. Vielleicht lässt sich davon Firmware für drx3975 gewinnen? Kennt sich da jemand aus?

@Hoernchen
Quote

dann der Demuxengine (via simplem Kommandozeilenparameter) sagen das sie ihre Daten vom Tuner holen soll

wie könnte so ein Kommandozeilenparameter unter linux/mrua aussehen? ein Beispiel?

Hiermit ist jeder eingeladen sein Wissen zu teilen.

b

Hoernchen

Ja, die Firmware kann man extrahieren, es sind sogar 2 Versionen enthalten. Bedauerlicherweise ist der Chip mehr als komplex, denn die Ausgänge können nicht nur sowohl parallel als auch seriell konfiguriert werden sondern afaik können auch Pins getauscht werden, man müsste also mal die Konfiguration die WinCE da vornimmt mitsniffen. Was die Linuxteiber angeht, keine Ahnung was da momentan sache ist, es gab mal ein em28xx-new das Treiber für den drx enthielt, aber der Maintainer war mehr so ein unbeliebter Penner (wohl nicht so ganz grundlos..) weswegen der Kram nie in den Linuxkernel einzug fand, und nun hat er seit dem Micronas im frühjahr den drx-kram verkauft hat gründlich seinen Code samt history von http://mcentral.de/hg/~mrec/em28xx-new entfernt.

Mit mrua würde das mit play_psfdemux und dann
Code: [Select]
-spi index: select paralel SPI and index=[0],1
-ssi index: select serial SPI and index=[0],1,2

gehen.
bringer of linux, conqueror of hdmi, jack of all trades.

bdn

OK, ich habe jetzt linux-2.6.22.19 von Sigma mit eingefügten drx3975d treiber der cross-compiler schluckt  :).
Bleibt nur(sic!) Tango kram :(. Ein Versuch 2.6.15 patch-Vorgang an 2.6.22.19 anzuwenden schlug natürlich fehl.

Bleibt nur harte Arbeit.
Oder sind  inzwischen  patches für 2.6.22 aufgetaucht?

ballio

Hallo,
ich kenn mich leider nicht gut genug damit aus aber vielleicht hilft das?:
http://aur.archlinux.org/packages.php?ID=26418
http://www.mathematik.uni-marburg.de/~kosslerj/em28xx-new/

bdn

leider em28xx-new hilft nicht, weil alle source-files drx3975d-betreffend sind nicht dabei :(.  Alles was ich da gefunden habe ist Bemerkung in README und nackte Makefile in  /em28xx-new/ubuntu/drx3973d/

@ballo: danke trotzdem.

Hoernchen

Vom 25.01.2009
bringer of linux, conqueror of hdmi, jack of all trades.

bdn

hmm... thanks... jetzt wird es dauern...

bdn

Hi,

na ja, dank Unterstützung  :) der 2.6.22.19 bootet:

Code: [Select]
xenv cs2 ok
power supply: ok
dram0 ok (8)
dram1 ok (8)xenv cs2 ok
power supply: ok
dram0 ok (8)
dram1 ok (8)
zboot (0) ok
SIGNED BL

Microsoft IPTV Bootloader, Build (1051)
Built by BM-DELL-167, Sep 11 2006 16:54:12
>
**********************************
* SMP863x zboot start ...
* Version: 2.2.0-2.7.167.0
* Started at 0x91000000.
* Configurations (chip revision: 6):
*    Use 8KB DRAM as stack.
*    Support XLoad format.
*    Enabled BIST mode.
*    Enabled memory test mode.
*    Use internal memory for stage0/1.
**********************************
Boot from flash (0x48000000) mapped to 0xac000000.
Found XENV block at 0xac000000.
CPU clock frequency: 297.00MHz.
System clock frequency: 198.00MHz.
DRAM0 dunit_cfg/delay0_ctrl (0xe34111ba/0x000a6564).
DRAM1 dunit_cfg/delay0_ctrl (0xe34111ba/0x000a6565).
Using UART port 0 as console.
Board ID.: "KMM3210-TG-A"
Chip Revision: 0x8634:0x82 .. Mismatched.
Setting up H/W from XENV block at 0xac000000.
  Setting <SYSCLK premux> to 0x00000603.
  Setting <SYSCLK avclk_mux> to 0x00000000.
  Setting <SYSCLK hostclk_mux> to 0x00000100.
  Setting <IRQ rise edge trigger lo> to 0xff28ca00.
  Setting <IRQ fall edge trigger lo> to 0x0000c000.
  Setting <IRQ rise edge trigger hi> to 0x000001ff.
  Setting <IRQ fall edge trigger hi> to 0x00000000.
  Setting <IRQ GPIO map> to 0x0d090800.
  Setting <PB default timing> to 0x01090008.
  Setting <PB timing0> to 0x01090008.
  Setting <PB Use timing0> to 0x000003fc.
  Setting <PB timing1> to 0x00110101.
  Setting <PB Use timing1> to 0x000003f3.
  PB cs config: 0x000c10c0 (use 0x000c10c0)
  Enabled Devices: 0x00023efe
    BM/IDE PCIHost Ethernet IR FIP I2CM I2CS USB PCIDev1 PCIDev2 PCIDev3 PCIDev4 SCARD
  MAC: 00:0b:ab:c6:ab:cc
  PCI IRQ routing:
    IDSEL 1: INTA(#14) INTB(#14) INTC(#14) INTD(#14)
    IDSEL 2: INTA(#14) INTB(#14) INTC(#14) INTD(#14)
    IDSEL 3: INTA(#14) INTB(#14) INTC(#14) INTD(#14)
    IDSEL 4: INTA(#15) INTB(#15) INTC(#15) INTD(#15)
  Smartcard pin assignments:
    OFF pin = 0
    5V pin = 1
    CMD pin = 2
  Setting up Clean Divider 2 to 96000000Hz.
  Setting up Clean Divider 4 to 33333333Hz.
  GPIO dir/data = 0x00000000/0x00000000
  UART0 GPIO mode/dir/data = 0x6e/0x00/0x00
  UART1 GPIO mode/dir/data = 0x6e/0x00/0x00
XENV block processing completed.
Found existing memcfg: DRAM0(0x04000000), DRAM1(0x04000000)
Heap/Temp/Temp1/Dest start at 0x12400000/0x11800000/0x11e00000/0x13000000.
Default boot index: 0
processing zboot record at 0xac000000 (0xac000000) .. index 0Scanning ROMFS image at 0x90800000.. no romfs found.
  Execute final at 0x90020000 ..
Linux version 2.6.22.19-sigma (bdn@ubuntu) (gcc version 3.4.2) #71 Mon Aug 24 23:25:39 CEST 2009
<4>Configured for SMP863x (revision ES6+/RevA+), detected SMP8634 (revision ES7/RevB).
<4>Detected CPU/System/DSP Frequencies: 297.00/198.00/297.00MHz
Configured for SMP863x (revision ES6+/RevA+), detected SMP8634 (revision ES7/RevB).
<4>Detected CPU/System/DSP Frequencies: 297.00/198.00/297.00MHz
Detected CPU/System/DSP Frequencies: 297.00/198.00/297.00MHz
prom console registered
SMP86xx Enabled Devices under Linux/XENV 0x48000000 = 0x00023efe
BM/IDE PCIHost Ethernet IR FIP I2CM I2CS USB PCIDev1 PCIDev2 PCIDev3 PCIDev4 SCARD
Valid MEMCFG found at 0x10000fc0.
CPU revision is: 00019068
Determined physical RAM map:
memory: 07fe0000 @ 10020000 (usable)
User-defined physical RAM map:
memory: 01fe0000 @ 10020000 (usable)
Wasting 2098176 bytes for tracking 65568 unused pages
On node 0 totalpages: 73728
  DMA zone: 576 pages used for memmap
  DMA zone: 0 pages reserved
  DMA zone: 73152 pages, LIFO batch:15
  Normal zone: 0 pages used for memmap
Built 1 zonelists.  Total pages: 73152
Kernel command line: console=ttyS0,115200n8 mem=32M root=/dev/nfs rw nfsroot=192.168.2.100:/home/bdn/rootfs ip=192.168.2.222:192.168.2.100:192.168.2.1:255.255.255.0:x300t:eth0
Primary instruction cache 16kB, physically tagged, 2-way, linesize 16 bytes.
Primary data cache 16kB, 2-way, linesize 16 bytes.
Synthesized TLB refill handler (20 instructions).
Synthesized TLB load handler fastpath (32 instructions).
Synthesized TLB store handler fastpath (32 instructions).
Synthesized TLB modify handler fastpath (31 instructions).
PID hash table entries: 2048 (order: 11, 8192 bytes)
Using 148.500 MHz high precision timer.
console handover: boot [prom0] -> real [ttyS0]
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 25984k/32640k available (3040k kernel code, 6588k reserved, 523k data, 144k init, 0k highmem)
Calibrating delay loop... 295.93 BogoMIPS (lpj=591872)
Mount-cache hash table entries: 512
NET: Registered protocol family 16
tangox: creating TLB mapping for 0x20000000 at 0xc0000000, size 0x04000000.
PCI: Initializing SMP86xx PCI host controller
PCI: Remapped PCI I/O space 0x58000000 to 0xc4020000, size 64 kB
PCI: Remapped PCI config space 0x50000000 to 0xc4004000, size 10 kB
PCI: Configured SMP86xx as PCI slave with 128MB PCI memory
PCI: Region size is 16384KB
PCI: Map DMA memory 0x10020000-0x12000000 for PCI at 0x11000000
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
Time: MIPS clocksource has been installed.
NET: Registered protocol family 2
IP route cache hash table entries: 4096 (order: 2, 16384 bytes)
TCP established hash table entries: 16384 (order: 5, 131072 bytes)
TCP bind hash table entries: 16384 (order: 4, 65536 bytes)
TCP: Hash tables configured (established 16384 bind 16384)
TCP reno registered
Tango2 frequency scaling module installed.
Created /proc/cpucache_info entry.
NTFS driver 2.1.28 [Flags: R/W].
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
SMP86xx ir (254:0): driver loaded (wait_period = 25ms, buffer_size = 6)
SMP86xx fip (253:0): driver loaded (buffer_size = 2)
Software Watchdog Timer: 0.07 initialized. soft_noboot=0 soft_margin=60 sec (nowayout= 0)
Serial: 8250/16550 driver $Revision: 1.90 $ 2 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0x0 (irq = 9) is a 16550A
loop: module loaded
nbd: registered device at major 43
tango2_enet: ethernet driver for SMP863x internal mac
tango2_enet: detected phy at address 0x01
tango2_enet: mac address 00:0b:ab:c6:ab:cc
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 50MHz system bus speed for PIO modes; override with idebus=xx
ide0: SMP86xx Bus Mastering IDE controller
Probing IDE interface ide0...
hda: SAMSUNG SP0842N, ATA DISK drive
hda: no 80 conductors cable, falling back to lower udma mode
hda: selected mode 0x42
hda: set to Ultra DMA mode 2
ide0: DMA enabled for ATA DISK hda
ide0 at 0x223c0-0x223c7,0x22398 on irq 26
hda: max request size: 128KiB
hda: 156301488 sectors (80026 MB) w/2048KiB Cache, CHS=16383/255/63, UDMA(33)
hda: cache flushes supported
hda: hda1 hda2
physmap flash device CS2: 0x400000 at 0x48000000
CS2: Physically mapped flash: Found 1 x16 devices at 0x0 in 16-bit bank
CS2: Physically mapped flash: Found an alias at 0x100000 for the chip at 0x0
CS2: Physically mapped flash: Found an alias at 0x200000 for the chip at 0x0
CS2: Physically mapped flash: Found an alias at 0x300000 for the chip at 0x0
Amd/Fujitsu Extended Query Table at 0x0040
CS2: Physically mapped flash: CFI does not contain boot bank location. Assuming top.
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
CS2: flash size mismatched, re-do probing/initialization.
physmap flash device CS2: 0x100000 at 0x48000000 (remapped 0xc4080000)
CS2: Physically mapped flash: Found 1 x16 devices at 0x0 in 16-bit bank
Amd/Fujitsu Extended Query Table at 0x0040
CS2: Physically mapped flash: CFI does not contain boot bank location. Assuming top.
number of CFI chips: 1
cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
Using physmap partition definition
Adding partition #1-#3
Creating 3 MTD partitions on "CS2: Physically mapped flash":
0x00000000-0x00008000 : "CS2-Part1"
0x00008000-0x000f0000 : "CS2-Part2"
mtd: partition "CS2-Part2" doesn't start on an erase block boundary -- force read-only
0x000f0000-0x00100000 : "CS2-Part3"
driver tangox-ehci-hcd, 10 Dec 2004
TangoX USB initializing...
tangox-ehci-hcd tangox-ehci-hcd: TangoX USB 2.0
tangox-ehci-hcd tangox-ehci-hcd: new USB bus registered, assigned bus number 1
tangox-ehci-hcd tangox-ehci-hcd: irq 48, io mem 0xa0021400
tangox-ehci-hcd tangox-ehci-hcd: USB 0.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
tangox-ohci-hcd: 2006 August 04 USB 1.1 'Open' Host Controller (OHCI) Driver
TangoX USB was initialized.
Initializing TangoX USB OHCI Controller Polling mode, Membase=0xa0021500 Status=0x0
tangox-ohci-hcd tangox-ohci-hcd: USB Host Controller
tangox-ohci-hcd tangox-ohci-hcd: new USB bus registered, assigned bus number 2
tangox-ohci-hcd tangox-ohci-hcd: io mem 0xa0021500
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
TCP cubic registered
Initializing XFRM netlink socket
NET: Registered protocol family 1
NET: Registered protocol family 17
NET: Registered protocol family 33
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
IP-Config: Complete:
      device=eth0, addr=192.168.2.222, mask=255.255.255.0, gw=192.168.2.1,
     host=x300t, domain=, nis-domain=(none),
     bootserver=192.168.2.100, rootserver=192.168.2.100, rootpath=
Looking up port of RPC 100003/2 on 192.168.2.100
Looking up port of RPC 100005/1 on 192.168.2.100
VFS: Mounted root (nfs filesystem).
Freeing unused kernel memory: 144k freed
Initializing random number generator... done.
Starting network...

Sigma Designs SMP863x development environment (based on the buildroot project)
uclibc login: root
uclibc[~]$ modprobe drx397xD
Using /lib/modules/2.6.22.19-sigma/kernel/drivers/media/dvb/frontends/drx397xD.ko
uclibc[~]$ lsmod
Module                  Size  Used by    Not tainted
drx397xD 13856 0 - Live 0xc401b000
uclibc[~]$


und das ist vorläufig alles...
natürlich (wie denn sonst :() mrua mag es nicht...
bitte Experten um Kommentare.

Hoernchen

Naja, das mrua ist alt, daher musst du mal beim zum mrua passenden Kernel schauen was alles anders ist und das für den neuen Kernel anpassen.
bringer of linux, conqueror of hdmi, jack of all trades.

bdn

:)
mrua spricht wieder.
ich habe krua.c modifiziert und llad brutal von mrua 2.8.0.1 übernommen und es scheint unter 2.6.22.19 zu funktionieren, zumindest mono spielt mp3/avi/vob ohne zu meckern.

framebuffer modul will noch nicht: vorerst auf die seite gelegt.

drx module lassen sich kompilieren (mit warnungen) und insert'en aber sprechen nicht: ich bekomme keine printk ausgaben.
muss wohl am mein kern liegen aber ich finde entsprechende loging config entry nicht :(. Ein tipp von linux-experten?




Hoernchen

Spiuel mal mit /proc/sys/kernel/printk herum, und schau mal ob der kram nicht doch irgendwo in /var/log/* gelandet ist.
bringer of linux, conqueror of hdmi, jack of all trades.

heini66

mahlzeit!
bin neu im land des pingiun auf der x300
im aktuellen 2.6.32.2 gibts:
Code: [Select]

heini66@mini-tux:/usr/src/linux-2.6.31.2/drivers/media/dvb/frontends$ ls drx*.*
drx397xD.c  drx397xD_fw.h  drx397xD.h

wie sehen die experten die chance, nen aktuellen kernel auf der kiste zu booten?

Hoernchen

Eher schlecht, nicht weil es unmöglich ist, sondern weil vermutlich keiner ein so gutes Verständnis des Kernels und die Zeit hat um die Sigmapatches zu verstehen und auf einen so viel neueren Kernel zu portieren.
bringer of linux, conqueror of hdmi, jack of all trades.

bdn

#13
07. Mar 2010, 00:53 Last Edit: 11. Mar 2010, 22:43 by bdn
@heini66 und alle andere interessierten
drx397xD treiber sind seid 2.6.27 im Kernel - allerdings ohne Firmware. Der 2.6.22.19 Kernel ist ausreichend nahe dran das die Treiber compilieren.
Das bringt natürlich nichts.
so wie ich das verstehe es  fehlt:
i2c driver
tuner driver(?)
EDIT: tuner (TUA 6034) ist eigentlich keine unbekannte für Linux (siehe .../linux-2.6.22.19/drivers/media/dvb/frontends/dvb-pll.c

wenn es um Firmware geht es gibt Hoffnung:
http://www.kernellabs.com/blog/?p=761
http://www.kernellabs.com/blog/?p=1397

da ich von Beruf her was ganz anders (intensiv) mache habe ich recht wenig Zeit diese notwendige Berg von Wissen zu verdauen und umzusetzen.
ich habe mit mrua i2c test gespielt aber schlau wurde ich nicht.
bei anderen smp8634 Linux Boxen habe ich i2c Treiber gesehen. gibt es Source?
kann jemand Zusammenspiel zwischen tuner und drx307xD demodulator erklären (für einen Einsteiger)?

mce2222

die i2c treiber für den smp sind ganz normal in den kernel sourcen mit dabei

Go Up