Hallo Dieter, Am Sonntag, 10. Juli 2005 12:13 schrieb Hans-Dieter Schenk:
Am Donnerstag, 7. Juli 2005 12:41 schrieb Werner Franke: ...
[...]
Hallo Werner,
im Nachtrag zu meinem Workaround, habe ich einen einfacheren Weg gefunden, der nicht mit einer Neucompilierung des Moduls verbunden ist. Da die Aenderung im Sourcecode von init.c sehr gering ist, habe ich ueber einen binaeren Patch des Original Moduls snd.ko im Verzeichnis /lib/modules/2.6.11.4-21.7-default/kernel/sound/core das gleiche erreicht.
Folgende Schritte musst Du dazu machen (an ein Backup des Originalfiles denken):
1. Suchen des Offsets in die Datei snd.ko, wo die Routine snd_card_set_generic_pm_callback beginnt. 2. Ueberschreiben von drei Bytes beginnend am Offset (entspricht return 0;) 3. Abspeichern und Kopieren des neuen Files nach /lib/modules/2.6.11.4-21.7-default/kernel/sound/core
Die zu ueberschreibende Position ist bei mir 0x15B0 (ermittelt mit objdump), sie muss die Bytefolge
0x57 0x89 0xD7 0x56 0x89 0xCE 0x53 0x89
enthalten. Ueberschrieben werden hiervon die ersten 3 Bytes mit
0x31 0xC0 0xC3
Als Werkzeug fuer diese Manipulation habe ich den mcedit benutzt, der es ermoeglicht Hexzeichen zu suchen, sie zu aendern und das File wieder abzuspeichern.
Ich habe dies mit Erfolg ausprobiert, es geht wesentlich schneller als der Weg ueber eine Neucompilierung des Treibers.
Danke fuer Deine ausfuehrliche erste und zweite Mail. Werde wahrscheinlich die binaere Methode zuerst nutzen, weil auf dem Notebook keine Kernel-Sourcen installiert sind und ich keinen weiteren 32Bit PC mit Linux drauf habe. Werde mich wieder melden, wenn ich weitere Infos habe. Gruss Werner