irexec wird zum Zombie

Nachricht
Autor
inixlinux

irexec wird zum Zombie

#1 Beitrag von inixlinux » 03. Mär 2010 17:40

Hallo,

ich habe mir auf meinem OpenSuse 11.2 System einen Medion X10 Infrarotempfänger eingerichtet.

Dies funktioniert auch soweit, wenn ich irw aufrufe.
Will ich aber andere Programme mithilfe von irexec steuern funktioniert dies anfangs, nach einer kurzen Zeit jedoch wird mir im Systemmonitor der zum irexec zugehörige lircd Prozess als Zombie angezeigt und es ist keine Eingabe mit der Infrarotfernbedinung mehr möglich.

Aufgrund eines Bugs im Kernel 2.6.31.12 verwende ich das Modul atilibusb.

Bei der Verwendung von OpenSuse 11.1 funktioniert alles problemlos.

Jemand eine Idee?

Danke & Gruß

inixlinux

Benutzeravatar
Janka
Beiträge: 3580
Registriert: 11. Feb 2006 19:10

#2 Beitrag von Janka » 03. Mär 2010 18:35

Der lircd ist deshalb ein Zombie, weil der ihn aufrufende Prozess zwar noch läuft, aber noch nicht wait() oder waitpid() aufgerufen hat, um den Exitstatus abzufragen. Denn der lircd-Prozess wurde beendet.

Vermutlich sind das zwei unabhängige Fehler. Beende den Prozess, der den Zombie-lircd aufrief (kriegst du mit "pstree" raus). Danach startest du den lircd mit der Option -n von Hand. Dann geht er nämlich nicht in den Daemon-Mous und du bekommst die Fehler auf das Terminal, in dem du ihn gestartet hast.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

inixlinux

#3 Beitrag von inixlinux » 03. Mär 2010 23:16

Rufe ich lircd -n auf erhalte ich beim starten von irexec diese Ausgabe auf der Konsole:

lircd-0.8.5[5223]: lircd(default) ready
lircd-0.8.5[5223]: accepted new client on /var/run/lirc/lircd
lircd-0.8.5[5223]: could not get file information for /dev/lirc
lircd-0.8.5[5223]: default_init(): No such file or directory
lircd-0.8.5[5223]: Failed to initialize hardware
lircd-0.8.5[5223]: removed client

Jedoch scheint es so als würde beim Aufruf lircd -n etwas anderes passieren wie wenn ich nur lircd aufrufe, da beim Aufruf von lircd kurzzeitig die Eingabe funktioniert, beim Aufruf von lircd -n funktioniert jedoch gar nichts.

inixlinux

#4 Beitrag von inixlinux » 10. Mär 2010 16:14

hat niemand eine Idee bzw. weis jemand wann für OpenSuse 11.2 ein Kernel-update mit dem aktuellen Kernel herauskommt, da es wohl so scheint als ob der Bug mit lirc im aktuellen Kernel behoben ist.

Benutzeravatar
Janka
Beiträge: 3580
Registriert: 11. Feb 2006 19:10

#5 Beitrag von Janka » 11. Mär 2010 9:25

Du kannst dir doch einfach einen aktuellen Kernel mit deiner jetzigen Konfiguration kompilieren.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

inixlinux

#6 Beitrag von inixlinux » 11. Mär 2010 19:00

kann es dabei nicht passieren, dass irgendwelche besonderheiten von OpenSuse nicht mehr funktionieren?

Benutzeravatar
Janka
Beiträge: 3580
Registriert: 11. Feb 2006 19:10

#7 Beitrag von Janka » 11. Mär 2010 22:52

inixlinux hat geschrieben:kann es dabei nicht passieren, dass irgendwelche besonderheiten von OpenSuse nicht mehr funktionieren?
Unwahrscheinlich. Ich nutze jedenfalls schon ewig Vanilla-Kernels und habe so was noch nicht erlebt. Wichtig ist nur, dass du die Kernel-Konfiguration deines jetzt gerade laufenden Kernels als Basis benutzt. Also vor dem Kompilieren einmal im Kernelquellverzeichnis:

Code: Alles auswählen

$ zcat /proc/config.gz >.config
$ make menuconfig
...
Und nach dem Installieren des Kernels nicht vergessen, die Module auch zu installieren und dann mit "mkinitrd" auch die initrds neu zu bauen. Vergisst du das, kannst du nicht booten.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

inixlinux

#8 Beitrag von inixlinux » 13. Mär 2010 11:31

habe nun den kernel 2.6.33 installiert, und libusb 0.8.6 selbst kompiliert, jedoch werden beim kompilieren die kernel-sources des alten Kernels 2.6.31.12-0.1 verwendet.

Die Ausgabe von modinfo lirc_dev

Code: Alles auswählen

filename:       /lib/modules/2.6.33-0.1-pae/misc/lirc_dev.ko
alias:          char-major-61-*
license:        GPL
author:         Artur Lipowski
description:    LIRC base driver module
srcversion:     9AE4030D4032A953CF485F9
depends:
vermagic:       2.6.31.12-0.1-pae SMP mod_unload modversions 686
parm:           debug:Enable debugging messages (bool)
Was muss ich ändern, damit die von Kernel 2.6.33 verwendet werden?

Danke

Benutzeravatar
Janka
Beiträge: 3580
Registriert: 11. Feb 2006 19:10

#9 Beitrag von Janka » 13. Mär 2010 12:06

Vermutlich musst du das Verzeichnis der libusb-Quellen von ./configure-Resten befreien und dann ./configure neu durchlaufen lassen. Das einfachste ist es dazu die libusb-Quellen einfach nochmal neu zu entpacken. Evtl. zeigt auch einfach nur der Link /usr/src/linux noch auf den alten Kernel.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

inixlinux

#10 Beitrag von inixlinux » 13. Mär 2010 13:20

habe libusb neu entpackt und kompiliert, jedoch verstehe ich nicht was dies mit libusb zu tun hat.

/usr/src/linux zeigt auch auf den Kernel

An was könnte es sonst noch liegen?

Danke

Benutzeravatar
Janka
Beiträge: 3580
Registriert: 11. Feb 2006 19:10

#11 Beitrag von Janka » 13. Mär 2010 14:06

Ich habe es so verstanden, dass libusb bei dir die include-Dateien des alten Kernels benutzt und es deshalb nicht funzt. Jetzt habe ich den Code-Ausschnitt oben nochmal genauer gelesen:

Du benutzt offensichtlich die Module von Kernel 2.6.31. Hast du "make modules_install" gemacht? Das sieht mir eher so aus, als hättest du das alte Modulverzeichnis einfach kopiert oder verlinkt.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

inixlinux

#12 Beitrag von inixlinux » 13. Mär 2010 15:22

habe den Kernel nochmal neu kompiliert mit make & make modules_install

Versuche ich nun lirc-0.8.6 zu kompilieren erhalte ich folgende Fehlermeldung:

Code: Alles auswählen

make[5]: *** [/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.o] Fehler 1
make[4]: *** [_module_/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev] Fehler 2
make[4]: Leaving directory `/usr/src/linux-2.6.33'
make[3]: *** [lirc_dev.o] Fehler 2
make[3]: Leaving directory `/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev'
make[2]: *** [all-recursive] Fehler 1
make[2]: Leaving directory `/media/Daten/temp/lirc-0.8.6/drivers'
make[1]: *** [all-recursive] Fehler 1
make[1]: Leaving directory `/media/Daten/temp/lirc-0.8.6'
make: *** [all] Fehler 2

Benutzeravatar
Janka
Beiträge: 3580
Registriert: 11. Feb 2006 19:10

#13 Beitrag von Janka » 13. Mär 2010 21:54

"Fehler 1" und "Fehler 2" ist nicht gerade aussagekräftig. Mehr Kontext bitte, z.B. die Meldungen des Compilers...

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

inixlinux

#14 Beitrag von inixlinux » 17. Mär 2010 16:44

sry, dass ich mich erst so spät wieder melde hab aber die letzten Tage selbst versucht das Problem hinzubekommen, da meiner Ansicht nach make die Header-Dateien nicht findet.

Die Datei autogen.h, die make nicht findet ist allerdings genau an dieser Stelle vorhanden.
Muss ich noch irgendwelche Änderungen machen, wenn ich den Vanilla Kernel in OpenSuse zum laufen brignen will?

Das Verzeichnis /usr/sr/linux zeigt auf das Source Verzeichniss des Vanilla Kernels.

hier mal die Ausgabe von make:

Code: Alles auswählen

make  all-recursive                                                        
make[1]: Entering directory `/media/Daten/temp/lirc-0.8.6'                 
Making all in drivers                                                      
make[2]: Entering directory `/media/Daten/temp/lirc-0.8.6/drivers'         
Making all in lirc_dev                                                     
make[3]: Entering directory `/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev'
Makefile:8: **************************************************             
Makefile:8: *** Makefile trick not undone, trying to recover *             
Makefile:8: **************************************************             
mv Makefile.automake Makefile                                              
make all                                                                   
make[4]: Entering directory `/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev'
cp ./../lirc_dev/Module*.symvers .                                         
cp: Aufruf von stat für „./../lirc_dev/Module*.symvers“ nicht möglich: Datei oder Verzeichnis nicht gefunden                                          
make[4]: [lirc_dev.o] Fehler 1 (ignoriert)                                 
mv Makefile Makefile.automake                                              
cp ./../Makefile.kernel Makefile                                           
CPPFLAGS="" CFLAGS="" LDFLAGS="" \                                         
        make -C /lib/modules/2.6.33-0.1-pae/build/ SUBDIRS=/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev modules \                                    
                KBUILD_VERBOSE=1                                           
make[5]: Entering directory `/usr/src/packages/BUILD/kernel-2.6.330.1pae'  
test -e include/generated/autoconf.h -a -e include/config/auto.conf || (  \
        echo;                                                           \  
        echo "  ERROR: Kernel configuration is invalid.";               \  
        echo "         include/generated/autoconf.h or include/config/auto.conf are missing.";\                                                       
        echo "         Run 'make oldconfig && make prepare' on kernel src to fix it.";     \                                                          
        echo;                                                           \  
        /bin/false)                                                        
mkdir -p /media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/.tmp_versions ; rm -f /media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/.tmp_versions/*            
make -f scripts/Makefile.build obj=/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev                                                                      
  gcc -Wp,-MD,/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/.lirc_dev.o.d  -nostdinc -isystem /usr/lib/gcc/i586-suse-linux/4.4/include -I/usr/src/packages/BUILD/kernel-2.6.330.1pae/arch/x86/include -Iinclude  -include include/generated/autoconf.h -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -Werror-implicit-function-declaration -Wno-format-security -fno-delete-null-pointer-checks -O2 -m32 -msoft-float -mregparm=3 -freg-struct-return -mpreferred-stack-boundary=2 -march=i686 -mtune=generic -Wa,-mtune=generic32 -ffreestanding -fstack-protector -DCONFIG_AS_CFI=1 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -pipe -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -Wframe-larger-than=2048 -fno-omit-frame-pointer -fno-optimize-sibling-calls -g -Wdeclaration-after-statement -Wno-pointer-sign -fno-strict-overflow -fno-dwarf2-cfi-asm -fconserve-stack -DIRCTL_DEV_MAJOR=61 -DEXPORT_SYMTAB -DHAVE_CONFIG_H -I. -I. -I../.. -I/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/. -I/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/ -I/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/../.. -I/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/../.. -I/lib/modules/2.6.33-0.1-pae/build//include/ -I/lib/modules/2.6.33-0.1-pae/build//drivers/media/video/  -DMODULE -D"KBUILD_STR(s)=#s" -D"KBUILD_BASENAME=KBUILD_STR(lirc_dev)"  -D"KBUILD_MODNAME=KBUILD_STR(lirc_dev)" -D"DEBUG_HASH=33" -D"DEBUG_HASH2=11" -c -o /media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/.tmp_lirc_dev.o /media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.c                                                                     
/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.c:35:28: error: linux/autoconf.h: Datei oder Verzeichnis nicht gefunden                        
In file included from /media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.c:72:                                                                    
/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.h: In function ‘lirc_buffer_init’:                                                             
/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.h:88: warning: passing argument 1 of ‘kfifo_alloc’ makes pointer from integer without a cast   
include/linux/kfifo.h:109: note: expected ‘struct kfifo *’ but argument is of type ‘unsigned int’                                                     
/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.h:88: warning: passing argument 3 of ‘kfifo_alloc’ makes integer from pointer without a cast   
include/linux/kfifo.h:109: note: expected ‘gfp_t’ but argument is of type ‘struct spinlock_t *’                                                       
/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.h:88: warning: assignment makes pointer from integer without a cast                            
/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.h: In function ‘lirc_buffer_read’:                                                             
/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.h:185: error: implicit declaration of function ‘kfifo_get’                                     
/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.h: In function ‘lirc_buffer_write’:
/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.h:206: error: implicit declaration of function ‘kfifo_put’
make[6]: *** [/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev/lirc_dev.o] Fehler 1
make[5]: *** [_module_/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev] Fehler 2
make[5]: Leaving directory `/usr/src/packages/BUILD/kernel-2.6.330.1pae'
make[4]: *** [lirc_dev.o] Fehler 2
make[4]: Leaving directory `/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev'
make[3]: *** [all] Fehler 2
make[3]: Leaving directory `/media/Daten/temp/lirc-0.8.6/drivers/lirc_dev'
make[2]: *** [all-recursive] Fehler 1
make[2]: Leaving directory `/media/Daten/temp/lirc-0.8.6/drivers'
make[1]: *** [all-recursive] Fehler 1
make[1]: Leaving directory `/media/Daten/temp/lirc-0.8.6'
make: *** [all] Fehler 2
Danke

Benutzeravatar
Janka
Beiträge: 3580
Registriert: 11. Feb 2006 19:10

#15 Beitrag von Janka » 17. Mär 2010 19:30

Das ist Kernel 2.6.33. Gerade da wurde das Build-System geändert. Du musst in den externen Treiberquellen alle Referenzen auf <linux/autoconf.h> in <generated/autoconf.h> umschreiben. Das gleiche mit utsrelease.h.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Antworten