OpenBSD auf meinem alten Laptop

drm

Well-Known Member
Hi!

Wollte hier nur mal eine kleine Zusammenfassung für meinen Laptop schreiben, vielleicht hilft es ja dem ein oder anderen.

Nachdem meine Laptopfestplatte kaputt ging hab ich mir überlegt, auf meinem alten Samsung ('NP-R50CV03' oder 'Samsung R50 WVM 1730') Laptop anstatt Arch Linux mal OpenBSD (4.9) zu probieren. Grund dafür war das kaputte Suspend/Resume mit neueren Linux-Kerneln (ab ca. 2.6.30), denn seit Kernel Mode Settings eingeführt wurden legte sich mein Laptop zwar schlafen, konnte aber nicht mehr ohne Grafikfehler aufwachen.

Auch unter OpenBSD klappte es nicht von Anfang an. Der Bildschirm blieb nach einem Resume schwarz und es gab keine Festplattenaktivität. Nachdem ich aber apm im Kernel ausgeschaltet habe, kann ich problemlos 'resumen', sowohl von der Konsole als auch aus X! Statt AMP wird jetzt ACPI benutzt, mein Prozessor taktet sich automatisch hoch bzw. runter und ich kann den Laptop über die Funktionstasten schlafen legen :) Zusätzlich funktionieren jetzt die Temperatursensoren, die mit apm nicht ansprechbar waren.

APM permanent ausschalten:
Code:
# cd /
# mv bsd bsd.old
# config -e -o bsd bsd.old
OpenBSD 4.9 (GENERIC) #671: Wed Mar  2 07:09:00 MST 2011
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
Enter 'help' for information
ukc> disable apm
351 apm0 disabled
ukc> quit
Saving modified kernel.
# reboot

Meine dmesg:

Code:
OpenBSD 4.9 (GENERIC) #671: Wed Mar  2 07:09:00 MST 2011
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
cpu0: Intel(R) Pentium(R) M processor 1.73GHz ("GenuineIntel" 686-class) 1.73 GHz
cpu0: FPU,V86,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,TM,SBF,EST,TM2
real mem  = 2145611776 (2046MB)
avail mem = 2100379648 (2003MB)
mainbus0 at root
bios0 at mainbus0: AT/286+ BIOS, date 11/02/05, BIOS32 rev. 0 @ 0xfd6c0, SMBIOS rev. 2.31 @ 0xdc010 (24 entries)
bios0: vendor SAMSUNG ELECTRONICS CO.,LTD version "D5CA.20051102.1854.LMK" date 11/02/2005
bios0: SAMSUNG ELECTRONICS CO.,LTD R50/R51
apm at bios0 function 0x15 not configured
acpi0 at bios0: rev 0
acpi0: sleep states S0 S3 S4 S5
acpi0: tables DSDT FACP APIC HPET MCFG BOOT SSDT SSDT SSDT SSDT
acpi0: wakeup devices PWRB(S4) RP01(S4) LANC(S3) MODM(S3)
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: apic clock running at 132MHz
ioapic0 at mainbus0: apid 1 pa 0xfec00000, version 20, 24 pins
ioapic0: misconfigured as apic 0, remapped to apid 1
acpihpet0 at acpi0: 14318179 Hz
acpimcfg0 at acpi0 addr 0xe0000000, bus 0-255
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus 1 (PEGP)
acpiprt2 at acpi0: bus 2 (RP01)
acpiprt3 at acpi0: bus 6 (PCIB)
acpiec0 at acpi0
acpicpu0 at acpi0: C2, C1, PSS
acpipwrres0 at acpi0: CFAN
acpitz0 at acpi0: critical temperature 95 degC
acpiac0 at acpi0: AC unit online
acpibat0 at acpi0: BAT1 type LION oem "SAMSUNG Electronics"
acpibtn0 at acpi0: LID0
acpibtn1 at acpi0: PWRB
acpibtn2 at acpi0: SLPB
acpivideo0 at acpi0: ATIM
acpivout0 at acpivideo0: LCD_
acpivideo1 at acpi0: GFX0
acpivout1 at acpivideo1: DD01
acpivout2 at acpivideo1: DD02
acpivout3 at acpivideo1: DD03
acpivout4 at acpivideo1: DD04
bios0: ROM list: 0xc0000/0x10000 0xd0000/0x4000 0xd4000/0x1000 0xdc000/0x4000! 0xe0000/0x4000!
cpu0: Enhanced SpeedStep 1730 MHz: speeds: 1733, 1333, 1067, 800 MHz
pci0 at mainbus0 bus 0: configuration mode 1 (bios)
pchb0 at pci0 dev 0 function 0 "Intel 82915GM Host" rev 0x03
ppb0 at pci0 dev 1 function 0 "Intel 82915GM PCIE" rev 0x03: apic 1 int 16 (irq 10)
pci1 at ppb0 bus 1
vga1 at pci1 dev 0 function 0 "ATI Radeon Mobility M300 M22" rev 0x00
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
radeondrm0 at vga1: apic 1 int 16 (irq 10)
drm0 at radeondrm0
ppb1 at pci0 dev 28 function 0 "Intel 82801FB PCIE" rev 0x03: apic 1 int 17 (irq 11)
pci2 at ppb1 bus 2
uhci0 at pci0 dev 29 function 0 "Intel 82801FB USB" rev 0x03: apic 1 int 23 (irq 5)
uhci1 at pci0 dev 29 function 1 "Intel 82801FB USB" rev 0x03: apic 1 int 19 (irq 10)
uhci2 at pci0 dev 29 function 2 "Intel 82801FB USB" rev 0x03: apic 1 int 18 (irq 11)
uhci3 at pci0 dev 29 function 3 "Intel 82801FB USB" rev 0x03: apic 1 int 16 (irq 10)
ehci0 at pci0 dev 29 function 7 "Intel 82801FB USB" rev 0x03: apic 1 int 23 (irq 5)
usb0 at ehci0: USB revision 2.0
uhub0 at usb0 "Intel EHCI root hub" rev 2.00/1.00 addr 1
ppb2 at pci0 dev 30 function 0 "Intel 82801BAM Hub-to-PCI" rev 0xd3
pci3 at ppb2 bus 6
"Broadcom BCM4401B1" rev 0x02 at pci3 dev 5 function 0 not configured
iwi0 at pci3 dev 7 function 0 "Intel PRO/Wireless 2200BG" rev 0x05: apic 1 int 20 (irq 10), address 00:12:f0:dd:f1:1d
cbb0 at pci3 dev 9 function 0 "Ricoh 5C476 CardBus" rev 0xb3: apic 1 int 16 (irq 0), CardBus support disabled
"Ricoh 5C552 Firewire" rev 0x08 at pci3 dev 9 function 1 not configured
sdhc0 at pci3 dev 9 function 2 "Ricoh 5C822 SD/MMC" rev 0x17: apic 1 int 18 (irq 11)
sdmmc0 at sdhc0
"Ricoh 5C592 Memory Stick" rev 0x08 at pci3 dev 9 function 3 not configured
"Ricoh 5C852 xD" rev 0x03 at pci3 dev 9 function 4 not configured
cardslot0 at cbb0 slot 0 flags 0
pcmcia0 at cardslot0
auich0 at pci0 dev 30 function 2 "Intel 82801FB AC97" rev 0x03: apic 1 int 17 (irq 11), ICH6 AC97
ac97: codec id 0x41445374 (Analog Devices AD1981B)
ac97: codec features headphone, 20 bit DAC, No 3D Stereo
audio0 at auich0
"Intel 82801FB Modem" rev 0x03 at pci0 dev 30 function 3 not configured
ichpcib0 at pci0 dev 31 function 0 "Intel 82801FBM LPC" rev 0x03: PM disabled
pciide0 at pci0 dev 31 function 1 "Intel 82801FB IDE" rev 0x03: DMA, channel 0 configured to compatibility, channel 1 configured to compatibility
wd0 at pciide0 channel 0 drive 0: <SAMSUNG HM160HC>
wd0: 16-sector PIO, LBA48, 152627MB, 312581808 sectors
atapiscsi0 at pciide0 channel 0 drive 1
scsibus0 at atapiscsi0: 2 targets
cd0 at scsibus0 targ 0 lun 0: <TEAC, DV-W28EA, S.0A> ATAPI 5/cdrom removable
wd0(pciide0:0:0): using PIO mode 4, Ultra-DMA mode 5
cd0(pciide0:0:1): using PIO mode 4, Ultra-DMA mode 2
pciide0: channel 1 ignored (disabled)
ichiic0 at pci0 dev 31 function 3 "Intel 82801FB SMBus" rev 0x03: apic 1 int 19 (irq 10)
iic0 at ichiic0
spdmem0 at iic0 addr 0x50: 1GB DDR2 SDRAM non-parity PC2-4200CL5 SO-DIMM
spdmem1 at iic0 addr 0x52: 1GB DDR2 SDRAM non-parity PC2-4200CL5 SO-DIMM
usb1 at uhci0: USB revision 1.0
uhub1 at usb1 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb2 at uhci1: USB revision 1.0
uhub2 at usb2 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb3 at uhci2: USB revision 1.0
uhub3 at usb3 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb4 at uhci3: USB revision 1.0
uhub4 at usb4 "Intel UHCI root hub" rev 1.00/1.00 addr 1
isa0 at ichpcib0
isadma0 at isa0
pckbc0 at isa0 port 0x60/5
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pms0 at pckbc0 (aux slot)
pckbc0: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
npx0 at isa0 port 0xf0/16: reported by CPUID; using exception 16
mtrr: Pentium Pro MTRR support
vscsi0 at root
scsibus1 at vscsi0: 256 targets
softraid0 at root
root on wd0a swap on wd0b dump on wd0b
Bisher gefällt mir OpenBSD sehr gut, nur das Kompilieren macht auf dem alten Pentium M keinen Spaß ;)

Wlan funktioniert auch sehr gut mit dem iwi(4)-Treiber, allerdings ist mir noch nicht klar wie ich mehrere Verbindungen verwalte. Momentan hab ich in der /etc/hostname.iwi0 folgendes stehen:

Code:
# cat /etc/hostname.iwi0                                                       
nwid linksys
wpakey <Key im Klartext>
dhcp

Wenn ich den Laptop zuhause starte, hab ich sofort wlan, aber wir verwalte ich mehrere Verbindungen? Brauche ich dafür dann wpa_supplicant?

Viele Grüße,
drm
 
Zuletzt bearbeitet:
Hi drm,

ich benutze für verschiedene Standorte wpa_supplicant, in der Config habe ich einfach alle benötigten Netze eingetragen und das Verbinden geht "dann" automatisch.

vg
vertex
 
Schreibe dir ein Shellskript, das erst nach bekannten nwids scannt und dann den passenden Key und Verschlüsselungsmethode auswählt. Rufe das dann in /etc/hostname.iwi0 auf.
 
Wie wäre es mit wpa_supplicant aus den Ports?

Hast Du Dir mal durchgelesen, wofür wpa_supplicant (auch das aus den Ports) unter OpenBSD genutzt werden kann?

[andreash@pandora: /home/andreash]>pkg_info wpa_supplicant
Information for ftp://ftp.eu.openbsd.org/pub/OpenBSD/4.7/packages/i386/wpa_supplicant-0.5.8p0.tgz

Comment:
IEEE 802.1X supplicant

Description:
wpa_supplicant is the implementation of an IEEE 802.1X supplicant.
This port is for wired authentication only (Ethernet PAE) and does not
support the wireless WPA/WPA2 functionality.


Maintainer: Reyk Floeter <reyk@openbsd.org>

WWW: http://hostap.epitest.fi/wpa_supplicant/
 
ich hatte für meine Netze ein kleines Shell-Script gebastelt, das mich per ifconfig+dhclient damit verbindet.

OpenBSD ist nun mal nicht dafür geeignet, automatisch in jedes beliebige Netz einzuloggen... Das will man eventuell auch gar nicht.
 
OpenBSD ist nun mal nicht dafür geeignet, automatisch in jedes beliebige Netz einzuloggen... Das will man eventuell auch gar nicht.
Wenn man das eventuell gar nicht will, richtet man sich das "beliebige" Netz doch erst gar nicht ein, oder? Ich liege sehr wahrscheinlich falsch, aber für mich hört sich das so an wie "das geht aus Grund XY nicht, aber wir schieben es mal auf Sicherheit, das zieht bei OpenBSD besser".. ;)
 
Vielen Dank für die Antworten!

Gibt es einen technischen Grund dafür, warum wpa_supplicant in OpenBSD kein WLAN kann? Naja, dann werde ich mich mal am skripten probieren :) Meine Idee:

  1. Das Skript scannt per ifconfig(8) die verfügbaren Netze und sucht nach bekannten nwids.
  2. Findet er ein bekanntes, schreibt er die entsprechenden Zugangsdaten in /etc/hostname.iwi0 und ruft danach /etc/netstart iwi0 auf.
  3. Das Skript wird in /etc/rc.local aufgerufen.

Wäre mein Plan so richtig oder würdet ihrs anders machen?
 
  1. Das Skript scannt per ifconfig(8) die verfügbaren Netze und sucht nach bekannten nwids.
  2. Findet er ein bekanntes, schreibt er die entsprechenden Zugangsdaten in /etc/hostname.iwi0 und ruft danach /etc/netstart iwi0 auf.
  3. Das Skript wird in /etc/rc.local aufgerufen.

Wieso willst Du das in hostname.iwi0 schreiben und übergibst es nicht direkt ifconfig?
 
Ich wechsel mein WLAN nur sehr selten, denn entweder ich bin mit dem Laptop zu Hause, bei meiner Freundin oder bei meinen Eltern. Da bleib ich dann für gewöhnlich auch länger.

Wenn die richtigen Einstellungen einmal in /etc/hostname.iwi0 stehen, geht es beim booten extrem schnell, ich hab innerhalb von Sekunden eine Verbindung. Deshalb möchte ich eigentlich nicht immer prüfen, ob eins meiner Netzwerke verfügbar ist, sondern die Verbindungsdaten in der /etc/hostname.iwi0 stehen haben und anschließend prüfen, ob eine Netzwerkverbindung besteht. Nur wenn das nicht der Fall ist, soll er die Verbindungsdaten anpassen. Theoretisch könnte ich das Skript auch ausschließlich per Hand starten, wenn ich den Ort wechsle.

P.S. wie unterscheidet man Netzwerke mit der selben nwid am besten? Per bssid?

Gruß,
dm
 
So, mein erstes nützliches Shellskript ist jetzt fertig :D Man trägt einfach oben sein Interface und für jedes Netzwerk die nwid, bssid und seinen Key ein. Bei jedem Aufruf wird die entsprechende Interface-Datei so geändert, dass beim nächsten Boot das vorherige Netzwerk geladen wird.

Code:
#!/bin/sh
# Connect to your wlan on OpenBSD.

# my wlan-interface
IF="<IF>" # e.g. iwi0

# my networks
BSSID_OFFENBACH="<BSSID>"
NWID_OFFENBACH="<NWID>" 
KEY_OFFENBACH="<KEY>"
# etc...

# get ip if not connected
INET="$(/sbin/ifconfig $IF scan | /usr/bin/grep 'inet ')"
if [ -z "$INET" ] 
then
        # scan for bssids, 6th field in output
        NETWORKS=$(/sbin/ifconfig $IF scan | /usr/bin/grep bssid | /usr/bin/cut -d " " -f6)

        CONF=""
        for bssid in $NETWORKS
        do

                case $bssid in
                $BSSID_OFFENBACH)
                        CONF="nwid $NWID_OFFENBACH wpakey $KEY_OFFENBACH"
                        break
                        ;;
                # more networks here!
                esac
        done

        if [ -n "$CONF" ]
        then
                # make config permanent and connect 
                /bin/echo "$CONF" > /etc/hostname."$IF"
                # run dhclient on startup, 'dhcp' must be in own row
                /bin/echo 'dhcp' >> /etc/hostname."$IF"
                /sbin/ifconfig $(echo $IF $CONF) # ifconfig needs one string
                /sbin/dhclient "$IF"
        else
                echo "no known network available."
        fi

else
        # scan disables interface
        /sbin/ifconfig "$IF" up
        NET=$(/sbin/ifconfig "$IF" | /usr/bin/grep ieee80211 | /usr/bin/cut -d " " -f3)
        /bin/echo "already connected to $NET."

fi

Würdet ihr da was verbessern? Es klappt zwar so wies soll, aber ich bin ziemlich unerfahren mit der Shell :)

Edit: Danke laemodost!

Viele Grüße,
drm
 
Zuletzt bearbeitet:
Das sieht schon gut aus, ein paar Kleinigkeiten hätte ich:

Code:
INET="$(/sbin/ifconfig $IF scan | /usr/bin/grep -v inet6 | /usr/bin/grep inet)"
Einfacher:
Code:
INET="$(/sbin/ifconfig $IF scan | /usr/bin/grep 'inet ')"


Code:
if [ "$INET" = "" ]

Besser:
Code:
if [ -z "$INET" ]

Code:
if [ "$CONF" != "" ]

Besser:
Code:
if [ -n "$CONF" ]

Der Rest schaut gut aus.
 
So, jetzt hab ich noch eine Frage:

Mein Laptop läuft im Idle auf ca. 50°C, obwohl die sich die CPU auf 800 MHz runtertaktet. Ich vermute dass es am Power Management der Graphikkarte (Ati Mobility Radeon x300) liegt, daher hab ich mir eine xorg.conf angelegt, die das Feature "DynamicClocks" anschaltet. Klappt soweit auch, aber die Temperatur bleibt konstant bei 50°C. Kann man sonst noch was machen? Der ati-Treiber ist ja schon etwas älter (xf86-video-ati, 6.12.2), aber 50°C kommt mir trotzdem sehr hoch vor. Unter Last erhitzt sich der Laptop auf ca. 70°C.

Die Lüfter hab ich vor ein paar Monaten mal gesäubert, also sollte nicht allzu viel Dreck im Laptop sein.

/etc/X11/xorg.conf

/var/log/Xorg.0.log

$ grep Dynamic /var/log/Xorg.0.log
[3568867.193] (**) RADEON(0): Option "DynamicClocks" "True"
[3568867.568] (II) RADEON(0): Dynamic Clock Scaling Enabled
 
50C sind für CPUs und GPUs völlig harmlos. 70C nehmen dir manche Bauteile in der direkten Nähe (z.B. Elkos) auf die Dauer übel, wenn sie nicht extra für höhere Temperaturen ausgelegt sind.
 
Die sind vielleicht für die Hardware harmlos, aber "Laptop" beinhaltet "Lap" und "top" und gerade da kann es unangenehm warm werden. ;)
 
Ich weiß dass es der Hardware nichts ausmacht, aber es wird eben doch sehr warm und der Lüfter dreht lauter. Unter Arch Linux hatte ich um die 40°, allerdings mit neuerem ati-Treiber. Deswegen wollte ich wissen, ob DynamicClocks die "einzige" Möglichkeit zum Stromsparen ist oder ob ich was übersehen habe. Aber scheinbar lässt sich da momentan nichts machen :) Trotzdem vielen Dank für die Antworten!

Viele Grüße,
drm
 
70 grad ist nichts, wenn ich mit meinem Notebook unter FreeBSD etwas mache habe ich immer so zwischen 85 und 90 grad, bis er sich dann ausschaltet. Das tritt aber erst seit 8. Zweig auf. Seit dem habe ich es leider nicht mehr drauf, probiere es nur hin und wieder mal.

Gruß Daniel
 
Ich bringe meinen durchaus auch mal auf 100°C, nach den ACPI-Tabellen ist das aber vollkommen in Ordnung.
 
Zurück
Oben