Du bist hier:Start»Linux»Hardware

Linux und Hardware

16.05.2015

Tux, das Linux-Maskottchen

Noch immer gibt es Hardware-Hersteller, die Linux ignorieren und keine Software (sogenannte Treiber) für Linux bereitstellen. Wenn Hersteller die Software-Schnittstelle zur Hardware ebenfalls nicht offenlegen, bleibt nur der mühsame Weg übers Reverse Engineering. Deshalb ist meine Empfehlung nur Hardware von Herstellern zu kaufen, die die Open-Source-Gemeinschaft unterstützen und Treiber für Linux anbieten. Laut Linus Torvalds, dem "Erfinder" von Linux, funktioniert die Zusammenarbeit des Grafikkartenherstellers Nvidia mit Linux am schlechtesten. Deshalb: Hände weg von Nvidia-Grafikkarten ! Nach meiner persönlichen Erfahrungen engagiert sich Intel im Bezug auf Grafikkarten am besten für die Open-Source-Gemeinschaft. In der englischsprachigen Wikipedia gibt es einen Überblick über Grafikkarten-Treiber für Linux. Wer sich ein Laptop kaufen möchte, das für Linux geeignet ist, findet auf der Seite linlap.com einige Berichte, wie gut die Hardware des Laptops unterstützt wird. Ich hatte mir ein gebrauchtes Acer Travelmate 7740G gekauft. Dadurch spare ich mir zum einen die Windows-Zwangsabgabe und zum anderen wird ältere Hardware durch Linux-Software besser unterstützt. Bei moderner Hardware befinden sich die Software-Treiber von Linux meist noch in der Entwicklung.

Laptop Acer Travelmate 7740G

Bei meinem Acer-Laptop hatte ich Probleme mit dem Grafikkarten-Treiber Radeon. Damals hatte der Radeon-Treiber noch keine Stromspar-Funktionen implementiert und der Lüfter des Laptops lief ständig. Nach Installation der ATI Grafikkarten-Treiber von AMD für Linux war das Laptop dann ruhiger. Außerdem kann durch das "ATI Catalyst Control Center" die Helligkeit und der Kontrast des Bildschirms eingestellt werden.

Lüfter-Steuerung für Acer-Laptops

Der Lüfter eines Laptops wird über den sogenannten Embedded Controller gesteuert. Für Acer-Laptops gibt es unter Windows das Programm Acer Fan Control (acfc). Unter Linux gibt es das Perl-Skript: acer_ec.pl.

# download the perl script for Acer embedded controller:
wget http://torsten-traenkner.de/linux/hardware/acer_ec.pl

# become root user
sudo bash

# display the registers
perl acer_ec.pl regs

# filter the relevant registers
perl acer_ec.pl regs | grep ^50

# get the BIOS control byte
perl acer_ec.pl ?= 0x55

# get the fan control byte
perl acer_ec.pl ?= 0x5e

Das Perl-Skript acer_ec.pl kann die Register des Embedded Controllers anzeigen und verändern. Die beiden relevanten Register sind die BIOS-Steuerung bei Register 0x55 hexadezimal beziehungsweise 85 dezimal und die Lüfter-Steuerung bei 0x5E hexadezimal beziehungsweise 94 dezimal. Diese Register scheinen bei den verschiedenen Acer-Laptops an den gleichen Positionen zu sein. Nur die Werte sind je nach Modell unterschiedlich. Einige Werte zur Lüfterkontrolle lassen sich im Acer-Userforum finden. Die Werte für mein Acer Laptop 7740G habe ich durch Versuch und Irrtum herausgefunden. Wenn das Byte zur BIOS-Steuerung bei 0x55 auf den Wert 7 gesetzt wird, dann dreht sich der Lüfter konstant langsam und stört nicht weiter. Allerdings sollte die Temperatur im Auge behalten werden. Bei zu hohen Temperaturen sollte die Lüftersteuerung wieder auf den automatischen BIOS-Betrieb umgestellt werden. Bei den Werten 8 und 9 des BIOS-Control-Bytes dreht sich der Lüfter etwas schneller als beim Wert 7:

# set the BIOS control byte to 7
perl acer_ec.pl := 0x55 0x07

# value 7 lets the fan rotate at a constantly slow speed
# value 8 is a bit faster

# reset the BIOS control byte and
# let the BIOS take over the control
perl acer_ec.pl := 0x55 0

Mit dem dezimalen Wert 31 beziehungsweise 0x1f läßt sich der Lüfter komplett abschalten und mit 0 wieder einschalten. Sollte bei der Lüftersteuerung irgendetwas schief gehen, hilft im Zweifelsfall ein Neustart des Laptops.

# disable the fan with 0x1f == 31
perl acer_ec.pl := 0x55 0x1f

# reset the BIOS control byte and
# let the BIOS take over the control
perl acer_ec.pl := 0x55 0

Der Lüfter läßt sich auch in feineren Abstufungen drehen. Dazu muss das BIOS-Control-Byte auf 14 und das Lüfter-Control-Byte auf Werte von 1 bis 20 gesetzt werden.

# control the steps of the fan with 0xe == 14
perl acer_ec.pl := 0x55 0xe
perl acer_ec.pl := 0x5e 1

# let the BIOS take over the control
perl acer_ec.pl := 0x55 0

Für etwas mehr Komfort habe ich das folgende Shell-Skript geschrieben:

# download the shell script
wget http://torsten-traenkner.de/linux/hardware/showRelevantFanRegisters.sh
chmod 755 showRelevantFanRegisters.sh
sudo bash
cp showRelevantFanRegisters.sh /usr/bin/fan

# set the fan to a slow rotation speed
fan 7

# display the settings
fan

# example output
biosControlByte : 7
fanControlByte  : 1
fanRotation     : 494
CPU temperature : 50

# quiet fan on the Acer Travelmate 7740
fan e 2

# fast fan speed on the Acer Travelmate 7740
fan e 7

# reset to BIOS control
fan 3

Außerdem läßt sich über die CPU frequency utilities (cpufrequtils) die Performance der CPU-Kerne auf den Stromspar-Modus einstellen. Bei 4 Kernen sieht das so aus:

# set each CPU core to powersave mode
for index in 0 1 2 3; do cpufreq-set -g powersave -c $index; done

# reset to on demand
for index in 0 1 2 3; do cpufreq-set -g ondemand -c $index; done

Lenovo-Notebook

Für ein Lenovo-Notebook (ehemals IBM) ist die Lüftersteuerung deutlich einfacher, da die Steuerung bereits in den Kernel integriert ist. Der Lüfter läßt sich über das /proc-Dateisystem steuern:

# set the fan rotation speed to a low value:
while true; do echo "level 1" > /proc/acpi/ibm/fan; sleep 1; done

Automatischer Laptop-Start

Wer ein Laptop benutzt, um Fernsehen aufzuzeichnen oder automatisch Aktionen ausführen zu lassen, wird sich über eine BIOS-Option freuen, die das Laptop zu einer bestimmten Uhrzeit startet. Dafür gibt es unter Linux die Schnittstelle /sys/class/rtc/rtc0/wakealarm, die als ACPI Wakeup ausführlich beschrieben ist und beim Acer Travelmate 7740G out-of-the-box funktioniert. Dabei wird die Weckzeit ins Non-Volatile RAM (NVRAM) geschrieben. Wenn kein Stromausfall auftritt und der Netzstecker am Laptop angeschlossen ist, dann wird das Laptop zur definierten Zeit gestartet.

# example to set the wake up time in 5 minutes

echo 0 > /sys/class/rtc/rtc0/wakealarm
echo `date '+%s' -d '+ 5 minutes'` > /sys/class/rtc/rtc0/wakealarm
cat /sys/class/rtc/rtc0/wakealarm

# make sure you edit the hardware clock script
# before you shut down the laptop
vi /etc/init/hwclock-save.conf

# you can check the technical details with cat_nvram
apt-get install nvram-wakeup
cat_nvram | hexdump -C

# example output
# ...
00000070  00 00 49 21 13 03 18 13  03 16 05 15 26 22 50 98  |..I!........&"P.|
                   SS    MM    HH                 alarm DD
               seconds minutes hour                     0x80 + day (18)

Viel Spaß beim Experimentieren ! Falls noch etwas unklar sein sollte, dann kannst du die Kommentar-Funktion benutzen.

Kommentar schreiben