Sound unter Linux auf meinem Toshiba P100

Update: Dieses Tutorial hat sich mittlerweile erübrigt. Sound läuft out-of-the-box in Ubuntu 8.04 (Hardy Heron).

Achtung: Diese Anleitung funktioniert nur bis Ubuntu Feisty (7.04). Auf Ubuntu Gutsy (7.10) funktioniert das Ganze aufgrund eines Bugs im verwendeten Kernel nicht. Siehe auch: https://bugs.launchpad.net/…/136469.

Update: Im Bugtracker für das Problem wurde endlich eine Lösung geposted, die bei mir einwandfrei funktioniert. Werde in Kürze hier eine neue Anleitung online stellen. Siehe: https://bugs.launchpad.net/…/136469/comments/238

Nachdem ich auf meinem Toshiba P100-351 Ubuntu installiert hatte, ging in Richtung Sound gar nichts, obwohl das System den richtigen Treiber eingebunden hatte (snd-hda-intel). Nach einiger Recherche habe ich herausgefunden, dass das Problem an einem etwas schiefgeratenen BIOS seitens Toshiba liegt. Durch folgende 2 Forumthreads habe ich es dann doch hinbekommen:

Im folgenden was ich gemacht habe (steht in den Threads auch schon drin, aber als kleine Übersicht). Getestet habe ich auf openSuse 10.2 und Ubuntu Feisty, immer mit BIOS-Version 2.40. Wie es mit anderen BIOS-Versionen aussieht und ob die Vorgehensweise dort brauchbar ist, weiß ich nicht. Hinweis: ihr benötigt root-Rechte für die nachfolgenden Schritte.

Den Intel ASL Compiler installieren.

mt:~# apt-get update
mt:~# apt-get install iasl

Die DSDT-Tabelle in eine Datei schreiben.

mt:~# cat /proc/acpi/dsdt > dsdt.dat

Die Datei dekompilieren und diese mit einem Texteditor öffnen.

mt:~# iasl -d dsdt.dat
mt:~# nano dsdt.dat

Die Datei wie folgt anpassen: Im String Name (_HID, "*PNP0C14") den Stern entfernen. Dann nach Linux suchen, die if-else Struktur auskommentieren und Store (0x07D6, OSYS) // Fake Windows 2006 vor der letzten geschweiften Klammer der Struktur einfügen. Der Teil mit der if-else Struktur müsste dann so aussehen:

Scope (_SB)
     {
         Method (_INI, 0, NotSerialized)
         {
             If (DTSE)
             {
                 TRAP (0x47)
             } 

             Store (0x07D0, OSYS)
 //             If (CondRefOf (_OSI, Local0))
 //             {
 //                 If (_OSI ("Linux"))
 //                 {
 //                     Store (0x03E8, OSYS)
 //                 }
 //                 Else
 //                 {
 //                     Store (0x07D1, OSYS)
 //                     If (_OSI ("Windows 2001 SP2"))
 //                     {
 //                         Store (0x07D2, OSYS)
 //                     } 

 //                     If (_OSI ("Windows 2001.1"))
 //                     {
 //                         Store (0x07D3, OSYS)
 //                     } 

 //                     If (_OSI ("Windows 2001.1 SP1"))
 //                     {
 //                         Store (0x07D4, OSYS)
 //                     } 

 //                     If (_OSI ("Windows 2006"))
 //                     {
 //                         Store (0x07D6, OSYS)
 //                     } 

 //                     If (LAnd (MPEN, LEqual (OSYS, 0x07D1)))
 //                     {
 //                         TRAP (0x3D)
 //                     }
 //                 }
 //             }
          Store (0x07D6, OSYS)  // Fake Windows 2006
         }

Datei speichern und wieder kompilieren.

mt:~# iasl -tc -f dsdt.dsl

Der Befehl spuckt wahrscheinlich einige Fehler aus, aber am Ende solltet ihr eine fertige DSDT.aml bekommen. Diese kopieren wir nun nach /.

mt:~# cp DSDT.aml /

Als nächstes benötigen wir ein Script, das die initrd mit der neuen DSDT patcht. Ihr kopiert das Script am besten nach /boot, wo ihr auch gleich ein Backup der aktuellen initrd machen könnt (solltet).

mt:~# cd /boot
mt:~# wget http://gaugusch.at/acpi-dsdt-initrd-patches/initrd-add-dsdt
mt:~# cp initrd.img-$(uname -r) initrd.img-$(uname -r).original

Jetzt können wir die initrd patchen.

mt:~# sh initrd-add-dsdt initrd.img-$(uname -r) /DSDT.aml

Nun könnt ihr versuchen, das System neu zu starten um zu sehen, ob alles geklappt hat. Das sollte es gewesen sein. Ich hatte nach diesen Schritten auf beiden getesteten Distributionen Sound. Viel Glück!