FreeBSD auf Thinkpad T410

s-tlk

Lion King Fan
Huhu,
ich dachte, weil die Frage ja immer wieder mal auftaucht, schreibe ich auch etwas darueber wie ich mein Laptop installiert und konfiguriert habe, in der Hoffnung das es vllt jemandem hilft.

Hierbei handelt es sich um ein Thinpad T410 mit Core i5 2.66 GHz, 2Gb Ram, 320Gb Platte und einer Nvidia Quadro 3100. Das Geraet ist gut verarbeitet, mit Metallscharnieren fuer das Klappdisplay, der Rest ist wie leider heute ueblich alles Plastik, aber macht trotzdem einen robusten Eindruck. Lediglich am Einschalter gibt die Blende manchmal etwas nach, wenn ich mit meinen grossen Pfoetchen zu feste druecke. Sonst aber keine Probleme.

Im BIOS, habe ich den ganzen Schnick-Schnack, wie Webcam und Fingerprint Reader komplett abgestellt. Ich brauche das nicht und es kostet schliesslich Strom. Dazu habe ich die on"chip" Grafikkarte des Core i5 deaktiviert und Nvidias "Optimus" (das ist das kontinuierliche Umschalten zwischen onchip und externer Grafikkarte), sonst werdet ihr keine Freude haben. Danach konnte es auch schon losgehen.

Installiert habe ich ueber mfsBSD (http://mfsbsd.vx.sk/), also das 64Bit Image heruntergeladen und auf eine CD gebrannt. Da dies lediglich ein Gedaechtnisprotokoll ist, bitte ich darum, das nicht einfach ohne nachzudenken in eine Shell zu pasten. Das soll lediglich als Orientierung dienen.

Ich moechte eine GPT Partition:
Code:
gpart create -s GPT ad0

Zum booten sollten 64K jawohl ausreichen, also:
Code:
gpart add -s 128 -t freebsd-boot ad0

Dann der Rest, fuer root gibt es 20GB, fuer Swap 2.5, das hatte ich dummerweise vergessen, ist aber kein Problem, da man ja auch beliebig swap files erstellen kann. Home bekommt den Rest.
Code:
gpart add -s 20G -t freebsd-ufs ad0
gpart add -s 2500M -t freebsd-swap ad0
gpart add -t freebsd-ufs ad0

Dann den Bootcode rein:
Code:
gpart bootcode -b /boot/pmbr ad0
gpart bootcode -p /boot/gptboot -i 1 ad0

Anschliessend das Filesystem mit Label "root" drauf.
Code:
newfs -UL root /dev/ad0p2

Das mounten wir nun nach /mnt und erstellen einen Ordner
Code:
mount /dev/ad0p2 /mnt
mkdir /mnt/install

So, nun muessen wir uns das System besorgen. Wir koennen das direkt auf einem anderen Rechner fuer die Architektur bauen und per scp ueber Netzwerk kopieren, oder direkt von freebsd.org laden. Man braucht als minimales System nur kernels, und base (das Basissystem).

Dann setzen wir die Variable DESTDIR nach /mnt und fuehren install aus:
Code:
setenv DESTDIR /mnt
sh install.sh

Das selbe fuer den Kernel:
Code:
sh install.sh generic

Den kopieren wir jetzt um, bevor ich das nachher noch vergesse, denn sonst muss man in stage2 tippen und ihn manuell laden:
Code:
mv /mnt/boot/GENERIC /mnt/boot/kernel

Jetzt muessen wir uns nur noch eine passende rc.conf und fstab zurecht legen. In letzterer mounten wir einfach das root System (mit geladenem ahci!):
Code:
/dev/ada0p3   none               swap     sw      0       0
/dev/ufs/root   /               ufs     rw      0       0
So neustarten: Nach dem boot, wird alles gut. :)

Nach dem booten einfach als root einloggen (ohne Passwort) und ein Passwort vergeben. Nun richten wir noch die home Partition ein. Die sollte aber verschluesselt sein, also die uebliche geli chain abklappern:
Code:
dd if=/dev/random of=/root/.home.key bs=64 count=1
geli init -K /root/.home.key /dev/ad0p4
geli attach -k /root/.home.key /dev/ad0p4
newfs -UL home /dev/ad0p4.eli

und den Ordner erstellen mit symlink wohin wir gerne mounten moechten:
Code:
mkdir /usr/home
ln -s /usr/home /home

Das muessen wir nun noch der fstab bekannt machen und damit ich beim booten die Passwort-Abfrage bekomme ein:
Code:
# Geli
geli_devices="ada0p4"
geli_ada0p3_flags="-k /root/.home.key"
in dir rc.conf.

Soweit wars das auch schon, das ganze Feintuning kommt jetzt. Ich gehe einfach mal durch. Meine rc.conf:
Code:
# Hostname
hostname="tp.pride.land"

# Network
ifconfig_em0="DHCP"

wlans_iwn0="wlan0"
ifconfig_wlan0="down"

# SSHD
sshd_enable="YES"

# Powerd
powerd_enable="YES"
powerd_flags="-a hadp -b adp"

# Loolerd
loolerd_enable="YES"

# Linux compat
linux_enable="YES"

# Geli
geli_devices="ada0p3"
geli_ada0p3_flags="-k /root/.home.key"

# Moused
moused_enable="YES"
moused_type="auto"
moused_flags="-V -U 2"

# Allow C2
performance_cx_lowest="C2"
economy_cx_lowest="C2"

sysctl.conf
Code:
# Disable bell
hw.syscons.bell=0

# FS Optimizations
vfs.read_max=32
vfs.ufs.dirhash_maxmem=134217728

# Sound
hw.snd.default_unit=5
hw.snd.vpc_mixer_bypass=0
hw.snd.maxautovchans=32

# Bluetooth off
dev.acpi_ibm.0.bluetooth=0

Bei der loader.conf faellt mir ein, das ich hier vllt sagen sollte, das ich mir aus Current die neuste Intel Firmware und Treiber (iwn) fuer die 6300er Karte gezogen habe. Damit laeuft die Wlan Karte einwandfrei. Auf draft-n muss man wohl noch etwas warten, aber das benutze ich eh nicht, sonst rennt sie mit dem Treiber aus current sehr gut.
Code:
# Delay
autoboot_delay="4"

# No p4tcc
hint.p4tcc.0.disalbed=1
hint.p4tcc.1.disalbed=1
hint.p4tcc.2.disalbed=1
hint.p4tcc.3.disalbed=1

# No power for hardware without driver
hw.pci.do_power_nodriver=3

# No throtteling
hint.acpi_throttle.0.disabled=1

# Less ticks for power safety
kern.hz=100

# Disable APIC clock
hint.apic.0.clock=0

# AHCI Driver
ahci_load="YES"

# Linux
linux_load="YES"

# CPUfreq
cpufreq_load="YES"

# Geli
geom_eli_load="YES"

# Sound
sound_load="YES"
snd_hda_load="YES"

# Nvidia
nvidia_load="YES"

# ACPI
acpi_ibm_load="YES"

# Coretemp
coretemp_load="YES"

# USB
usb_load="YES"
ehci_load="YES"
uhci_load="YES"
ukbd_load="YES"
ums_load="YES"
umass_load="YES"

# Wlan
if_iwn_load="YES"
Das meiste lade ich wie man sieht als Modul. Hat fuer kleine Bastelloewen wie mich den Vorteil, das man schnell was austauschen kann ohne den ganzen Kernel neu zu bauen und das kann man dynamisch laden und entladen. Braucht allerdings einen angepassten Kernel.

Etwas geknobelt habe ich an der Beleuchtungskontrolle fuer das LCD Display, die funktionierte zwar in vt, aber nicht mit X11. Einige boese Hacks habe ich probiert, wovon der hier am einfachsten war. Einfach ein `Option "RegistryDwords" "EnableBrightnessControl=1"' in xorg.conf, die dann so aussieht:
Code:
# Layout
Section "ServerLayout"
        Identifier      "normal"
        Screen      0   "Screen0"
        InputDevice     "Keyboard0" "CoreKeyboard"
        InputDevice     "Mouse0" "CorePointer"
EndSection

# Server Flags
Section "ServerFlags"
        Option          "AllowEmptyInput" "false"
EndSection

# Files
Section "Files"
EndSection

# Mouse
Section "InputDevice"
        Identifier      "Mouse0"
        Driver          "mouse"
        Option          "Protocol" "Sysmouse"
        Option          "Device" "/dev/sysmouse"
EndSection

# Keyboard
Section "InputDevice"
        Identifier      "Keyboard0"
        Driver          "keyboard"
        Option          "terminate:ctrl_alt_bksp"
EndSection

# Monitor
Section "Monitor"
        Identifier      "Monitor0"
        Option          "DPMS"
EndSection

# Graphic driver
Section "Device"
        Identifier      "Device0"
        Driver          "nvidia"
        VendorName      "NVIDIA Corporation"
        Option          "RegistryDwords" "EnableBrightnessControl=1"
EndSection

# Screen 
Section "Screen"
        Identifier      "Screen0"
        Device          "Device0"
        Monitor         "Monitor0"
        DefaultDepth    24

        SubSection     "Display"
                Depth       24
         EndSubSection
EndSection

Ein weiterer Punkt, der mich nervte war die hardware Lueftersteuerung, die konstant bei 3500rpm blieb egal ob die CPU schon auf 20 Grad war. Bei voller Last erreichte der Luefter nur 3800rpm und die CPU kochte bei 65 Grad. Darum hab ich dann in der Bahn selbst mit den Pfoetchen in die Tasten gehauen und "loolerd" gebaut. Der "Lenovo cooler"d. Ein kleiner Daemon, der sich coretemp und acpi_ibm zu nutze macht und den Luefter dynamisch regelt: http://s-tlk.org/stuff/freebsd/
Kein Meisterwerk, aber er funktioniert. Ich habe eben auch noch eine Version, die etwas eleganter den fanlevel berechnet und nicht gleich eine Stufe hoeher schaltet nur weil er ein Grad waerme ist als die Schwelle, die das naechste Level vorgibt. Das ganze benutzt waehrend der Schleife mibs, was einen schnellen und schonenden Zugang zu sysctls ermoeglicht. Die Last, die es erzeugt ist somit verschwindend gering.
Nochmal als Warnung, das ist nur fuer dieses Modell geschrieben und funktioniert generell nur mit Laptops, die acpi_ibm benutzen.

Suspend/resume: Ja das leidige Thema. Ich hab mittlerweile eine Konfiguration fuer rc.suspend/rc.resume gefunden, die es zumindest wieder aufwachen laesst, aber das steht noch auf wackeligen Pfoten und zuverlaessig scheint mir das auch nicht zu sein. Ich hoffe das sich das mit 8.2, was Ende Januar erscheinen sollte und mit einem neuen acpica erledigen wird. Vllt geht dann auch endlich C3. Deshalb schreibe ich dazu erstmal nichts und melde mich dann nochmal. Vorallem mache ich aber so gut wie keinen Gebrauch von suspend. Um das Laptop eben von Buero ins Labor, oder wieder zurueck zu tragen, reicht es auch, wenn nur das Display abgeschaltet wird.

Am Ende noch ein Screenshot: http://s-tlk.org/stuff/Screens/tp-screen.png
Spartanisch, aber dafuer mit einer tollen Aussicht. ^^

Zusammenfassend gesagt: Es geht alles wichtige: Sound mit snd_hda, die Akkulaufzeit betraegt bei fast voller Displayhelligkeit etwa 4 Stunden, was fuer den Standardakku nicht schlecht ist. Mit dem Nvidia blob bekommt man wirklich gute 3d Performace. Dank moused werden auch die Maeuse richtig multiplexed und ich kann sowohl gleichzeitig Trackpointer, Trackpad und eine externe Maus nutzen. Das Scrollen funktioniert auch mit dem Trackpad.

Wer den ganzen anderen Multimedia Krams nutzen moechte, der sollte mal einen Blick in Yamagis howto werfen, dort wird zb noch die webcam mit webcamd verarztet und einiges mehr: http://www.bsdforen.de/showthread.php?t=24823

Ich hab bestimmt noch ein paar Punkte vergessen, die ich aber nachtragen werde, oder falls ihr noch Erfahrungen mit dem Modell habt, kann ich das auch gerne hier sammeln.
 
Bei mir funktioniert es unter 9.1 endlich ohne viel Extraarbeit, allerdings benutze ich das kaum. Soweit ich mich aber erinnere geht das ganze nur aus X heraus und mit einem rel. neuen Nvidia Treiber (ab der Version, wo glaube ich xrandr wieder benutzbar ist).
 
Was heißt "ohne viel Extraarbeit"? Benutzt du die obigen speziellen sysctls, rc.suspend/rc.resume?
Wie gehst du in den Standby: mit Fn-F4, oder per Befehl "zzz" o.ä.?
 
So sorry hat etwas gedauert bis ich zum nachgucken gekommen bin. Ich entlade noch USB in der rc.suspend, aber sonst mache ich nichts mehr anderes. Die sysctls sind auch noch gleich, bis auf das ich vfs.ufs.dirhash_maxmem erhoeht habe, weil ich nun sehr viel mehr Speicher eingebaut habe. Aber das hat keinen Einfluss auf suspend/resume.
 
Jedenfalls rebootet meiner sofort bei zzz oder wenn ich den Deckel schließe.
Habe sogar das neueste BIOS geflasht.
 
Ich hatte bei meinem T410 ziemliche Probleme mit Überhitzung, “loolerd” hat das Problem weitestgehend gelöst (er wird beim Bauen von “xorg-server” zwar noch ~80° C heiß, aber nicht mehr die c.a. 100° C wie vorher).

(Nur mal fürs Protokoll, falls jemand ein ähnliches Problem hat.)
 
Hi all, reviving a very old thread (I'm sorry I'm Dutch not German, and my English is probably better, so I'm replying in English). I'm getting an old T410 to usable state, and wanted to use the loolerd deamon (I've used it in the past). However I've lost the source code, and the above links do not work anymore. Is there anyone who still has the source available and that can post it here?

Thanks in advanve
 
Zurück
Oben