Letztes Update: 00:29h - 03. Mär 2006  

TuxMobil - Linux on Laptops, Notebooks, PDAs and Mobile Phones   
In diesem HowTo möchte ich die Installation von Gentoo Linux auf einen Asus W5F Notebook beschreiben und Informationen für diejenigen geben, die eine Anschaffung in Erwägung ziehen. Natürlich lässt sich diese HowTo auch auf ander Linux-Distributionen übertragen :-)

Das Asus W5F ist ein 12" kleines und 1,6kg schweres Notebook und basiert auf der Centrino-Duo-Technologie von Intel. Es ist mit einem doppelkernigen 1,66GHz Yonah-Prozessor (T2300) mit 2MB L2-Cache ausgestattet. Das Notebook besitzt 1GB Ram und eine 100GB Festplatte und reicht somit speichermässig vollkommen aus. Zur weiteren Linuxkompatibilität kann ich nur sagen dass es sich im Vergleich zum Vorgänger (Asus W5000 Serie) in ACPI-Kompatibilität gebessert hat und meine bisherigen Notebooks in Sachen Kompatibilität alle geschlagen hat. Im allgemeinen ist die Kompatibilität meiner Ansicht ganz gut und erbringt unter Linux mit aktuellen Kernel eine sehr gute Performance.

Asus liefert das Notebook mit 2 Akkus (2400mAh und 4800mAh) und einer kabellosen Bluetooth Maus aus. Mit beiden Akkus kommt man über den ganzen Tag gut aus, da Hibernation mit Suspend2 gut unterstützt wird. Die Bluetooth Maus ist auch sehr praktisch, da man Sie auf der Rückseite ein- bzw. ausschalten kann um nicht zu sehr die Batterien zu strapazieren. Ausserdem hat legt Asus noch einen drauf und hat im Standardumfang 2 Notebooktaschen dazugelegt. Eine, wie ich finde, der schönsten Notebooktaschen mit Trageriemen und eine komfortable Slim-Neopren Notebooktasche um das Notebook mal schnell unter die Hand zu nehmen.

Ich habe das Notebook unter Campuspoint zu einem Preis von ca. 1900€ erhalten. Campuspoint ist vom Support her 1a und immer erreichbar, freundlich und kompetent :-)

Foto 1
Foto 2
Foto 3
Foto 4
Foto 5
Foto 6
Foto 7
Foto 8
Foto 9
Foto 10
Foto 11


Aber zunächst erstmal ein Einblick zu der Hardwareausstattung und seinen Status zur Linuxkompatibilität:
Hardware im Asus W5F
Prozessor Intel Centrino Duo Mobiltechnologie (Napa) mit Intel Core Duo (1.66 GHz/ 2 MB/ FSB667 Yonah) Intel 945GM Chipsatz (Lakeport) funktioniert
RAM 1024 MB DDR2-533 PC2-4200 SO-DIMM, max. 1024 MB (1x 512MB onboard und 1 Steckplatz mit je 512 MB belegt) funktioniert
Festplattenlaufwerk 100 GB, UDMA100, 5.400 U/min funktioniert
Optisches Laufwerk Ultra Slim 2x DVD Super Multi (+/-) Brenner funktioniert
Display 12,1 Zoll WXGA Widescreen Glare Type / Brightness Enhance TFT; 1280 x 800 funktioniert
Grafikkarte Intel 945GM Express Chipsatz mit Intel Graphics Media Accelerator (GMA) 950 mit max. 224 MB shared VRAM funktioniert
Modem integriertes Motorola SM56 V.90 56K Data Fax Modem nicht getestet
LAN Realtek On-board 10/100 Mbps Ethernet Controller funktioniert
Soundkarte Realtek High Definition Audio Controller (Azalia kompatibler Audio Chip mit 3D Effect und Full Duplex, eingebauten Speakern und Mikrofon) funktioniert
Expresscard Expresscard54 nicht getestet
Cardreader Ricoh 4-in-1 Card Reader (MMC/SD/MS/MS-Pro) in Entwicklung
USB Intel integrierter USB 2.0 Controller funktioniert
Firewire Ricoh IEEE1394 (Firewire) funktioniert
Bluetooth ASUSTek integrierter USB Bluetooth-Dongle funktioniert
Wireless LAN Intel PRO/Wireless 3945ABG WLAN 802.11a/b/g funktioniert
ACPI Asus W5F00005 ACPI funktioniert
Akku 2400mAh/4800mAh funktioniert
Webcam 1.3 Mega Pixel Z-Star Vimicro Camera in Entwicklung
Hibernate hibernate-scripts/suspend2 funktioniert
# lspci
00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller (rev 03)
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 02)
00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #3 (rev 02)
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #4 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02)
07:00.0 Network controller: Intel Corporation Unknown device 4222 (rev 02)
08:03.0 FireWire (IEEE 1394): Ricoh Co Ltd Unknown device 0832
08:03.1 Class 0805: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 19)
08:03.2 System peripheral: Ricoh Co Ltd Unknown device 0843 (rev 01)
08:03.3 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 0a)
08:03.4 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 05)
08:04.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)

Gentoo

Es empfiehlt sich das System zunächst mit einer Stage3 zu installieren. Dazu nutzt man bei den CFLAGS am besten -march=pentium3 und richtet sich nur das Elementare ein. Später upgraded man gcc auf gcc-3.4 oder höher (Ich empfehle gcc-3.4, da gcc-4.0 bei vielen Dingen Probleme machen soll). Wenn gcc-3.4 als Standardcompiler eingerichtet ist, dann wechselt man auf -march=pentium-m und kompiliert sein ganzes System mit emerge -e system und späteren emerge -e world neu. Dabei können einige Komplikationen auftreten, weshalb ich auf die üblichen Gentoo HowTos zum Update auf gcc3.4 verweise (GCC 3.4, Migrate to GCC 3.4)
Im fertigen System würde ich einen gepatchten suspend2-Kernel empfehlen um auch in den Genuss von Hibernation Suspend zu kommen. Gentoo bietet dazu im Portage die fertigen suspend2-sources die sich hervorragend dafür eignen.

Meine /etc/make.conf sieht aktuell folgendermassen aus
/etc/make.conf
CFLAGS="-O3 -march=pentium-m -fforce-addr -momit-leaf-frame-pointer -fomit-frame-pointer -ftracer -pipe"
CHOST="i686-pc-linux-gnu"
CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden"
ACCEPT_KEYWORDS="~x86"
PORTAGE_TEMPDIR=/var/tmp
PORTDIR=/usr/portage
DISTDIR=${PORTDIR}/distfiles
PKGDIR=${PORTDIR}/packages
PORT_LOGDIR=/var/log/portage
# Break my gentoo: /usr/local/overlays/bmg-main #
PORTDIR_OVERLAY=" \
        /usr/local/overlays/local \
        /usr/local/overlays/gentoo-de \
        /usr/local/overlays/gentopia \
"
GENTOO_MIRRORS=" \
        http://gentoo.zie.pg.gda.pl \
        http://ftp.easynet.nl/mirror/gentoo/ \
        http://ftp-stud.fht-esslingen.de/pub/Mirrors/gentoo/ \
"
RSYNC_RETRIES=3
RSYNC_TIMEOUT=180
MAKEOPTS="-j4"
PORTAGE_NICENESS=3
# AUTOCLEAN="yes"
FEATURES="ccache distlocks sandbox userpriv usersandbox"
CCACHE_SIZE="2G"
RSYNC_EXCLUDEFROM=/etc/portage/rsync/excludes
USE="7zip a52 aac aalib acpi aim alsa apache2 arts asm audiofile avi \
     bash-completion bluetooth bmp buttons bzip2 \
     cddb cdparanoia cdr css cups \
     dbus dga divx4linux dpms dri dts dv dvb dvd dvdr dvdread dxr3 \
     encode exif fame ffmpeg flac flash ftp gif gimpprint gnokii gnome gphoto2 gtk gtk2 gtkhtml \
     hal i810 icq ieee1394 imap irda jabber java javascript joystick jpeg jpeg2k \
     kde ldap lirc live lzo \
     mad matroska mbox mikmod ming mjpeg mmx mng mozilla mp3 mpeg msn musepack mysql \
     ncurses network nptl ogg openal opengl oscar oss \
     perl php pic png portaudio povray ppds pthreads python \
     qt quicktime real rtc ruby scanner sdl smp sndfile sox sql sse sse2 subversion svg svga \
     tcltk tetex threads tiff transcode truetype urandom usb unicode v4l vcd vidix \
     wifi win32codecs wmf xinerama xml xmms xosd xpm xprint xscreensaver xv xvid yahoo yv12"
INPUT_DEVICES="keyboard mouse synaptics wacom"
VIDEO_CARDS="vesa i810"
Dies soll nur als Beispiel dienen. Ich rate dringend davon ab diese make.conf einfach zu benutzen. Jeder hat andere Bedürfnisse und hat nicht unbedingt Lust am "unstable"-System zu basteln.
Als Partitionierung habe ich mir folgendes Schema überlegt
Partitionierung
 Name   Flags   Part. Typ   Dateisystemtyp   Mountpoint     Größe (MB)
 ---------------------------------------------------------------------
 hda1   Boot    Primäre     Linux ext2       /boot             98,71
 hda2           Primäre     Swap             swap            1497,01
 hda3           Primäre     Linux ext3       /               5000,98
 hda5           Logische    Linux ext3       /usr           15002,92
 hda6           Logische    Reiser           /usr/portage    5000,98
 hda7           Logische    Linux ext2       /tmp            1003,49
 hda8           Logische    Linux ext3       /home          72423,60
Dabei wurde von mir jedes EXT3-Dateisystem mit mkfs.ext3 -o dir_index /dev/hdaX formatiert mit noatime gemountet um schnellere Dateizugriffe zu erhalten. Das ReiserFS für /usr/portage eignet sich besonders, da sehr viele kleine *.ebuild dort abgelegt werden und man einen sehr guten Performancegewinn erreichen kann, weil ReiserFS sehr performant bei kleinen und vielen Dateien arbeitet. Das ReiserFS-Dateisystem habe ich mit notail, noatime gemountet.

Prozessor

Das erste was man macht wenn man das erste mal eine Dualcore CPU besitzt, ist das man sich /proc/cpuinfo anschaut und wirklich glaubt was man dort im System hat ;-)
# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 14
model name      : Genuine Intel(R) CPU           T2300  @ 1.66GHz
stepping        : 8
cpu MHz         : 1662.830
cache size      : 2048 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi
                  mmx fxsr sse sse2 ss ht tm pbe nx pni monitor vmx est tm2 xtpr
bogomips        : 3331.72

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 14
model name      : Genuine Intel(R) CPU           T2300  @ 1.66GHz
stepping        : 8
cpu MHz         : 1662.830
cache size      : 2048 KB
physical id     : 0
siblings        : 2
core id         : 1
cpu cores       : 2
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi
                  mmx fxsr sse sse2 ss ht tm pbe nx pni monitor vmx est tm2 xtpr
bogomips        : 3331.72
Es werden wie erwartet 2 Prozessoren vom System erkannt. Deshalb kompilieren wir den Kernel mit SMT-Unterstützung und dem richtigen Prozessor-Typ (Pentium-M)
Kernel 2.6.15 Konfiguration
Processor type and features  --->
  Subarchitecture Type (PC-compatible)  --->
    (X) PC-compatible
  Processor family (Pentium M)  --->
    (X) Pentium M
  [*]   SMT (Hyperthreading) scheduler support
Power management options (ACPI, APM)  --->
  CPU Frequency scaling  --->
    [*] CPU Frequency scaling
    Default CPUFreq governor (userspace)  --->
      (X) userspace
    <*>   'performance' governor
    <*>   'powersave' governor
    <*>   'ondemand' cpufreq policy governor
    <*>   'conservative' cpufreq governor
    <*>   ACPI Processor P-States driver
    <*>   Intel Enhanced SpeedStep
Nun bietet es sich an ein Userspace Programm für die Kontrolle der Taktstufen einzurichten. Dazu benutze ich
cpufreqd.
Installation von cpufreqd
# emerge cpufreqd
# rc-update add cpufreqd default
# /etc/init.d/cpufreqd start
Dannach läuft der cpufreqd-Dämon auch schon und ist somit Einsatzbereit. Man kann noch die /etc/cpufreqd.conf nach eigenen Vorstellungen anpassen, allerdings sind die Werte für meine Benutzung des Notebooks mehr als ausreichend.

Festplattenlaufwerk

# hdparm -tT /dev/hda
/dev/hda:
 Timing cached reads:   4044 MB in  2.00 seconds = 2021.87 MB/sec
 Timing buffered disk reads:  114 MB in  3.03 seconds =  37.60 MB/sec
# hdparm -i /dev/hda
/dev/hda:

 Model=FUJITSU MHV2100AH, FwRev=00000096, SerialNo=NT35T5C25U8R
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=0
 BuffType=DualPortCache, BuffSize=8192kB, MaxMultSect=16, MultSect=16
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=195371568
 IORDY=yes, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4
 DMA modes:  mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 udma2
 AdvancedPM=yes: mode=0x80 (128) WriteCache=enabled
 Drive conforms to: ATA/ATAPI-6 T13 1410D revision 3a:  ATA/ATAPI-2 ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5
                    ATA/ATAPI-6

 * signifies the current active mode

Optisches Laufwerk

# hdparm -tT /dev/cdrom
/dev/cdrom:
 Timing cached reads:   4044 MB in  2.00 seconds = 2021.87 MB/sec
 Timing buffered disk reads:    2 MB in  3.87 seconds = 528.89 kB/sec
# hdparm -i /dev/cdrom
/dev/hdb:

 Model=MATSHITADVD-RAM UJ-832S, FwRev=1.00, SerialNo=
 Config={ Fixed Removeable DTR<=5Mbs DTR>10Mbs nonMagnetic }
 RawCHS=0/0/0, TrkSize=0, SectSize=0, ECCbytes=0
 BuffType=unknown, BuffSize=0kB, MaxMultSect=0
 (maybe): CurCHS=0/0/0, CurSects=0, LBA=yes, LBAsects=0
 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4
 DMA modes:  sdma0 sdma1 sdma2 mdma0 mdma1 mdma2
 UDMA modes: udma0 udma1 *udma2
 AdvancedPM=no
 Drive conforms to: Unspecified:  ATA/ATAPI-3 ATA/ATAPI-4 ATA/ATAPI-5 ATA/ATAPI-6

 * signifies the current active mode

Konfiguration von X.Org (Grafikkarte, Display, Touchpad und externe Maus)

Es bietet sich an auf den neuesten modularen X.Org 7.0 umzusteigen (Gentoo HowTo: Umstieg von X.Org6.9 -> X.Org7.0) und regelmässig die neuesten i915 Treiber auszuprobieren. Bis zu meinen letzten Stand funktionieren die neuesten i915-Treiber noch nicht mit der integrierten Grafiklösung, deshalb verwende ich persönlich bis dahin noch Vesa als Treiber. Über Vesa läuft der X.Org Server einwandfrei und lässt sich sogar über hibernate und suspend2 problemlos in den Schlaf legen.
Für X.Org 7.0 nutze ich folgendermassen gesetzte Variablen in der /etc/make.conf (Es kommt wahrscheinlich in Zukunft noch ein Wacom-Zeichentablet dazu :-) )
X.Org 7.0 Variablen in /etc/make.conf
...
INPUT_DEVICES="keyboard mouse synaptics wacom"
VIDEO_CARDS="vesa i810"
...
Damit der X-Server in später die richtige Widescreen Auflösung nutzen kann, müssen wir erstmal einen kleinen Hack auf das VESA-Bios ausführen. Dazu laden wir uns das Tool i915resolution von http://www.geocities.com/stomljen/ herunter und installieren es.
Installation von i915resolution
# tar -zxvf 915resolution-0.5.2.tar.gz
# cd 915resolution-0.5.2
# make
# make install
Dannach liegt i915resolution in /usr/sbin und wir müssen es nur beim Systemstart mit einigen Parametern aufrufen um die Auflösung 1280x1024 im Vesa-BIOS mit 1280x768 zu überschreiben. Die Überschreibung bleibt nur solange das System neugestartet wird, deshalb packen wir den Aufruf in das Startskript /etc/conf.d/local.start
/etc/conf.d/local.start
/usr/sbin/915resolution 58 1280 768 32 &> /var/log/915.log
Da der Grafikadapter noch ziemlich neu ist, müssen wir uns von http://dri.freedesktop.org/snapshots/ aktuelle Treiber für unseren X-Server holen. Ich habe es mit der Treiberzusammenstellung common-20060301-linux.i386, i810-20060301-linux.i386 und i915-20060301-linux.i386 erfolgreich zum laufen gebracht. Dabei hatte ich auch 3D-Beschleunigung bei OpenGL-Anwendungen. Ausserdem müssen wir noch von http://www.fairlite.demon.co.uk/intel.html die libshadow.so herunterladen damit unser X-Server überhaupt startet. Diese aktuellere Library nach Aussagen des Entwicklers Alan Hourihane von neueren und für diesen Grafikadapter funktionierenden i810-Treiber benötigt.

Da ich persönlich die suspend2-sources-2.6.15 als Kernel verwende, da ich gerne Hibernation-Unterstützung habe, muss man den Kernel (2.6.15er) mit intel-agp.patch und pci_ids.patch Patches behandeln. Die Patches habe ich mir dazu aus dem 2.6.16er Git-Tree erzeugt.
Wenden wir die Patches nun mal zunächst an und erzeugen uns einen neuen Kernel mit dem wir erstmal ausgestattet sind
Beispiel: Patchen der suspend2-sources-2.6.15
# cd /usr/src/linux-2.6.15-suspend2-r6
# patch -p0 < /usr/src/patches/intel-agp.patch
# patch -p0 < /usr/src/patches/pci_ids.patch
Wenn der Kernel dann fertig gebacken ist, können wir die X-Server Treiber erzeugen (WICHTIG ist dabei die Reihenfolge der Schritte einzuhalten). Es darf beim installieren der Treiber kein X-Server laufen, also mit killall gdm (kdm, xdm, ...) oder was man verwendet beenden. Eventuell vorhandene Treiber mit rmmod i915 und rmmod drm aus dem Speicher schmeissen.
Treiber für den X-Server kompilieren
# tar -jxvf common-20060301-linux.i386.tar.bz2
# tar -jxvf i810-20060301-linux.i386.tar.bz2
# tar -jxvf i915-20060301-linux.i386.tar.bz2
# mkdir 945gm
# cp -R common-20060301-linux.i386/* 945gm
# cp -R i810-20060301-linux.i386/* 945gm
# cp -R i915-20060301-linux.i386/* 945gm
# cd 945gm
# ./install.sh
Alle Fragen einfach mit Enter bestätigen und dann sind die Treiber fertig und im System installiert.
Sicherheitshalber kann man es nochmals mit lsmod kontrollieren
Kontrolle mit lsmod
# lsmod
Module                  Size  Used by
i915                   14912  1
drm                    50776  2 i915
...
Wenn die Treiber nicht geladen sind, dann mit modprobe i915 drm nachholen.
WICHTIG: Damit diese neuen Treiber auch funktionieren, müssen wir die libshadow.so in den X-Server Module Pfad kopieren
Die alte libshadow.so mit aktuellerer ersetzen
# mv /usr/lib/xorg/modules/libshadow.so /usr/lib/xorg/modules/libshadow.so.orig
# cp libshadow.so /usr/lib/xorg/modules/
Dann können wir den X-Server konfigurieren
/etc/X11/xorg.conf
Section "Module"
        Load            "dbe"  # Double buffer extension
        SubSection      "extmod"
                Option          "omit xfree86-dga"  # don't initialise the DGA extension
        EndSubSection
        Load            "type1"
        Load            "speedo"
        Load            "freetype"
        # Load            "xtt"
        Load            "glx"
        Load            "dri"
EndSection

Section "Files"
        Fontpath        "/usr/share/fonts/misc/"
        FontPath        "/usr/share/fonts/TTF/"
        FontPath        "/usr/share/fonts/Type1/"
        FontPath        "/usr/share/fonts/75dpi"
        FontPath        "/usr/share/fonts/100dpi"
        FontPath        "/usr/share/fonts/local/"
EndSection

Section "InputDevice"
        Identifier      "Keyboard"
        Driver          "kbd"
        Option          "AutoRepeat" "500 30"

        Option          "XkbModel" "pc105"
        Option          "XkbLayout" "de"
        Option          "XkbVariant" "nodeadkeys"
EndSection

Section "InputDevice"
        Identifier      "Touchpad"
        Driver          "synaptics"
        Option          "Device" "/dev/psaux"
        Option          "Protocol" "auto-dev"
        Option          "LeftEdge" "1700"
        Option          "RightEdge" "5300"
        Option          "TopEdge" "1700"
        Option          "BottomEdge" "4200"
        Option          "FingerLow" "25"
        Option          "FingerHigh" "30"
        Option          "MaxTapTime" "180"
        Option          "MaxTapMove" "220"
        Option          "VertScrollDelta" "100"
        Option          "MinSpeed" "0.06"
        Option          "MaxSpeed" "0.12"
        Option          "AccelFactor" "0.0010"
        Option          "SHMConfig" "on"
        # Option        "Repeater" "/dev/ps2mouse"
EndSection

Section "InputDevice"
        Identifier      "Mouse"
        Driver          "mouse"
        Option          "Protocol" "ImPS/2"
        Option          "Device" "/dev/input/mice"
        Option          "ZAxisMapping" "4 5"
        Option          "Emulate3Buttons"
EndSection

Section "Monitor"
        Identifier      "Asus W5F LCD"
        HorizSync       31.5 - 82.0
        VertRefresh     60
        ModeLine        "1280x768" 80.14 1280 1344 1480 1680 768 769 772 795 -HSync +Vsync
        Option          "dpms"
EndSection

Section "Device"
        Identifier      "Intel 945GM"
        Driver          "i810"
        VideoRam        238848
        BusID           "PCI:00:02:0"
EndSection

Section "Screen"
        Identifier      "Default Screen"
        Device          "Intel 945GM"
        Monitor         "Asus W5F LCD"
        DefaultDepth    16  # Bei 24 Bit Farbtiefe ist DRI nicht so schnell wie bei 16 Bit Farbtiefe

        Subsection "Display"
                Depth           16
                Modes           "1280x768" "1024x768" "800x600" "640x480"
                ViewPort        0 0
        EndSubsection
        
        Subsection "Display"
                Depth           16
                Modes           "1280x768" "1024x768" "800x600" "640x480"
                ViewPort        0 0
        EndSubsection        
EndSection

Section "ServerLayout"
        Identifier              "Simple Layout"
        Screen                  "Default Screen"
        InputDevice             "Touchpad" "AlwaysCore"
        InputDevice             "Mouse" "CorePointer"
        InputDevice             "Keyboard" "CoreKeyboard"
EndSection

Section "DRI"
        Mode            0666
EndSection
Um dann das Synaptics-Touchpad unter Gentoo zu nutzen, installieren wir noch die Treiber und Usertools dazu
# modprobe 8139too
# emerge synaptics
Jetzt können wir den X-Server mithilfe eines Loginmanagers wie gdm, kdm, xdm, ... oder einfach startx starten.

Ich habe mal 2 Vergleiche mit 16 Bit Farbtiefe und 24 Bit Farbtiefe gemacht, um zu sehen was man für einbussen macht
# glxgears mit 16 Bit Farbtiefe
# glxgears
und bei 24 Bit Farbtiefe
# glxgears mit 24 Bit Farbtiefe
# glxgears
5613 frames in 5.0 seconds = 1122.521 FPS
5624 frames in 5.0 seconds = 1124.645 FPS
5624 frames in 5.0 seconds = 1124.708 FPS
Über die libGL warning: 3D driver claims to not support visual Warnungen brauch man sich nicht weiter Gedanken machen.

Nun muss jeder für sich selbst entscheiden wie er seinen X-Server betreiben will. Dazu muss man einfach DefaultDepth in der xorg.conf auf den entsprechenden Wert setzen.

Weitere Konfiguration von Framebuffer über Vesa-TNG folgt... (funktioniert)

Modem

Motorola bietet direkt Treiber für das Modem unter http://www.motorola.com/softmodem/driver.htm#linux an. Leider kann ich die Treiber nicht testen, da Sie keinen Source dazu liefern um sie auf aktuellen Kerneln zu kompilieren. Bei Gelegenheit werde ich mal nebenbei einen älteren Kernel kompilieren um die Treiber zu testen.

LAN

Die LAN-Karte funktioniert mit dem 8139too Modul und kann mit ifconfig konfiguriert werden
# modprobe 8139too
8139too Fast Ethernet driver 0.9.27
ACPI: PCI Interrupt 0000:08:04.0[A] -> GSI 20 (level, low) -> IRQ 22
eth0: RealTek RTL8139 at 0xf90c2400, 00:15:f2:a6:e2:c5, IRQ 22
eth0:  Identified 8139 chip type 'RTL-8101'

Soundkarte

Die Soundkarte wird über ALSA im Kernel betrieben und wird durch das snd-hda-intel Modul unterstützt.
# Kernel 2.6.15 Konfiguration für ALSA mit hda-intel
Device Drivers  --->
  Sound  --->
    <*> Sound card support
    Advanced Linux Sound Architecture  --->
      <M> Advanced Linux Sound Architecture
      <M> Sequencer support
      <M> OSS Mixer API
      <M> OSS PCM (digital audio) API
      [*] OSS Sequencer API
      <M> RTC Timer support
      [*]   Use RTC as default sequencer timer
      PCI devices  --->
        <M> Intel HD Audio
Wenn der Kernel mit dem entsprechenden Modul kompiliert ist, starten wir das System neu und richten die Soundkarte ein. Die nötigen ALSA-Tools installieren wir aus dem Portage mit und richten die Soundkarte dann mit alsaconf ein.
# Kernel 2.6.15 Konfiguration für ALSA mit hda-intel
# emerge alsa-tools alsa-utils alsa-lib
# alsaconf
Die Soundkarte produziert so ein komisches Schallplattenrauschen im Hintergrund wenn man irgendwelche Lieder abspielt. Um das zu verhindern, müssen wir einen Eintrag in /etc/modules.autoload.d/kernel-2.6 hinzufügen (Bei neueren Kerneln tritt dieses Problem nicht mehr auf)
Modulparameter in /etc/modules.autoload.d/kernel-2.6 angeben
...
snd-hda-intel position_fix=1
...
Wenn wir jetzt das Notebook neustarten sollte das Problem nicht mehr auftreten.

Das einzige Problem bei dieser Soundkarte ist, dass Sie keinen Hardwaremixer besitzt und man unter Umständen eine Softwarelautstärkeregelung benutzen muss. Ich habe es über den esd-Sounddämon hingekriegt und kann die Lautstärke nun damit ändern. Eine schönere Lösung würde das ALSA-Plugin softvol, indem man es in ~/.asoundrc konfiguriert. Ich habe es leider noch nicht hingekriegt,aber es müsste irgendwie folgendermassen funktionieren:
~/.asoundrc
pcm.!default {
  type plug
  slave.pcm {
    type softvol
    slave.pcm "hw:0,0"
    control {
      name Master
      card 0
    }
  }
  card 0
  subdevice 0
}

Expresscard

Asus macht direkt keine Aussagen zu dem vorhandenen Expresscard-Slot und viele Online-Shops bezeichnen den Eingang fälschlicher Weise wohl aus Unwissenheit als PCMCIA Eingang. Expresscard ist der Nachfolger von PCMCIA und ich bin mir nicht sicher ob es schon einen Treiber fuer diese Hardware gibt. Leider habe ich keine passende Karte zum testen, aber ich bin mir sicher, wenn die passende Hardware in grösseren Mengen produziert wird, wird es sicherlich früher oder später einen Treiber dafür geben, da die Hardware sehr ähnlich zu PCI-E Hardware gebaut werden müsste, wenn nicht sogar dazu kompatibel ist.

Hier mal ein Auszug aus der
Wikipedia:
Als Nachfolger der PCCard32 wurde von der PCMCIA die ExpressCard (Codename: NEWCARD) entwickelt, die es als ExpressCard/34 (34 mm breit/5mm dick) und als ExpressCard/54 (54mm breit/5mm dick, wobei der Anschluss dem des ExpressCard/34 entspricht, wodurch die ExpressCard/54 eine L-Form hat) geben wird. Eine ExpressCard/34 ist damit fast um die Hälfte kleiner als eine PCMCIA-Karte der vergangenen Generation. Die ExpressCard kann sowohl als USB 2.0- als auch als PCI Express-Schnittstelle eingesetzt werden. Mit einer maximalen Datenrate von ca. 500 Mb/s (250 Mb/s Duplex) ist sie fast vier mal schneller als eine PCCard32. Weitere Vorteile der ExpressCard sind ihre günstigeren Herstellungskosten sowie eine geringere Leistungsaufnahme. Im Gegensatz zu bisherigen Karten verfügen Notebooks mit ExpressCard-Slot über keine Auswurftaste; vielmehr steht eine ExpressCard leicht über, so dass sie jederzeit schnell und einfach entfernt werden kann.

ExpressCards sind nicht abwärtskompatibel zu normalen PCMCIA-Karten. Es ist also nicht möglich, solche Karten in herkömmlichen Slots oder vorhandene PCMCIA- bzw. Cardbus-Karten in einem ExpressCard-Slot zu betreiben.
Als weitere Informationsquelle dazu kann ich ausserdem noch diesen Bericht von Tecchannel empfehlen, der auch einiges an sinnvollen Informationen zu dem Thema macht.

Leider ist Expresscard nicht abwärtskompatibel zu PCMCIA, so dass die einzige Möglichkeit eine PCMCIA-Karte in Betrieb zu nehmen ein USB-PCMCIA-Adapter ist.

Cardreader

Anscheinend soll der Cardreader über ein Treiber vom SDHCI Projekt funktionieren. Ich habe meinen Kernel mit dem Patch von der Mailingliste gepatched und er erkennt den Kartenleser auf jeden Fall. Meine etwas ältere 256MB MMC-Karte erkennt das System aber dennoch nicht und ich habe keine anderen Speicherkarten um das Gerät zu testen.

Zunächst muss man den Kernel patchen damit man den Treiber in der Kernelkonfiguration auswählen kann. Dazu besorgt man sich die 3 Patches von hier und legt sie in meinen Fall in /usr/src/ ab. Dann patchen wir den Kernel
Patchen des Kernel 2.6.15 mit den SDHCI Patchset
# cd /usr/src
# wget http://list.drzeus.cx/pipermail/sdhci-devel/attachments/20060205/ebf78fd6/sdhci-0001.bin
# wget http://list.drzeus.cx/pipermail/sdhci-devel/attachments/20060205/ebf78fd6/pci-sdhc-0001.bin
# wget http://list.drzeus.cx/pipermail/sdhci-devel/attachments/20060205/ebf78fd6/mmc-respopcode-0001.bin
# cd linux-2.6.15
# patch -p1 <../sdhci-0001.bin
# patch -p1 <../pci-sdhc-0001.bin
# patch -p1 <../mmc-respopcode-0001.bin
Nach diesem Vorgehen haben wir dann in der Kernelkonfiguration ein neues Gerät zur Auswahl, welches wir prompt auswählen und den Kernel neu kompilieren.
Konfiguration des Kernel 2.6.15 mit SDHCI als Modul
Device Drivers  --->
  MMC/SD Card support  --->
    <M> MMC support 
    [*]   MMC debugging
    <M>   MMC block device driver
    <M>   Secure Digital Host Controller Interface support  (EXPERIMENTAL)
Dannach wird das Modul beim Neustart per Hotplug automatisch geladen oder man lädt das Modul manuell mit modprobe sdhci.
# dmesg
sdhci: Secure Digital Host Controller Interface driver, 0.11
sdhci: Copyright(c) Pierre Ossman
sdhci [sdhci_probe()]: found at 0000:08:03.1
sdhci [sdhci_probe()]: found 1 slot(s)
sdhci [sdhci_probe_slot()]: slot 0 at 0xfe8ff400, irq 22
sdhci: ============== REGISTER DUMP ==============
sdhci: Sys addr: 0x00000000 | Version:  0x00000200
sdhci: Blk size: 0x00000000 | Blk cnt:  0x00000000
sdhci: Argument: 0x00000000 | Trn mode: 0x00000000
sdhci: Present:  0x01f20000 | Host ctl: 0x00000000
sdhci: Power:    0x00000000 | Blk gap:  0x00000000
sdhci: Wake-up:  0x00000000 | Clock:    0x00000000
sdhci: Timeout:  0x0000000e | Int stat: 0x00000000
sdhci: Int enab: 0xe1ff00cf | Sig enab: 0xe1ff00cf
sdhci: AC12 err: 0x00000000 | Slot int: 0x00000000
sdhci: Caps:     0x018021a1 | Max curr: 0x00000040
sdhci: ===========================================
sdhci [sdhci_set_ios()]: clock 0Hz busmode 1 powermode 0 cs 0 Vdd 0 width 0
sdhci [sdhci_set_ios()]: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 21 width 0
mmc0: SDHCI at 0xfe8ff400 irq 22 PIO
sdhci [sdhci_set_ios()]: clock 128906Hz busmode 1 powermode 2 cs 0 Vdd 21 width 0
sdhci [sdhci_set_ios()]: clock 128906Hz busmode 1 powermode 2 cs 1 Vdd 21 width 0
MMC: starting cmd 00 arg 00000000 flags 00000000
sdhci [sdhci_tasklet_finish()]: Ending request, cmd (0)
MMC: req done (00): 1: 00000000 00000000 00000000 00000000
sdhci [sdhci_set_ios()]: clock 128906Hz busmode 1 powermode 2 cs 0 Vdd 21 width 0
MMC: starting cmd 37 arg 00000000 flags 00000029
sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)
MMC: req done (37): 1: 00000000 00000000 00000000 00000000
MMC: starting cmd 37 arg 00000000 flags 00000029
sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)
MMC: req done (37): 1: 00000000 00000000 00000000 00000000
MMC: starting cmd 37 arg 00000000 flags 00000029
sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)
MMC: req done (37): 1: 00000000 00000000 00000000 00000000
MMC: starting cmd 37 arg 00000000 flags 00000029
sdhci [sdhci_tasklet_finish()]: Ending request, cmd (37)
MMC: req done (37): 1: 00000000 00000000 00000000 00000000
MMC: starting cmd 01 arg 00000000 flags 00000001
sdhci [sdhci_tasklet_finish()]: Ending request, cmd (1)

USB

Es müssen im Kernel lediglich die Treiber für USB aktiviert sein die man brauch und nutzen will, dannach funktioniert USB Problemlos wie man es von Linux gewohnt ist.
USB Treiber im Kernel 2.6.15 aktivieren
Device Drivers  ---> 
  USB support  ---> 
    <M> Support for Host-side USB 
    <M>   EHCI HCD (USB 2.0) support
    <M>   OHCI HCD support
    <M>   UHCI HCD (most Intel and VIA) support
    <M> USB Mass Storage support
        ...
    <M> USB Human Interface Device (full HID) support
        ...

Firewire

Wir müssen lediglich die Firewire-Treiber im Kernel aktivieren und dann geht es auch schon los. Ich habe Firewire mit meiner externen Festplatte getestet und konnte damit arbeiten.
Firewire Treiber im Kernel 2.6.15 aktivieren
Device Drivers  ---> 
  IEEE 1394 (FireWire) support  --->
    <M> IEEE 1394 (FireWire) support
    <M>   OHCI-1394 support
    <M>   OHCI-1394 Video support
    <M>   SBP-2 support (Harddisks etc.)
    <M>   Ethernet over 1394
    <M>   OHCI-DV I/O support
    <M>   Raw IEEE1394 I/O support
Nun noch den Kernel kompilieren und neustarten, dann müssen wir nur noch die Module laden, falls nicht längst automatisch durch Hotplug geschehen.
Firewire Module laden
# modprobe ieee1394
# modprobe sbp2
# modprobe eth1394
# ...
Mithilfe von sbp2 können wir dann z.B. eine externe Festplatte über Firewire am System anstöpseln und sie mit mount /dev/sda /mnt/sda mounten (Wenn der Mountpoint mit mkdir erstellt ist natürlich :-).

Bluetooth

Im Kernel werden erstmal die nötigen Bluetooth-Treiber aktiviert.
Bluetooth Treiber im Kernel 2.6.15 aktivieren
Networking  --->
  <M>   Bluetooth subsystem support  --->
    <M>   L2CAP protocol support
    <M>   SCO links support
    <M>   RFCOMM protocol support
    [*]     RFCOMM TTY support
    <M>   BNEP protocol support
    [*]     Multicast filter support
    [*]     Protocol filter support
    <M>   HIDP protocol support
    Bluetooth device drivers  --->
      <M> HCI USB driver 
  
Nach einem neuen Kernel installieren wir erstmal die für Bluetooth benötigten Programme mit
Bluetooth Programme installieren
# emerge bluez-utils bluez-libs gnome-bluetooth
# rc-update add bluetooth default
# /etc/init.d/bluetooth start
Dannach können wir einmal den Bluetooth/WLAN Schalter am Notebook einschalten. Wenn die Bluetooth-LED am Notebook leuchtet können wir fortfahren. In /etc/conf.d/bluetooth, /etc/bluetooth/hcid.conf, /etc/bluetooth/pin und /etc/bluetooth/rfcomm.conf können wir das Bluetooth bis ins feinste konfigurieren. Für meine und die für die meisten Zwecke reicht die Standardkonfiguration schon aus. Man kann seinen integrierten Bluetooth-Dongle noch einen anderen Namen in /etc/bluetooth/hcid.conf geben. Dazu ändert man einfach name "BlueZ (%d)"; in einen anderen Namen.
Da der Schalter für Bluetooth/WLAN ein ACPI-Event schickt, bietet es sich an beim einschalten von Bluetooth das Start-Skript für den Bluetooth-Dämon neuzustarten, ansonsten macht man es einfach immer manuell mit /etc/init.d/bluetooth restart, wenn man es Bluetooth benötigt.

Um die beiliegende Bluetooth-Maus von Asus (Logitech) in Betrieb zu nehmen, reicht es einfach folgende Befehle auszuführen
Bluetooth Maus einbinden
# hidd --server
# hidd --search
Während hidd nach einem Bluetoothgerät (unsere Maus) sucht, muss man die Maus natürlich eingeschaltet haben und unter der Maus den Reset-Schalter für 2 Sekunden gedrückt halten bis das Lämpchen anfängt zu blinken. Nur dann kann die Maus gefunden und im System als Inputdevice eingebunden werden.

Um Dateien an ein Handy zu schicken nutzt man das Programm gnome-obex-send. Man ruft es einfach mit der Datei die man ans Handy senden will als Parameter auf und wählt im Dialog sein gefundenes Handy aus.
Beispiel: Dateien an ein Handy senden
# gnome-obex-send /home/bart/handytools/fileexplorer.sis
Um Dateien auf dem Notebook vom Handy zu empfangen, benutzt man das Programm gnome-obex-server. Man ruft das den Server einfach auf und sendet eine Datei an das Bluetooth-Dongle des Notebooks. Nach kurzer Zeit erscheint dann ein Dialog zum annehmen der Datei vom Handy.

Wireless LAN

Ein Treiber der aktiv entwickelt wird wird von James Ketrenos, einen Entwickler der Linux Intel-Treiber, unter dem Sourceforge ipw3945-Projekt gepflegt. Die aktuellen Versionen funktionieren auch schon und deshalb beschreibe ich hier wie man vorgehen muss um den Treiber zu installieren.
Um den ipw3945-Treiber zu benutzen benötigen wir einen aktuellen Microcode und den ipw3945d-Dämon. Ausserdem benötigen wir noch das ieee80211 Subsystem in einer Version >= 1.1.12.

Den Microcode ipw3945.ucode aus dem Archiv packen wir in /lib/firmware (Falls das Verzeichnis noch nicht existiert, erstellt man es sich einfach mit mkdir).
Den Dämon ipw3945d aus dem Archiv packen wir in /sbin/.
Jetzt müssen wir das ieee80211 Subsystem installieren (Ich empfehle es lieber aus einem aktuellen Archiv zu installieren, da die Portagelösung für mich ein wenig Probleme bereitet). Dazu entpacken wir als "root"das Archiv, kompilieren es und installieren es im System
ieee80211 installieren
# tar -zxvf ieee80211-1.1.12.tgz
# cd ieee80211-1.1.12
# make
# make install
Sollte die Installation dannach fragen etwas in den Kernelsourcen zu entfernen und zu modifizieren, muss man es mit [Y] beantworten. Das dient dazu dass das ieee80211 Subsystem aus dem Kernel nicht stört und muss dazu dort entfernt werden. Am besten sichert man sich die Kernelsourcen nocheinmal ab wenn man Angst hat dass etwas schief geht.

Nun installieren wir den ipw3945-Treiber. In meinen Beispiel verwende ich die Sourcen in der Version 0.0.69, die schon mit simplen WLan Angelegenheiten wie WEP & co funktionieren.
ipw3945 Treiber installieren
# tar -zxvf ipw3945-0.0.69.tgz
# cd ipw3945-0.0.69
# make
# make install
# cp load /sbin/ipw3945-load
# cp unload /sbin/ipw3945-unload
Nun ist der Treiber auch schon betriebsbereit und ihm folgendermassen benutzen. ACHTUNG: Während man den Treiber mit modprobe lädt muss der WLan/Bluetooth Switch am Notebook eingeschaltet sein, andernfalls funktioniert es nicht wenn man den Schalter später aktiviert. Am besten lädt man den Treiber beim passenden ACPI-Key-Event.
ipw3945 Treiber laden
# modprobe ipw3945
# ipw3945-load debug=0
Nun können wir das Wirelessdevice mit iwconfig und ifconfig konfigurieren.
Beispiel: iwconfig
# iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

eth1      unassociated  ESSID:off/any
          Mode:Managed  Channel=0  Access Point: Not-Associated
          Bit Rate=0 kb/s   Tx-Power:15 dBm
          Retry limit:15   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:2   Missed beacon:0
Der ipw3945-Treiber benutzt auch die LED am unteren Rand des Notebooks. Verschiedene Blinkgeschwindigkeiten haben verschiedene Bedeutungen, welche man sich unter http://ipw3945.sourceforge.net/README.ipw3945 erlesen kann. Dort befinden sich auch genauere Details zur Benutzung des Treibers.

Alternative Lösung (leider noch nicht zum funktionierenden Betrieb zu gebrauchen)

Eine alternative Lösung bietet sich mithilfe des ndiswrappers. Allerdings kriegt man damit die Karte nicht vollständig in Betrieb.

Die WLAN-Karte hat die PCI-Id 8086:4222 und gibt sich unter lspci als Network controller: Intel Corporation Unknown device 4222 (rev 02). Ich benutze dazu die Version ndiswrapper-1.11rc1 von deren Sourceforge-Projekt.
Zunächst müssen wir den Kernel mit dem "16K Stacks"-Patch patchen. Dazu holen wir uns den Patch von http://www.linuxant.com/driverloader/wlan/downloads-patches.php und legen ihm in /usr/src ab.
Patch für 16K Stacks im Kernel 2.6.15 anwenden
# cd /usr/src/linux-2.6.15
# patch -p1 <../linux-2.6.15-16kstacks.patch
Nun können wir in der Kernelkonfiguration "16K Stacks" auswählen.
16K Stacks im Kernel 2.6.15 auswählen
Kernel hacking  --->
  [ ]   Use 4Kb for kernel stacks instead of 8Kb
  [*] Use 16Kb for kernel stacks instead of 8Kb 
Dann müssen wir nur noch den Kernel konfigurieren und nach einem Neustart den ndiswrapper installieren.
Den ndiswrapper einrichten
# tar -zxvf ndiswrapper-1.11rc1.tar.gz
# cd ndiswrapper-1.11rc1
# make
# make install
Dann noch die Windowstreiber von http://www.intel.com/support/wireless/wlan/sb/cs-010623.htm in der Version 10.1.0.13 (80MB!!!) besorgen und die Dateien w39n51.inf und w39n51.sys daraus entpacken.
Den Treiber mit ndiswrapper installieren und laden
# ndiswrapper -i w39n51.inf
# ndiswrapper -l
Installed drivers:
w39n51          driver installed, hardware present
# modprobe ndiswrapper
Letztendlich kann man das Gerät mit iwconfig und ifconfig konfigurieren. Man muss natürlich drauf achten das der Schiebeknopf auf Bluetooth/WLAN steht, dann erkennt der ndiswrapper das WLAN-Gerät (Es leuchtet ausserdem eine blaue LED unten für WLAN auf). Mein Access-Point erkennt auch die angemeldete 3945ABG-Karte bei sich, allerdings kann ich den Access-Point weder pingen oder sonst was mit anfangen, weshalb die WLAN-Karte noch ziemlich nutzlos für mich bleibt.

ACPI

ACPI läuft soweit fast uneingeschränkt und ohne Probleme wenn man die richtigen Optionen im Kernel aktiviert. In den neueren 2.6.x Kernel ist sogar ein spezielles asusacpi als Option vorhanden, welche man unbedingt aktivieren sollte um den vollen Funktionsumfang des Notebooks zu erhalten.
Auf dem Notebook gibt es nur 3 Tasten/Knöpfe die kein ACPI-Event senden. Das sind Fn+F2 (WLan On/Off), Camera-Zoom +/- und Camera-Snapshot an der rechten Seite des Displays. Fn+F2 für das WLan ist allerdings überhaupt nicht notwendig, da man diese Funktion auch auf eine andere Taste legen kann die später nur den Treiber für die WLan-Karte lädt/entlädt. Der Schiebeschalter um das WLan ein- bzw. auszuschalten funktioniert ja auch noch.

Um ACPI auf dem Notebook nutzen zu können, geht man in die Kernel-Konfiguration und wählt
ACPI im Kernel 2.6.15 aktivieren
Power management options (ACPI, APM)  --->
  [*]   Legacy Power Management API
  ACPI (Advanced Configuration and Power Interface) Support  --->
    [*] ACPI Support
    [*]   Sleep States
    <M>   AC Adapter
    <M>   Battery
    <M>   Button
    <M>   Video
    <M>   Generic Hotkey (EXPERIMENTAL)
    <M>   Fan
    <M>   Processor
    <M>     Thermal Zone
    <M>   ASUS/Medion Laptop Extras
Nachdem der Kernel fertig ist, tragen wir noch asus_acpi und die anderen benötigten Module in die /etc/modules.autoload.d/kernel-2.6 und starten unser System neu.
/etc/modules.autoload.d/kernel-2.6
...
# ACPI
ac
asus_acpi
battery
button
fan
processor
thermal
video
acpi-cpufreq
...
In /proc/acpi/asus_acpi erhalten wir somit die Kontrolle über einige der Notebookfunktionen (z.b. Displayhelligkeit ändern)

Es ist natürlich noch das beste den Tasten die ein ACPI-Event erhalten eine Funktion zuzuordnen. Dazu installiert man sich erstmal die ACPI-Tools mit
ACPI-Tools installieren
# emerge acpid acpi acpitool
# rc-update add acpid default
# /etc/init.d/acpid start
Jetzt können wir in /etc/acpi/events die Events abfangen und bearbeiten. Dazu erzeugt man sich in diesem Verzeichnis z.b. einige Dateien wie evt-btnbrightdown, evt-btnemail, evt-btnlcdon, evt-btnrunner, evt-btnvoldown, evt-btnbluetoothoff, evt-btnbrightup, evt-btnlcdcrt, evt-btnlidclose, evt-btnsleep, evt-btnvolmute, evt-btnbluetoothon, evt-btnbrowser, evt-btnlcdoff, evt-btnmicroswitch, evt-btntouchpadswitch und evt-btnvolup um alle Events die möglich sind zu bearbeiten. Diese Dateien sind Skripte die folgenden Inhalt als Beispiel haben
/etc/acpid/events/evt-btnbrowser
event=ATKD 00000051 .*
action=/etc/acpi/actions/act-btnbrowser.sh %e
Somit wird bei einem Event "ATKD 00000051" das in action angegebene Skript aufgerufen. %e ist ein Parameter der angibt wie oft die Taste seit Systemstart gedrückt wurde.

Hier noch ein Überblick über alle Tasten-Events des Notebooks:
Key-Events
event=.*
action=/etc/acpi/default.sh %e

event=ATKD 00000001 .*
action=/etc/acpi/actions/act-btnbluetoothoff.sh %e

event=ATKD 00000000 .*
action=/etc/acpi/actions/act-btnbluetoothon.sh %e

event=ATKD 0000002.*
action=/etc/acpi/actions/act-btnbrightdown.sh %e

event=ATKD 0000001.*
action=/etc/acpi/actions/act-btnbrightup.sh %e

event=ATKD 00000051 .*
action=/etc/acpi/actions/act-btnbrowser.sh %e

event=ATKD 00000050 .*
action=/etc/acpi/actions/act-btnemail.sh %e

event=ATKD 00000061 .*
action=/etc/acpi/actions/act-btnlcdcrt.sh %e

event=ATKD 00000034 .*
action=/etc/acpi/actions/act-btnlcdoff.sh %e

event=ATKD 00000033 .*
action=/etc/acpi/actions/act-btnlcdon.sh %e

event=button/lid LID 00000080 .*
action=/etc/acpi/actions/act-btnlidclose.sh %e

event=ATKD 0000007c .*
action=/etc/acpi/actions/act-btnmicroswitch.sh %e

event=ATKD 0000005c .*
action=/etc/acpi/actions/act-btnrunner.sh %e

event=button/sleep SLPB 00000080 .*
action=/etc/acpi/actions/act-btnsleep.sh %e

event=ATKD 0000006b .*
action=/etc/acpi/actions/act-btntouchpadswitch.sh %e

event=ATKD 00000031 .*
action=/etc/acpi/actions/act-btnvoldown.sh %e

event=ATKD 00000032 .*
action=/etc/acpi/actions/act-btnvolmute.sh %e

event=ATKD 00000030 .*
action=/etc/acpi/actions/act-btnvolup.sh %e
Ich habe mir die ganzen Skripte mal mit einen schicken OSD ausprogrammiert. So erhält man während man in X eingeloggt ist einen schicken On-Screen-Display, vorausgesetzt man hat seine X-Oberfläche für "localhost" freigegeben. Meine Events/Actions Konfiguration für ACPI kann man unter
http://netster.de/asus_w5f/etc-acpi-23022006.tar.bz2 herunterladen und folgendermassen einrichten
Fertige ACPI Events und Actions einrichten
# cd /
# tar -jxvf /.../.../etc-acpi-23022006.tar.bz2
# /etc/init.d/acpid restart
Damit das alles funktioniert und das OSD angezeigt wird, legen wir für die Freigabe der X-Oberfläche die Datei /etc/X11/xinit/xinitrc.de/99xhost an und geben ihr Ausführrechte mit "chmod 755 /etc/X11/xinit/xinitrc.de/99xhost"
/etc/X11/xinit/xinitrc.de/99xhost
#!/bin/sh
/usr/bin/xhost +
Mir ist aufgefallen dass das DSDT des Asus W5F nicht ganz "clean" ist, deshalb habe ich das DSDT einmal dekompiliert und bearbeitet. Es sind zwar keine sichtbaren/erkennbaren Unterschiede wie mit dem originalen DSDT, aber vielleicht finde ich noch heraus was auf dem Notebook noch nicht funktioniert hat.
Dazu installieren wir erstmal den iasl-DSDT-Compiler von Intel (Bei Problemen während des Kompilierens gibt es ein Abwärts-Kompatibilitäts-Problem mit flex. Dazu von flex einfach eine ältere Version installieren, dann iasl kompilieren und wieder flex auf die neueste Version upgraden)
iasl installieren
# emerge iasl
Nun geht man in irgendein Arbeitsverzeichnis und macht folgendes
DSDT dekompilieren/kompilieren
# cp /proc/acpi/dsdt .
# iasl -dc dsdt
Intel ACPI Component Architecture
AML Disassembler version 20060127 [Feb 22 2006]
Copyright (C) 2000 - 2006 Intel Corporation
Supports ACPI Specification Revision 3.0a

Loading Acpi table from file dsdt
Acpi table [DSDT] successfully installed and loaded
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)
.........................................................................................
Parsing completed
Disassembly completed, written to "dsdt.dsl"

Compiling "dsdt.dsl"
dsdt.dsl  8056:             XOr (Local0, 0x01, Local0)
Warning  2097 -                       ^ Statement is unreachable

dsdt.dsl  8261:             Return (Local0)
Warning  2097 - Statement is unreachable ^

ASL Input:  dsdt.dsl - 8698 lines, 247358 bytes, 4022 keywords
AML Output: DSDT.aml - 30612 bytes 998 named objects 3024 executable opcodes

Compilation complete. 0 Errors, 2 Warnings, 0 Remarks, 1034 Optimizations
Nun haben wir dort 2 warnings. Um diese zu beseitigen, öffnen wir die dsdt.dsl und gehen zu der Zeile 8056
dsdt.dsl: Zeile 8056
Method (CHGS, 1, Serialized)
{
  Store (\_SB.PCI0.SBRG.EC0.RPIN (0x63), Local0)
  Return (Local0)
  XOr (Local0, 0x01, Local0)
  Return (Local0)
}
Hier ist klar, dass das XOr nie erreicht werden kann, weil davor immer mit Return aus der Funktion rausgegangen wird, also entfernen wir die Zeile mit dem ersten Return (Local0).
Nun gehen wir noch zum 2.ten warning in Zeile 8261
dsdt.dsl: Zeile 8261
Method (OTGB, 0, Serialized)
{
  Store (One, Local0)
  Store (\RGPL (0x09, 0x01), Local0)
  XOr (Local0, 0x01, Local0)
  \SGPL (0x09, 0x01, Local0)
  Return (Local0)
  Return (Local0)
}
Hier sehen wir ein unnötiges doppeltes "Return (Local0)". Wir entfernen einfach eins davon.
Nun speichern wir die dsdt.dsl mit den Änderungen ab und kompilieren sie neu
dsdt.dsl neu kompilieren
# iasl -tc dsdt.dsl
Intel ACPI Component Architecture
ASL Optimizing Compiler version 20060127 [Feb 22 2006]
Copyright (C) 2000 - 2006 Intel Corporation
Supports ACPI Specification Revision 3.0a

ASL Input:  dsdt.dsl - 8696 lines, 247302 bytes, 4020 keywords
AML Output: DSDT.aml - 30608 bytes 998 named objects 3022 executable opcodes

Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 1034 Optimizations
Jetzt haben wir eine saubere DSDT.aml. Diese kopieren wir erstmal nach /boot/
Um die neue DSDT zu nutzen müssen wir den Kernel patchen und die DSDT.aml als initrd dem Kernel übergeben. Dazu gehen wir auf http://gaugusch.at/kernel.shtml und holen uns den Patch für unseren Kernel. Wenn der Patch in /usr/src liegt, dann führen wir folgendes aus
Beispiel: DSDT patch für Kernel 2.6.15 anwenden
# cd /usr/src/linux-2.6.15
# patch -p1 <../acpi-dsdt-initrd-patch-v0.7e-2.6.14.patch
In der Kernel-Konfiguration aktivieren wir dann
DSDT aus initrd laden als Option im Kernel 2.6.15
Power management options (ACPI, APM)  --->
  ACPI (Advanced Configuration and Power Interface) Support  --->
    [*]   Read Custom DSDT from initrd
Und zuletzt müssen wir grub noch sagen wie er unseren Kernel starten soll. Dazu geben wir die neue DSDT.aml als initrd-Parameter an den Kernel weiter
Beispiel: /etc/boot/grub.conf
title=Gentoo Linux 2.6.15
root (hd0,0)
kernel (hd0,0)/linux-2.6.15 ...
initrd (hd0,0)/DSDT.aml
Nun noch das System neustarten und sich freuen dass man eine saubere DSDT benutzt :-)

Akku

Die beiden von Asus mitgelieferten Akkus arbeiten problemlos im Notebook. Es empfiehlt sich über das BIOS eine komplette Ladung/Entladung der beiden Akkus vorzunehmen. Wenn man das 2-3mal gemacht hat, dann sollte der Akku seine volle Kapazität nutzen. Im Moment habe ich mit dem 2400mAh Akku eine Akkulaufzeit von ca. 2:00h und beim 4800mAh Akku eine Akkulaufzeit von ca. 3:30h. Das bei normalen Betrieb des Notebooks mit wechselnden Taktraten zwischen 996GHz und 1,66GHz. Will man mal einen Akku für längere Zeit nicht benutzen, dann empfehle ich den Akku bei 50% Ladekapazität rauszunehmen und an einen kühlen und trockenen Ort aufzubewahren.

Der 2400mAh Akku gibt sich folgendermassen aus
Informationen zum 2400mAh Akku bei voller Ladekapazität
# cat /proc/acpi/battery/BAT0/info
present:                 yes
design capacity:         25630 mWh
last full capacity:      25047 mWh
battery technology:      rechargeable
design voltage:          11100 mV
design capacity warning: 2563 mWh
design capacity low:     1276 mWh
capacity granularity 1:  253 mWh
capacity granularity 2:  253 mWh
model number:            W5-3124
serial number:
battery type:            LIon
OEM info:                ASUSTEK

# cat /proc/acpi/battery/BAT0/state
present:                 yes
capacity state:          ok
charging state:          discharging
present rate:            12639 mW
remaining capacity:      25047 mWh
present voltage:         12107 mV
und der 4800mAh
Informationen zum 4800mAh Akku bei voller Ladekapazität
# cat /proc/acpi/battery/BAT0/info
present:                 yes
design capacity:         51260 mWh
last full capacity:      49698 mWh
battery technology:      rechargeable
design voltage:          11100 mV
design capacity warning: 5126 mWh
design capacity low:     2563 mWh
capacity granularity 1:  506 mWh
capacity granularity 2:  506 mWh
model number:            W5-3224
serial number:
battery type:            LIon
OEM info:                ASUSTEK

# cat /proc/acpi/battery/BAT0/state
present:                 yes
capacity state:          ok
charging state:          discharging
present rate:            12408 mW
remaining capacity:      49698 mWh
present voltage:         12273 mV

Webcam

Ich bin im Moment mit Michel Xhaard vom spca5xx-Projekt im Kontakt und er versucht über meine USB-Snoops aus Windows einen Treiber zu programmieren.

Hibernate/Suspend

Das Notebook in den Schlaf legen und wieder aufwecken funktioniert einwandfrei. Ich erläutere das Vorgehen mit suspend2. Ich würde empfehlen die aktuellen suspend2-sources vom Portage zu benutzen, da sie recht aktuell und mit allen notwendigen Dingen gepatched sind.
Wenn man den 1GB Ram benutzt, dann empfiehlt es sich ca. 30% mehr an Speicher für Swap zu nutzen. Man sollte es sich vorher überlegen ob man Swap noch grösser anlegt, falls man in Zukunft ein Ram-Update in Erwägung zieht. Mit 1.5GB an Swap bei 1GB Ram liegt man schon im grünen Bereich, wenn man auf Nummer sicher gehen will nimmt man 2GB Swap.
hibernate-script und suspend2-sources installieren und konfigurieren
# emerge suspend2-sources hibernate-script suspend2-userui
# cd /usr/src/linux-2.6.XX-suspend2-XX
# make menuconfig
Dann trägt man in /etc/hibernate/blacklisted-modules das Modul battery ein (Unbedingt als Modul kompilieren), da beim aufwachen das ACPI-System den letzten Stand der Dinge annimmt (Also wenn vor Suspend das Notebook am Netzteil war und beim aufwachen am Akku, dann hat man keine Batterieladeanzeige).
Wenn wir nun /dev/hdaS als Swap-Partition annehmen, dann tragen wir in /etc/hibernate/hibernate.conf folgende Zeilen ein
/etc/hibernate/hibernate.conf konfigurieren
...
UseSuspend2 yes
...
SuspendDevice swap:/dev/hdaS
...
Nun müssen wir in Grub noch eine kleine Änderung am Kernel-Parameter mitgeben, damit das Notebook bei aufwachen Suspend2 nutzt
/boot/grub/grub.conf konfigurieren
...
kernel (hd0,0)/linux-2.6.XX-suspend2-XX root=/dev/hdaX resume2=swap:/dev/hdaS
...
Nun können wir als "root" das Notebook mit hibernate wann immer wir wollen in den Schlaf legen.
Hibernation
# hibernate



Dieses HowTo wurde von Bartosz Muszynski erarbeitet. Fragen, Vorschläge, Berichtigungen gehen an: ,o;i|@s.u,r:f|m.a,s:t.a,@:gm|ai.l,.c:o|m.,:|.,@|.,