Custom DSDT einbinden wie ?

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Viper2020
Beiträge: 4
Registriert: 17.03.2012 10:22:34

Custom DSDT einbinden wie ?

Beitrag von Viper2020 » 17.03.2012 10:26:21

Hi,

ich versuche seit Tagen meine Custom DSDT in den Kernel zu bekommen, aber ich brauche nun hilfe ich komme einfach nicht weiter.

Ich möchte meine Custom DSDT einbinden, damit der Lüfter von meinem HP 625 mal ein bissl die Klappe hält, unter Ubuntu hatte ich das auch geschafft aber unter Debian funktioniert das leider nicht wie bei Ubuntu.

Das hier habe ich im Forum gefunden:
Danach habe ich diese Methode gewählt:
# DSDT.hex in Kernel-Image einbinden: Im Kernel-Source-Verzeichnis "make menuconfig" ausführen.
Zu Untermenü "Device Drivers ---> Generic Driver Options" gehen und beide Einträge abwählen: "Select only drivers that don't need compile-time external firmware" und "Prevent firmware from being built"
Zu Menü "Power management options (ACPI, APM) ---> ACPI (Advanced Configuration and Power Interface) Support" gehen und "Include Custom DSDT" auswählen und in "Custom DSDT Table file to include" den Pfad zur "DSDT.hex" eingeben. (hier habe ich /boot/dsdt.hex eingetragen)
# Kernel compilieren und installieren

funktioniert leider nicht kann es nicht aktivieren, bin wirklich für jeden Tipp dankbar.

So hat es unter Ubuntu geklappt:

Code: Alles auswählen

1.)
Um die DSDT Datei exportieren zu könne, benötigen wir iasl. Installieren tun wir das über den Befehl:

sudo apt-get install iasl
Jetzt exportieren wir die DSDT Datei in unser home Verzeichnis:

sudo cat /proc/acpi/dsdt > dsdt.dat
Jetzt konvertieren wir diese noch in eine lesbare Form:

iasl -d dsdt.dat

2.)
Folgt beim Bearbeiten der .dsl Datei nun dieser Anleitung (nur Punkt 5 und 6): http://www.planet3dnow.de/vbulletin/showpost.php?p=4350678&postcount=225

3.)
Mit folgendem Befehl konvertieren wir nun die .dsl Datei in das .hex Format, das wir später auch benötigen:

iasl -tc /home/<benutzername>/dsdt.dsl
Es sollten keine Errors angezeigt werden. Wenn doch habt ihr beim Editieren einen Fehler gemacht oder in eurer .dsl Datei befindet sich oben ein nicht auskommentierter Kommentar, den ihr dann entfernen müsst.


4.)
Nun geht’s los mit dem Basteln eines eigenen Kernels. Am besten holt ihr euch gleich den aktuellsten Kernel:

apt-get install linux-source
Dann installiert ihr die benötigten Pakete:

sudo apt-get install fakeroot kernel-wedge build-essential makedumpfile
sudo apt-get build-dep linux
sudo apt-get install qt3-dev-tools libqt3-mt-dev
sudo apt-get install kernel-package

5.)
Nun erstellen wir einen Ordner für den Kernel, in diesem Fall nennen wir ihn src, was Abkürzung für Source ist.

mkdir ~/src
cd ~/src
tar xjvf /usr/src/linux-source-<Versionsnummer einfügen>.tar.bz2
cd linux-source-<Versionnummer einfügen>;

6.)

Jetzt kopieren wir unser alten Einstellungen in den neuen Kernel, wir wollen ja schließlich nur die DSDT ändern:

cp -vi /boot/config-`uname -r` .config
Und nun fügen wir die DSDT ein:

make xconfig
Es öffnet sich nun ein Fenster. Das Terminal keinesfalls schließen! In der rechten Spalte geht ihr nun unter Power management and ACPI options Auf ACPI (Advanced ….). In der rechten Spalte findet ihr nun einen Eintrag Custom DSDT table to include:. Mach einen Doppelklick auf diesen und gebt als Pfad /home/<benutzername>/dsdt_table.h ein (Die Datei dsdt.hex in eurem home Verzeichnis müsst ihr dafür noch in dsdt_table.h umbenennen). Oben im Fenster nun auf die Diskette klicken und das Fenster schließen.

7.)
Jetzt kompilieren wir den Kernel. Das dauert ziemlich lange. Den Vorgang nicht abbrechen – eine Dauer von 1-2 Stunden ist vollkommen normal!

fakeroot make-kpkg --initrd --append-to-version=-some-string-here kernel-image kernel-headers
Wenn das Kompilieren abgeschlossen ist, befinden sich zwei .deb Pakete unter /home/<benutzername>/src. Dieser installiert ihr folgendermaßen:

echo vesafb | sudo tee -a /etc/initramfs-tools/modules
echo fbcon | sudo tee -a /etc/initramfs-tools/modules
cd ..
sudo dpkg -i linux-image-<Kompletten Namen bitte im src Ordner nachsehen. Unterscheidet sich teils deutlich>_i386.deb
sudo dpkg -i linux-headers-<Kompletten Namen bitte im src Ordner nachsehen. Unterscheidet sich teils deutlich>_i386.deb

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Custom DSDT einbinden wie ?

Beitrag von habakug » 18.03.2012 01:44:53

Hallo!

Da hier nichts angegeben ist und ich vermute, das jemand, der eine DSDT einbinden will, auch nagelneue Software verwendet, hier, wie ich es für Wheezy machen würde. Installation über Netimage nur Grundsystem ohne "Desktop".

Code: Alles auswählen

# pwd 
/root
# mkdir dsdt
# cd dsdt
# apt-get install iasl
# cat /sys/firmware/acpi/tables/DSDT > dsdt.dat   
# iasl -d dsdt.dat                                
# cp dsdt.dsl dsdt-fixed.dsl
# vi dsdt-fixed.dsl
Ein Beispiel für das Beheben eines Fehlers und das Editieren der "dsdt-fixed.dsl". Folgende Fehlermeldung:

Code: Alles auswählen

dsdt.dsl   2769:          0xFFF00000,         // Length
Error    4049 -                    ^ Length is larger than Min/Max window
Die Zeile 2769 in der "dsdt-fixed.dsl sieht so aus:

Code: Alles auswählen

                    DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixe$
                        0x00000000,         // Granularity
                        0x00100000,         // Range Minimum
                        0xFEBFFFFF,         // Range Maximum
                        0x00000000,         // Translation Offset
[2769]                  0xFFF00000,         // Length
                        ,, _Y00, AddressRangeMemory, TypeStatic)
Die Länge (length) berechnet sich nach der Formel
length = rangemax - rangemin +1
In diesem Fall also

Code: Alles auswählen

  FEBFFFFF
- 00100000
__________
  FEAFFFFF
+ 00000001
__________
  FEB00000
Die korrigierte Zeile 2769 lautet jetzt also

Code: Alles auswählen

                        0xFEB00000,         // Length
Ein zweites Beispiel ist etwas tückischer:

Code: Alles auswählen

dsdt.dsl   4401:          0x00000000,         // Length
Error    4043 -                    ^ Invalid combination of Length and Min/Max fixed flags
Die Zeile in der dsl-Datei

Code: Alles auswählen

                            DWordMemory (ResourceProducer, PosDecode, MinFixed,$
                                0x00000000,         // Granularity
                                0xE0000000,         // Range Minimum
                                0xE0000000,         // Range Maximum
                                0x00000000,         // Translation Offset
{4401]                          0x00000000,         // Length
Aber auch hier hilft die Formel:

Code: Alles auswählen

  E0000000
- E0000000
__________
  00000000
+ 00000001
__________
  00000001
Die korrigierte Zeile lautet also

Code: Alles auswählen

                                0x00000001,         // Length
Froh ist wer nur zwei drei Fehler findet, es gibt ausreichend Fälle, bei denen man beim Anblick der Fehlerdichte die Lust verliert. Um eine ausgiebige Internetrecherche kommt man ebenfalls nicht herum. Es gibt auch Quellen die bereits "behandelte" DSDTs anbieten, hier muß jeder selbst wissen ewas er tut.
Warnungen, die auch gehäuft auftreten können ignoriere ich und freue mich stattdessen an den zahlreichen Optimierungen, die der Intel-Assembler einpflegt.
Nachdem die dsl-Datei bearbeitet ist wird wieder Code daraus und die gewünschte "dsdt-fixed.hex" erzeugt:

Code: Alles auswählen

# iasl -tc dsdt-fixed.dsl
Jetzt geht es an den Kernel:

Code: Alles auswählen

# apt-get install build-essential devscripts linux-source-3.2 libncurses5-dev zlib1g-dev
# cd /usr/src
# tar xjvf linux-source-3.2.tar.bz2
# cd linux-source-3.2/
# cp /boot/config-3.2.0-2-amd64 .config
# vi .config
Die .config soll folgende Einträge erhalten, die wenn notwendig erzeugt werden:

Code: Alles auswählen

CONFIG_STANDALONE=n
CONFIG_ACPI_CUSTOM_DSDT=y
CONFIG_ACPI_CUSTOM_DSDT_FILE="/root/dsdt/dsdt-fixed.hex"
Gleich ist Zeit zum Kaffekochen und Trinken.

Code: Alles auswählen

# make -f debian/rules.gen binary-arch_amd64 binary-indep DEBIAN_KERNEL_JOBS=2
# make-kpkg --initrd --append-to-version=custom_dsdt kernel-image kernel-headers
# cd ..
# dpkg -i linux-image-3.2.9custom-dsdt_3.2.9custom-dsdt-10.00.Custom_amd64.deb 
# dpkg -i linux-headers-3.2.9custom-dsdt_3.2.9custom-dsdt-10.00.Custom_amd64.deb
Gruß, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Viper2020
Beiträge: 4
Registriert: 17.03.2012 10:22:34

Re: Custom DSDT einbinden wie ?

Beitrag von Viper2020 » 18.03.2012 11:02:40

Besten Dank für die Hilfe im Moment bin ich an dieser Station

make -f debian/rules.gen binary-arch_amd64 binary-indep DEBIAN_KERNEL_JOBS=2
folgende Fehlermeldung kommt

make: debian/rules.gen: Datei oder Verzeichnis nicht gefunden
make: *** Keine Regel, um »debian/rules.gen« zu erstellen. Schluss.

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Custom DSDT einbinden wie ?

Beitrag von habakug » 18.03.2012 11:21:39

Hallo!

Da hat sich c-&-p-Teufel eingeschlichen. Es muß heissen

Code: Alles auswählen

make -f debian/rules binary-arch_amd64 binary-indep DEBIAN_KERNEL_JOBS=2
Gruß, habakug

edit:
Obacht, es fallen im Build-Verzeichnis fast 7 GB Daten an.
noch mehr edit:
Es ist nur entweder
# make -f debian/rules.gen binary-arch_amd64 binary-indep DEBIAN_KERNEL_JOBS=2
oder
# make-kpkg --initrd --append-to-version=custom_dsdt kernel-image kernel-headers
notwendig. War wohl doch schon etwas spät.
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Viper2020
Beiträge: 4
Registriert: 17.03.2012 10:22:34

Re: Custom DSDT einbinden wie ?

Beitrag von Viper2020 » 18.03.2012 15:35:30

@habakug als erste möchte ich Dir danken für Deine Hilfe, aber ich sitze hier nun schon 2 oder 3 Tage rum und kriege es einfach nicht hin hier meine letzten Versuche:


sudo make -f debian/rules binary-arch_amd64 binary-indep DEBIAN_KERNEL_JOBS=2
make: *** Keine Regel, um »binary-arch_amd64« zu erstellen. Schluss.

sudo make -f debian/rules.gen binary-arch_amd64 binary-indep DEBIAN_KERNEL_JOBS=2
make: debian/rules.gen: Datei oder Verzeichnis nicht gefunden
make: *** Keine Regel, um »debian/rules.gen« zu erstellen. Schluss.

sudo make-kpkg --initrd --append-to-version=custom_dsdt kernel-image kernel-headers
Error: The extended version may only contain
lowercase alphanumerics and the characters - + .
The current value is: custom_dsdt
Aborting.

Keine Ahnung woran es noch liegen könnte :(

Benutzeravatar
habakug
Moderator
Beiträge: 4314
Registriert: 23.10.2004 13:08:41
Lizenz eigener Beiträge: MIT Lizenz

Re: Custom DSDT einbinden wie ?

Beitrag von habakug » 18.03.2012 15:44:44

Hallo!

Der Unterstrich ist nicht erlaubt in "config_dsdt". Ändere es auf

Code: Alles auswählen

# make-kpkg --initrd --append-to-version=custom-dsdt kernel-image kernel-headers
Sorry für die Unannehmlichkeit. Ich kompiliere meine Kernel mit "mrproper/make" usw. Den Debian-Way hatte ich da wohl etwas lieblos hingehackt.

Gruß, habakug
( # = root | $ = user | !! = mod ) (Vor der PN) (Debianforum-Wiki) (NoPaste)

Viper2020
Beiträge: 4
Registriert: 17.03.2012 10:22:34

Re: Custom DSDT einbinden wie ?

Beitrag von Viper2020 » 23.03.2012 09:48:29

Besten Dank nun hat alles geklappt.

Antworten