HowTos

HowTo Linux auf einem Acer Travelmate 290LMi

Vor geraumer Zeit habe ich ein Acer Travelmate 290LMi erstanden. Auf dem Gerät war Windows XP Professional vorinstalliert, was natürlich kein brauchbarer Zustand war. Daher sollte flugs ein Linux darauf zum Laufen kommen.

Hardware

Im Notebook ist ein Intel Centrino Prozessor mit 1.3GHz installiert und in die 512MB RAM hängt sich die Grafikkarte 82852/855GM von Intel mit 64MB mit ein. Die kann neben dem Display auch noch einen externen Monitor bedienen. Es ist eine Festplatte mit bescheidenen 30GB eingebaut. Die 100MBit/s-Netzwerkkarte ist von Realtek, der Wireless-LAN-Adapter sowie die Soundkarte von Intel. Sonstige Schmankerl sind der FireWire-Adapter und der herausnehmbare DVD-Brenner. Eingebautes Modem und Infrarot-Interface, sind für mich wenig nützlich, PCMCIA halte ich bei Notebook auch für selbstverständlich. Die Ausgabe von lspci (überspringen):

root@harbard [~] # lspci -v
0000:00:00.0 Host bridge: Intel Corp. 82852/855GM Host Bridge (rev 02)
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, fast devsel, latency 0
	Memory at <unassigned> (32-bit, prefetchable)
	Capabilities: [40] #09 [a105]

0000:00:00.1 System peripheral: Intel Corp. 855GM/GME GMCH Memory I/O Control Registers (rev 02)
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, fast devsel, latency 0

0000:00:00.3 System peripheral: Intel Corp. 855GM/GME GMCH Configuration Process Registers (rev 02)
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, fast devsel, latency 0

0000:00:02.0 VGA compatible controller: Intel Corp. 82852/855GM Integrated Graphics Device (rev 02) (prog-if 00 [VGA])
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, fast devsel, latency 0, IRQ 11
	Memory at b0000000 (32-bit, prefetchable) [size=128M]
	Memory at f0000000 (32-bit, non-prefetchable) [size=512K]
	I/O ports at e000 [size=8]
	Capabilities: [d0] Power Management version 1

0000:00:02.1 Display controller: Intel Corp. 82852/855GM Integrated Graphics Device (rev 02)
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: fast devsel
	Memory at 20000000 (32-bit, prefetchable) [disabled] [size=128M]
	Memory at 1f000000 (32-bit, non-prefetchable) [disabled] [size=512K]
	Capabilities: [d0] Power Management version 1

0000:00:1d.0 USB Controller: Intel Corp. 82801DB (ICH4) USB UHCI #1 (rev 03) (prog-if 00 [UHCI])
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, medium devsel, latency 0, IRQ 11
	I/O ports at 1200 [size=32]

0000:00:1d.1 USB Controller: Intel Corp. 82801DB (ICH4) USB UHCI #2 (rev 03) (prog-if 00 [UHCI])
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, medium devsel, latency 0, IRQ 10
	I/O ports at 1600 [size=32]

0000:00:1d.2 USB Controller: Intel Corp. 82801DB (ICH4) USB UHCI #3 (rev 03) (prog-if 00 [UHCI])
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, medium devsel, latency 0, IRQ 10
	I/O ports at 1700 [size=32]

0000:00:1d.7 USB Controller: Intel Corp. 82801DB (ICH4) USB2 EHCI Controller (rev 03) (prog-if 20 [EHCI])
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, medium devsel, latency 0, IRQ 10
	Memory at f0080000 (32-bit, non-prefetchable) [size=1K]
	Capabilities: [50] Power Management version 2
	Capabilities: [58] #0a [2080]

0000:00:1e.0 PCI bridge: Intel Corp. 82801BAM/CAM PCI Bridge (rev 83) (prog-if 00 [Normal decode])
	Flags: bus master, fast devsel, latency 0
	Bus: primary=00, secondary=01, subordinate=01, sec-latency=32
	I/O behind bridge: 0000c000-0000dfff
	Memory behind bridge: e0000000-efffffff
	Prefetchable memory behind bridge: a0000000-afffffff

0000:00:1f.0 ISA bridge: Intel Corp. 82801DBM LPC Interface Controller (rev 03)
	Flags: bus master, medium devsel, latency 0

0000:00:1f.1 IDE interface: Intel Corp. 82801DBM (ICH4) Ultra ATA Storage Controller (rev 03) (prog-if 8a [Master SecP PriP])
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, medium devsel, latency 0, IRQ 10
	I/O ports at <unassigned>
	I/O ports at <unassigned>
	I/O ports at <unassigned>
	I/O ports at <unassigned>
	I/O ports at 1100 [size=16]
	Memory at 1f080000 (32-bit, non-prefetchable) [size=1K]

0000:00:1f.3 SMBus: Intel Corp. 82801DB/DBM (ICH4) SMBus Controller (rev 03)
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: medium devsel, IRQ 5
	I/O ports at 1400 [size=32]

0000:00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4) AC'97 Audio Controller (rev 03)
	Subsystem: Acer Incorporated [ALI]: Unknown device 0021
	Flags: bus master, medium devsel, latency 0, IRQ 5
	I/O ports at e100 [size=256]
	I/O ports at e200 [size=64]
	Memory at f0080400 (32-bit, non-prefetchable) [size=512]
	Memory at f0080600 (32-bit, non-prefetchable) [size=256]
	Capabilities: [50] Power Management version 2

0000:00:1f.6 Modem: Intel Corp. 82801DB (ICH4) AC'97 Modem Controller (rev 03) (prog-if 00 [Generic])
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, medium devsel, latency 0, IRQ 5
	I/O ports at e300 [size=256]
	I/O ports at e400 [size=128]
	Capabilities: [50] Power Management version 2

0000:01:00.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller (rev 80) (prog-if 10 [OHCI])
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, stepping, medium devsel, latency 128, IRQ 11
	Memory at e0001800 (32-bit, non-prefetchable) [size=2K]
	I/O ports at c100 [size=128]
	Capabilities: [50] Power Management version 2

0000:01:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, medium devsel, latency 128, IRQ 11
	I/O ports at c000 [size=256]
	Memory at e0001000 (32-bit, non-prefetchable) [size=256]
	Capabilities: [50] Power Management version 2

0000:01:02.0 Network controller: Intel Corp. PRO/Wireless LAN 2100 3B Mini PCI Adapter (rev 04)
	Subsystem: Intel Corp. MIM2000/Centrino
	Flags: bus master, medium devsel, latency 128, IRQ 11
	Memory at e0000000 (32-bit, non-prefetchable) [size=4K]
	Capabilities: [dc] Power Management version 2

0000:01:04.0 CardBus bridge: ENE Technology Inc CB1410 Cardbus Controller (rev 01)
	Subsystem: Acer Incorporated [ALI]: Unknown device 003d
	Flags: bus master, medium devsel, latency 168, IRQ 11
	Memory at 1f081000 (32-bit, non-prefetchable) [size=4K]
	Bus: primary=01, secondary=02, subordinate=05, sec-latency=176
	Memory window 0: 1f400000-1f7ff000 (prefetchable)
	Memory window 1: 1f800000-1fbff000
	I/O window 0: 00004000-000040ff
	I/O window 1: 00004400-000044ff
	16-bit legacy interface ports at 0001

Software

Auf den 30GB ist Windows XP, in meinem Fall Professional, vorinstalliert, glücklicherweise (für mich) auf FAT32, so dass parted die partition gut schrumpfen kann. XP habe ich aufgehoben, für den Fall, dass ich mal zocken will (was erstaunlich selten vorkommt, ich ringe jeden Tag mit dem Gedanken, es entgültig zu entfernen). Außerdem war noch Norton Antivirus dabei.

Mein Vorschlag, das Notebook zukünftig auch mit einer vorinstallierten Linux-Distribution auszuliefern, habe ich an Acer gesandt.

Kernel

Die Wahl fiel zu Anfang auf einen vanilla 2.4.20. Die .config (überspringen):

root@harbard [~] # grep '^[^#$]' /boot/config-2.4.22-2003-301
CONFIG_X86=y
CONFIG_UID16=y
CONFIG_EXPERIMENTAL=y
CONFIG_MODULES=y
CONFIG_MODVERSIONS=y
CONFIG_KMOD=y
CONFIG_MPENTIUMIII=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
CONFIG_X86_CMPXCHG=y
CONFIG_X86_XADD=y
CONFIG_X86_BSWAP=y
CONFIG_X86_POPAD_OK=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_X86_L1_CACHE_SHIFT=5
CONFIG_X86_HAS_TSC=y
CONFIG_X86_GOOD_APIC=y
CONFIG_X86_PGE=y
CONFIG_X86_USE_PPRO_CHECKSUM=y
CONFIG_X86_F00F_WORKS_OK=y
CONFIG_X86_MCE=y
CONFIG_NOHIGHMEM=y
CONFIG_MTRR=y
CONFIG_SMP=y
CONFIG_X86_TSC=y
CONFIG_HAVE_DEC_LOCK=y
CONFIG_NET=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_LOCAL_APIC=y
CONFIG_PCI=y
CONFIG_PCI_GOANY=y
CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_NAMES=y
CONFIG_HOTPLUG=y
CONFIG_PCMCIA=y
CONFIG_CARDBUS=y
CONFIG_SYSVIPC=y
CONFIG_SYSCTL=y
CONFIG_KCORE_ELF=y
CONFIG_BINFMT_AOUT=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=y
CONFIG_PM=y
CONFIG_ACPI=y
CONFIG_ACPI_BOOT=y
CONFIG_ACPI_BUS=y
CONFIG_ACPI_INTERPRETER=y
CONFIG_ACPI_EC=y
CONFIG_ACPI_POWER=y
CONFIG_ACPI_PCI=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SYSTEM=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y
CONFIG_BLK_DEV_FD=y
CONFIG_BLK_DEV_LOOP=m
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_IPV6=y
CONFIG_IDE=y
CONFIG_BLK_DEV_IDE=y
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_IDEDISK_MULTI_MODE=y
CONFIG_BLK_DEV_IDECD=y
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_IDEPCI_SHARE_IRQ=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_AUTO=y
CONFIG_BLK_DEV_IDE_MODES=y
CONFIG_SCSI=m
CONFIG_IEEE1394=m
CONFIG_IEEE1394_OHCI1394=m
CONFIG_IEEE1394_RAWIO=m
CONFIG_NETDEVICES=y
CONFIG_DUMMY=m
CONFIG_NET_ETHERNET=y
CONFIG_NET_PCI=y
CONFIG_8139TOO=y
CONFIG_INPUT=y
CONFIG_INPUT_KEYBDEV=y
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
CONFIG_VT=y
CONFIG_VT_CONSOLE=y
CONFIG_SERIAL=y
CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256
CONFIG_MOUSE=y
CONFIG_PSMOUSE=y
CONFIG_INTEL_RNG=m
CONFIG_RTC=y
CONFIG_AGP=m
CONFIG_AGP_INTEL=y
CONFIG_AGP_I810=y
CONFIG_DRM=y
CONFIG_DRM_NEW=y
CONFIG_DRM_I810=m
CONFIG_DRM_I810_XFREE_41=y
CONFIG_REISERFS_FS=y
CONFIG_FAT_FS=m
CONFIG_VFAT_FS=m
CONFIG_TMPFS=y
CONFIG_RAMFS=y
CONFIG_ISO9660_FS=y
CONFIG_JOLIET=y
CONFIG_NTFS_FS=m
CONFIG_PROC_FS=y
CONFIG_DEVFS_FS=y
CONFIG_DEVFS_MOUNT=y
CONFIG_DEVPTS_FS=y
CONFIG_EXT2_FS=y
CONFIG_NFS_FS=m
CONFIG_NFS_V3=y
CONFIG_SUNRPC=m
CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y
CONFIG_MSDOS_PARTITION=y
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_VGA_CONSOLE=y
CONFIG_VIDEO_SELECT=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
CONFIG_FB_VESA=y
CONFIG_VIDEO_SELECT=y
CONFIG_FBCON_CFB8=y
CONFIG_FBCON_CFB16=y
CONFIG_FBCON_CFB24=y
CONFIG_FBCON_CFB32=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
CONFIG_SOUND=y
CONFIG_SOUND_ICH=y
CONFIG_USB=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_UHCI_ALT=y
CONFIG_USB_OHCI=y
CONFIG_USB_STORAGE=m
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_ISD200=y
CONFIG_USB_STORAGE_DPCM=y
CONFIG_USB_STORAGE_SDDR09=y
CONFIG_USB_STORAGE_SDDR55=y
CONFIG_USB_HID=y
CONFIG_USB_HIDINPUT=y
CONFIG_USB_HIDDEV=y

Die von mir aktuell verwendete .config unterscheidet sich kaum davon, daher nur ein diff (überspringen):

6a7,8
> CONFIG_LOLAT=y
> CONFIG_LOLAT_SYSCTL=y
15a18
> CONFIG_X86_ALIGNMENT_16=y
22a26
> CONFIG_1GB=y
24a29,30
> CONFIG_PREEMPT=y
> CONFIG_NR_CPUS=2
62a69
> CONFIG_NETFILTER=y
64a72,76
> CONFIG_IP_NF_IPTABLES=m
> CONFIG_IP_NF_MANGLE=m
> CONFIG_IP_NF_TARGET_TOS=m
> CONFIG_IP_NF_TARGET_MARK=m
> CONFIG_IP_NF_TARGET_LOG=m
75a88
> CONFIG_BLK_DEV_PIIX=m
77d89
< CONFIG_BLK_DEV_IDE_MODES=y
78a91,92
> CONFIG_BLK_DEV_SD=m
> CONFIG_SD_EXTRA_DEVS=40
80a95,96
> CONFIG_IEEE1394_SBP2=m
> CONFIG_IEEE1394_DV1394=m
81a98
> CONFIG_IEEE1394_OUI_DB=y
86a104,105
> CONFIG_NET_RADIO=y
> CONFIG_NET_WIRELESS=y
107a127
> CONFIG_DRM_I830=m
109a130
> CONFIG_MSDOS_FS=m
113c134
< CONFIG_ISO9660_FS=y
---
> CONFIG_ISO9660_FS=m
135c156
< CONFIG_FB_VESA=y
---
> CONFIG_FB_LOGO_TUX=y
136a158
> CONFIG_FB_INTEL=y
139d160
< CONFIG_FBCON_CFB24=y
143,148c164,170
< CONFIG_SOUND=y
< CONFIG_SOUND_ICH=y
< CONFIG_USB=y
< CONFIG_USB_EHCI_HCD=y
< CONFIG_USB_UHCI_ALT=y
< CONFIG_USB_OHCI=y
---
> CONFIG_SOUND=m
> CONFIG_SOUND_ICH=m
> CONFIG_USB=m
> CONFIG_USB_DEVICEFS=y
> CONFIG_USB_EHCI_HCD=m
> CONFIG_USB_UHCI_ALT=m
> CONFIG_USB_OHCI=m
155c177
< CONFIG_USB_HID=y
---
> CONFIG_USB_HID=m
157a180,182
> CONFIG_LOG_BUF_SHIFT=0
> CONFIG_CRYPTO=y
> CONFIG_FW_LOADER=m

Bemerkenswert ist hier lediglich CONFIG_BLK_DEV_PIIX=m, wodurch hdparm den DMA-Modus für die Festplatte aktivieren kann; sehr positiv. CONFIG_FB_INTEL ermöglicht die Verwendung des framebuffers mit dem speziellen Treiber für Intel, der CONFIG_FB_VESA tut es auch, ist aber etwas langsamer (nicht wesentlich); das Anhängen von vga=792 an die Kernel-Zeile in /etc/grub/grub.conf aktiviert ihn.

XFree86/Xorg

Mit XFree 4.3 kommt ein Treiber i810 für die Grafikkarte mit, der zur 82852/855GM kompatibel ist. Die Ausgabe auf dem Display arbeitet damit. Meine Versuche, an einem externen Monitor eine andere Ausgabe, als auf dem Display, und so Xinerama zu erhalten, sind leider bislang gescheitert. Knappes Statement von Intel: "Geht nicht, kann Linux nicht." Ohne Display kann der Controller immerhin 1600x1200 auf den Monitor schicken.

Die 3D-Beschleunigung war am Anfang ziemlich träge. Im Zuge von updates hat sich das (unbemerkt) gebessert: inzwischen läuft Armagetron auch bei höchster Grafikqualität flüssig. Inzwischen habe ich auf Xorg umgestellt und dadurch keinen Nachteil bemerkt.

Eingebautes Touchpad und am USB angeschlossene Maus (bzw. in meinem Fall: Trackball) können auch gleichzeitig betrieben werden, allerdings wird dies nicht durch Hardware emuliert, wie bei einigen anderen Notebooks, sondern muss konfiguriert werden. Die /etc/X11/xorg.conf (überspringen):

Section "ServerLayout"
	Identifier	"XFree86 Configured"
	Screen	0	"Monitor Screen" 0 0
	InputDevice	"Keyboard0"	"CoreKeyboard"
	InputDevice	"TouchPad"	"CorePointer"
	InputDevice	"TrackBall"	"AlwaysCore"
EndSection

Section "InputDevice"
	Identifier	"Keyboard0"
	Driver		"kbd"
	Option		"XkbLayout" "de"
	Option		"XkbVariant" "nodeadkeys"
	Option		"XkbModel" "pc105"
EndSection

Section "InputDevice"
	Identifier	"TouchPad"
	Driver		"mouse"
	Option		"Protocol" "auto"
	Option		"Device" "/dev/misc/psaux"
EndSection

Section "InputDevice"
	Identifier	"TrackBall"
	Driver		"mouse"
#	Option		"Protocol"	"auto"
	Option		"Protocol"	"ExplorerPS/2"
	Option		"Buttons"	"7"
	Option		"Device"	"/dev/input/mice"
	Option		"ZAxisMapping"	"4 5"
EndSection

Section "Monitor"
	DisplaySize	305 230	# mm
	Identifier   "TFT"
	VendorName   "PHL"
	ModelName    "700b"
	Option	    "DPMS"
EndSection

Section "Monitor"
	DisplaySize	400 295 # mm
	Identifier   "Monitor"
	VendorName   "PHL"
	ModelName    "700b"
	Option	    "DPMS"
EndSection

Section "Device"
	Identifier  "VGA Controller"
	Driver      "i810"
	VendorName  "Intel Corp."
	BoardName   "852GM/852GME/855GM/855GME Chipset Graphics Controller"
	BusID       "PCI:0:2:0"
EndSection

Section "Device"
	Identifier  "Display Controller"
	Driver      "i810"
	VendorName  "Intel Corp."
	BoardName   "852GM/852GME/855GM/855GME Chipset Graphics Controller"
	BusID       "PCI:0:2:1"
EndSection

Section "Screen"
	Identifier	"Monitor Screen"
	Device		"VGA Controller"
	Monitor		"Monitor"
	DefaultDepth	24
	SubSection	"Display"
		Depth	16
		Modes	"1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768"
	EndSubSection
	SubSection	"Display"
		Depth	24
		Modes	"1600x1200" "1280x1024" "1280x960" "1152x864" "1024x768"
	EndSubSection
EndSection

Section "Screen"
	Identifier	"TFT Screen"
	Device		"Display Controller"
	Monitor		"TFT"
	DefaultDepth	24
	SubSection	"Display"
		Depth	16
		Modes	"1024x768"
	EndSubSection
	SubSection	"Display"
		Depth	24
		Modes	"1024x768"
	EndSubSection
EndSection

Section "Module"
	Load		"glx"
	Load		"dri"
EndSection

Section "DRI"
	Mode		0666
EndSection

Sound

Der Kernel unterstützt die Soundkarte nativ dem CONFIG_SOUND_ICH, besser ist aber allemal die ALSA-Unterstützung. Das ALSA-sound-mini-HOWTO hilft dabei, dieses mit Berücksichtigung der Dokumentation für die intel8x0 anzuwenden sollte unproblematisch sein. Der relevante Teil von /etc/modules.conf:

alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-intel8x0
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
alias /dev/mixer snd-mixer-oss
alias /dev/dsp snd-pcm-oss
alias /dev/midi snd-seq-oss
options snd cards_limit=1

ACPI

Im Gegensatz zu APM, bei welchem die Steuerung von Stromsparfunktion und Co., unabhängig vom Betriebssystem, komplett dem BIOS obliegt, wird diese mit ACPI in die Hände des selbigen gelegt. Das macht es zwar wesentlich flexibler, in der Konfiguration aber auch etwas komplizierter.

Nochmal der relevante Teil aus der .config, um ACPI zu aktivieren:

root@harbard [~] # grep ACPI /boot/config-2.4.22-2003-301
# CONFIG_HOTPLUG_PCI_ACPI is not set
# ACPI Support
CONFIG_ACPI=y
# CONFIG_ACPI_HT_ONLY is not set
CONFIG_ACPI_BOOT=y
CONFIG_ACPI_BUS=y
CONFIG_ACPI_INTERPRETER=y
CONFIG_ACPI_EC=y
CONFIG_ACPI_POWER=y
CONFIG_ACPI_PCI=y
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_SYSTEM=y
CONFIG_ACPI_AC=y
CONFIG_ACPI_BATTERY=y
CONFIG_ACPI_BUTTON=y
CONFIG_ACPI_FAN=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_THERMAL=y
# CONFIG_ACPI_ASUS is not set
# CONFIG_ACPI_TOSHIBA is not set
# CONFIG_ACPI_DEBUG is not set
# CONFIG_ACPI_RELAXED_AML is not set

Damit wird die Taktfrequenz stufenlos zwischen ca. 12MHz und 1300MHz geregelt (Messung mit x86info).

Events des kernels können mit dem acpid abgefangen werden. Dieser wird in /etc/acpi/ konfiguriert. In diesem Verzeichnis wird mit der Datei events festgelegt, auf welche events der daemon mit was reagieren soll. Events haben eine group und eine action, die als string durch Leerzeichen getrennt an den acpid übergeben werden. In einer Zeile wird jeweils mit event= festgelegt, auf welches event reagiert werden soll, mit action= mit welcher Aktion. So wird z. B. mit event=button power.*
action=/sbin/init 0
festgelegt, dass beim Drücken des Powerknopfes der Rechner runtergefahren wird. Da das recht unflexibel ist, überlässt man die genaue Entscheidung einem shellscript. Mit event=.*
action=/etc/acpi/acpi_handler.sh %e
werden alle events an dieses script übergeben. Das Metazeichen %e wird dabei durch den vollständigen string, den der Kernel gesandt hat, ersetzt. Ein gutes Grundgerüst für dieses script kommt mit dem acpid mit. Interessant ist dabei noch das event button lid, welches das Schließen des Deckels signalisiert. Weitere können ggf. /usr/src/linux/include/acpi/acpi_drivers.h entnommen werden.

Eine andere Schnittstelle zum ACPI-Interface des kernels wird durch /proc/acpi/* gegeben. Darin finden sich allerlei nützliche Informationen über den Zustand des Notebooks: wie voll ist der Akku noch, ist das Netzteil gerade angeschlossen, etc. (Wer dazu eine Liste hat, bitte per mail an mich.) Die meisten der dortigen Dateien funktionieren lesend und schreibend. So kann mit einem read() auf /proc/acpi/processor/CPU0/performance festgestellt werden, mit welcher maximalen Taktfrequenz der Rechner gerade betrieben wird. Mit einem write() auf die gleiche Datei kann diese manuell festgelegt werden, was den eigentlich sowieso schon selten betriebenen Lüfter gänzlich zum Schweigen bringen kann.

Ein anderes interessantes file ist /proc/acpi/sleep: damit kann man feststellen, welche states der Kernel unterstützt (mehr oder weniger) bzw. definieren, in welchen Zustand der Rechner gebracht werden soll. Mögliche Zustände sind auf der Linux-ACPI-Seite aufgelistet. Ganz trivial kann also ein root@harbard [~] # echo 1 >/proc/acpi/sleep den Rechner in den stopgrant-mode, eine light Version von suspend-to-RAM, schalten. Da ich noch einige Dienste runterfahren will, bevor ich das tue, wird das hier von einem shellscript erledigt:

#!/bin/sh

/etc/init.d/chronyd stop
/sbin/hwclock --systohc
echo 1 >/proc/acpi/sleep
/sbin/hwclock --hctosys
/etc/init.d/chronyd start

Das wird mit sudo dem unprivelegiertem Nutzer zur Verfügung gestellt.

Echter suspend-to-RAM oder gar suspend-to-disk ist mir bislang noch nicht gelungen. Für uspend-to-disk in der Theorie wird 4 nach /proc/acpi/sleep geschrieben und der Kernel lagert den gesamten Speicher in die swap-Partition. Beim erneuten Booten muss mit dem Kernel-Parameter resume= gesagt werden, von welcher Partition er den Zustand neu laden soll (Kommentare willkommen).

Beim Testen mit /proc/acpi/sleep ist etwas Vorsicht geboten: in gewissen Zuständen schaltet der Rechner einfach ab. Vor dem Spielen also unbedingt alle Partitionen unmounten bzw. readonly remounten. Weiter Informationen finden sich im ACPI-HowTo.

WLAN

Besonders wichtig war mir natürlich die Funktion des WLAN-Adapters. Sämtliche Versuche mit dem ndiswrapper liefen ins Leere. Glücklicherweise gab es irgendwann ipw2100. Die Installation ist trivial, evtl. müssen hostap zzgl. includes installiert werden. Mit modprobe kann das LKM geladen werden: root@harbard [~] # modprobe ipw2100 if_name="wlan%d" Das Metazeichen %d im Interface-Namen wird durch die nächste freie Nummer ersetzt. Der Treiber sucht sich automatisch das erste Netz und meldet dessen ESSID im /var/log/messages, ggf. kann mit iwconfig ein anderes Netz gewählt werden. Zu vom Treiber unterstützen Verschlüsselungen kann ich keine Aussage machen.

Offene Fragen

Für die sachdienliche Beantwortung einer dieser Fragen wird eine hohe (noch näher zu definierende) Belohnung gezahlt. Sendet mir Hinweise.

Kontakt

Falls Sie Fragen oder Kommentare haben, senden Sie mir eine Mail.

Copyright 2004, Frank Grüllich.

TuxMobil - Linux on laptops, notebooks, PDAs and mobile phones Valid XHTML 1.1! Valid CSS!