Installing FreeBSD 7 (i386) on a ThinkPad T43

From ThinkWiki
Jump to: navigation, search

Features

FreeBSD is an UNIX operating system for x86 and others compatible architectures. It is derived from BSD, the version of UNIX® developed at the University of California, Berkeley. It is developed and maintained by a team of individuals.

FreeBSD offers advanced networking, performance, security and compatibility features which are still missing in some of the best commercial operating systems.

FreeBSD makes an ideal Internet or Intranet server. It provides robust network services under the heaviest loads and uses memory efficiently to maintain good response times for thousands of simultaneous user processes. But on notebooks it is a very usable operating system with many features for customization, including power management.

With over 17,000 ported libraries and applications for desktop, server, appliance, and embedded environments, there are many applications which were designed specifically for notebooks.

The best is that FreeBSD is free, and the open source BSD license it is distributed under make sure it will continue to be free. Since FreeBSD is open source and a framework has been set up to easily do so, it is possible to build a custom kernel, allowing faster booting and operation since you can remove any features unneeded in your specific operations.

Installation

The best way to install FreeBSD on a ThinkPad T43 is to download the ISO files and burn them. You can find the ISOs right here: FTP Server of FreeBSD. Choose the version you want to install.

Hint:
It is better to choose one of the mirrors which you can find here: List of mirrors

Known Issues

Everythings works like a charme except one thing: Suspend und Resume.

ATTENTION!
Currently suspend and resume works only once. I don't know whether it depends on the operation system or on Gnome powermanagement. Entering

# acpiconf -s 3

works perfect. Here is the link to the discussion in the mailing list: freebsd-acpi

By disabling the advanced interrupt controller APIC the problem can solved partly. Responsible for that is the hardware abstraction layer HAL which is provided by FreeDesktop.org [1]. For disabling the APIC the file /boot/device.hints has to edited in the following way:

hint.apic.0.disabled="1"

ATTENTION!
After disabling the APIC there are no IRQs free on the system for Cardbus-Cards, PCCards or PCMCIA-Cards

Post-Installation Setup

After installation of FreeBSD you have to do some additional setup. Most things work out of the box, but some parts need additional configuration.

First of all type dmesg on a console and you will see which hardware is detected from GENERIC kernel:

# dmesg | more

You get an output like the following:

Copyright (c) 1992-2008 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
	The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 7.1-PRERELEASE #0: Fri Sep 19 07:11:52 CEST 2008
    juergen@t43.juergendankoweit.net:/usr/obj/usr/src/sys/T43
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: Intel(R) Pentium(R) M processor 1.86GHz (1862.01-MHz 686-class CPU)
  Origin = "GenuineIntel"  Id = 0x6d8  Stepping = 8
  Features=0xafe9fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,
  MCA,CMOV,PAT,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,TM,PBE>
  Features2=0x180<EST,TM2>
  AMD Features=0x100000<NX>
real memory  = 1072562176 (1022 MB)
avail memory = 1040035840 (991 MB)
ACPI APIC Table: <IBM    TP-1Y   >
ACPI Warning (tbfadt-0505): Optional field "Gpe1Block" 
 has zero address or length:        0    102C/0 [20070320]
ioapic0: Changing APIC ID to 1
ioapic0 <Version 2.0> irqs 0-23 on motherboard
kbd1 at kbdmux0
ath_hal: 0.9.20.3 (AR5210, AR5211, AR5212, RF5111, RF5112, RF2413, RF5413)
acpi0: <IBM TP-1Y> on motherboard
acpi0: [ITHREAD]
acpi_ec0: <Embedded Controller: GPE 0x1c, ECDT> port 0x62,0x66 on acpi0
acpi0: Power Button (fixed)
acpi0: reservation of 0, a0000 (3) failed
acpi0: reservation of 100000, 3ff00000 (3) failed
Timecounter "ACPI-safe" frequency 3579545 Hz quality 850
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x1008-0x100b on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
pcib1: <ACPI PCI-PCI bridge> irq 16 at device 1.0 on pci0
pci1: <ACPI PCI bus> on pcib1
vgapci0: <VGA-compatible display> port 0x2000-0x20ff 
 mem 0xc0000000-0xc7ffffff,0xb0100000-0xb010ffff irq 16 at device 0.0 on pci1
drm0: <ATI Radeon Mobility X300 M22> on vgapci0
info: [drm] Initialized radeon 1.25.0 20060524
pcib2: <ACPI PCI-PCI bridge> irq 20 at device 28.0 on pci0
pci2: <ACPI PCI bus> on pcib2
bge0: <Broadcom NetXtreme Gigabit Ethernet Controller, 
 ASIC rev. 0x4101> mem 0xb0200000-0xb020ffff irq 16 at device 0.0 on pci2
miibus0: <MII bus> on bge0
brgphy0: <BCM5750 10/100/1000baseTX PHY> PHY 1 on miibus0
brgphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto
bge0: Ethernet address: 00:15:58:30:2a:a3
bge0: [ITHREAD]
pcib3: <ACPI PCI-PCI bridge> irq 22 at device 28.2 on pci0
pci3: <ACPI PCI bus> on pcib3
uhci0: <Intel 82801FB/FR/FW/FRW (ICH6) USB controller 
 USB-A> port 0x1800-0x181f irq 16 at device 29.0 on pci0
uhci0: [GIANT-LOCKED]
uhci0: [ITHREAD]
usb0: <Intel 82801FB/FR/FW/FRW (ICH6) USB controller USB-A> on uhci0
usb0: USB revision 1.0
uhub0: <Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1> on usb0
uhub0: 2 ports with 2 removable, self powered
uhci1: <Intel 82801FB/FR/FW/FRW (ICH6) USB controller 
 USB-B> port 0x1820-0x183f irq 17 at device 29.1 on pci0
uhci1: [GIANT-LOCKED]
uhci1: [ITHREAD]
usb1: <Intel 82801FB/FR/FW/FRW (ICH6) USB controller USB-B> on uhci1
usb1: USB revision 1.0
uhub1: <Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1> on usb1
uhub1: 2 ports with 2 removable, self powered
uhci2: <Intel 82801FB/FR/FW/FRW (ICH6) USB controller 
 USB-C> port 0x1840-0x185f irq 18 at device 29.2 on pci0
uhci2: [GIANT-LOCKED]
uhci2: [ITHREAD]
usb2: <Intel 82801FB/FR/FW/FRW (ICH6) USB controller USB-C> on uhci2
usb2: USB revision 1.0
uhub2: <Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1> on usb2
uhub2: 2 ports with 2 removable, self powered
uhci3: <Intel 82801FB/FR/FW/FRW (ICH6) USB controller 
 USB-D> port 0x1860-0x187f irq 19 at device 29.3 on pci0
uhci3: [GIANT-LOCKED]
uhci3: [ITHREAD]
usb3: <Intel 82801FB/FR/FW/FRW (ICH6) USB controller USB-D> on uhci3
usb3: USB revision 1.0
uhub3: <Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1> on usb3
uhub3: 2 ports with 2 removable, self powered
ehci0: <Intel 82801FB (ICH6) USB 2.0 controller> 
 mem 0xb0000000-0xb00003ff irq 19 at device 29.7 on pci0
ehci0: [GIANT-LOCKED]
ehci0: [ITHREAD]
usb4: EHCI version 1.0
usb4: companion controllers, 2 ports each: usb0 usb1 usb2 usb3
usb4: <Intel 82801FB (ICH6) USB 2.0 controller> on ehci0
usb4: USB revision 2.0
uhub4: <Intel EHCI root hub, class 9/0, rev 2.00/1.00, addr 1> on usb4
uhub4: 8 ports with 8 removable, self powered
pcib4: <ACPI PCI-PCI bridge> at device 30.0 on pci0
pci11: <ACPI PCI bus> on pcib4
cbb0: <RF5C476 PCI-CardBus Bridge> 
 mem 0xb4010000-0xb4010fff irq 16 at device 0.0 on pci11
cardbus0: <CardBus bus> on cbb0
pccard0: <16-bit PCCard bus> on cbb0
cbb0: [ITHREAD]
ath0: <Atheros 5212> mem 0xb4000000-0xb400ffff irq 21 at device 2.0 on pci11
ath0: [ITHREAD]
ath0: WARNING: using obsoleted if_watchdog interface
ath0: Ethernet address: 00:14:a4:5c:86:b4
ath0: mac 5.9 phy 4.3 radio 3.6
pcm0: <Intel ICH6 (82801FB)> port 0x1c00-0x1cff,0x1880-0x18bf 
 mem 0xb0000800-0xb00009ff,0xb0000400-0xb00004ff irq 22 at device 30.2 on pci0
pcm0: [ITHREAD]
pcm0: <Analog Devices AD1981B AC97 Codec>
isab0: <PCI-ISA bridge> at device 31.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <Intel ICH6M SATA150 controller> 
 port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0x18c0-0x18cf at device 31.2 on pci0
ata0: <ATA channel 0> on atapci0
ata0: [ITHREAD]
ata1: <ATA channel 1> on atapci0
ata1: [ITHREAD]
pci0: <serial bus, SMBus> at device 31.3 (no driver attached)
cpu0: <ACPI CPU> on acpi0
est0: <Enhanced SpeedStep Frequency Control> on cpu0
p4tcc0: <CPU Frequency Thermal Control> on cpu0
acpi_lid0: <Control Method Lid Switch> on acpi0
acpi_button0: <Sleep Button> on acpi0
acpi_tz0: <Thermal Zone> on acpi0
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
kbd0 at atkbd0
atkbd0: [GIANT-LOCKED]
atkbd0: [ITHREAD]
psm0: <PS/2 Mouse> flags 0x2000 irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: [ITHREAD]
psm0: model Generic PS/2 mouse, device ID 0
sio0: configured irq 4 not in bitmap of probed irqs 0
sio0: port may not be enabled
sio0: configured irq 4 not in bitmap of probed irqs 0
sio0: port may not be enabled
sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
sio0: type 8250 or not responding
sio0: [FILTER]
sio1: configured irq 3 not in bitmap of probed irqs 0
sio1: port may not be enabled
battery0: <ACPI Control Method Battery> on acpi0
acpi_acad0: <AC Adapter> on acpi0
acpi_ibm0: <IBM ThinkPad ACPI Extras> on acpi0
sio1: configured irq 3 not in bitmap of probed irqs 0
sio1: port may not be enabled
pmtimer0 on isa0
orm0: <ISA Option ROMs> at iomem 0xc0000-0xcffff,
 0xd1800-0xd27ff,0xdc000-0xdffff,0xe0000-0xeffff pnpid ORM0000 on isa0
ppc0: parallel port not found.
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
sio1: configured irq 3 not in bitmap of probed irqs 0
sio1: port may not be enabled
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
ubt0: <Broadcom IBM Bluetooth Module, class 224/1, rev 1.10/0.09, addr 2> on uhub2
ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
ubt0: Interface 1 (alt.config 4) endpoints: isoc-in=0x83, isoc-out=0x3; 
 wMaxPacketSize=64; nframes=5, buffer size=320
Timecounter "TSC" frequency 1862012116 Hz quality 800
Timecounters tick every 1.000 msec
ad0: 38154MB <HTS541040G9AT00 MB2IA5BJ> at ata0-master UDMA100
acd0: DVDROM <HL-DT-STDVD-ROM GDR8083N/0K04> at ata1-master UDMA33
Trying to mount root from ufs:/dev/ad0s1a
acd0: FAILURE - INQUIRY ILLEGAL REQUEST asc=0x24 ascq=0x00 
cd0 at ata1 bus 0 target 0 lun 0
cd0: <HL-DT-ST DVD-ROM GDR8083N 0K04> Removable CD-ROM SCSI-0 device 
cd0: 33.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present
WARNING: attempt to net_add_domain(bluetooth) after domainfinalize()
WARNING: attempt to net_add_domain(netgraph) after domainfinalize()

As easily can be seen the following components were detected which are important for additional setup:

Device Type Device Driver Device Name
CPU CPU Intel(R) Pentium(R) M processor 1.86GHz (1862.01-MHz 686-class CPU) Origin = "GenuineIntel" Id = 0x6d8 Stepping = 8
est0 Enhanced SpeedStep Frequency Control on cpu0
p4tcc0 CPU Frequency Thermal Control on cpu0
Memory RAM real memory = 1072562176 (1022 MB), avail memory = 1040035840 (991 MB)
LAN controller bge0 Broadcom NetXtreme Gigabit Ethernet Controller BCM5750 10/100/1000baseTX
WLAN controller ath0 Atheros 5212
(S)ATA controller atapci0 Intel ICH6M SATA150 controller
sound device pcm0 Intel ICH6 (82801FB): Analog Devices AD1981B AC97 Codec
USB controller uhcin Intel 82801FB/FR/FW/FRW (ICH6) USB controller USB-N (n: 1...4, N: A...D)
CardBus controller cbb0 RF5C476 PCI-CardBus Bridge
Bluetooth device ubt0 Broadcom IBM Bluetooth Module, class 224/1, rev 1.10/0.09, addr 2 on uhub2
video controller drm0 ATI Radeon Mobility X300 M22
harddrive ad0 38154MB <HTS541040G9AT00 MB2IA5BJ> at ata0 master UDMA100
optical drive acd0 DVDROM <HL-DT-STDVD-ROM GDR8083N/0K04> at ata1 master UDMA33

General System Settings

The general system settings are done in my case in the following files:

/boot/loader.conf
In this file you enter modules and settings which must be loaded or set before the kernel is loaded.
/boot/device.hints
Here you can modify device settings and turn on or off devices
/etc/rc.conf
This file is called by the FreeBSD init subsystem. All daemons which should be started and additional settings for these daemons are done done in this file
/etc/sysctl.conf
In this file all settings are done which manipulate deverse kernel parameters
/etc/devd.conf
This file configurates the behavior of the devd device state change daemon
ATTENTION!
The following sections describe how I was able to get everything to work. These are only hints. I am not responsible for any damages which were caused through these settings. You are responsible for yourself what you are doing!

The following sections describe the parameters for each component.

ACPI

This section is the most difficult part of the description.

ACPI stands for Advanced Configuration and Power Interface which defines common interfaces for hardware recognition, motherboard and device configuration and power management. FreeBSD and ACPI is difficult relationship: either it works or it works not. But it is on the way getting better.

It costs me a lot of time to get ACPI to work. Therefore a small hint if you want to do it on your own: When you are doing some configuration and testing on your ACPI settings then you will soon recognize that the notebook will be inaccessable and you have to press the Power button. The system does not have any chance to shutdown the filesystem and this will result that at every boot the filesystem has to be checked and corrected. Therefore it is a good idea to manipulate the mount table /etc/fstab like the following example:

# Device	Mountpoint	FStype	Options		Dump	Pass#
/dev/ad0s1b	none		swap	sw		0	0
/dev/ad0s1a	/		ufs	rw		1	1
# /dev/ad0s1g	/home		ufs	rw		2	2
/dev/ad0s1d	/tmp		ufs	ro		2	2
/dev/ad0s1f	/usr		ufs	ro		2	2
/dev/ad0s1e	/var		ufs	ro		2	2
# /dev/acd0	/cdrom		cd9660	ro,noauto	0	0
proc		/proc		procfs	rw		0	0
linprocfs	/compat/linux/proc	linprocfs	rw	0	0

The readonly option for the mount command prevents the corruption of the filesystem. If there are important files on your home partition then it is better not to mount it. When everthing works for your satisfaction then you can restore the old state of the mount table.

To make ACPI work under FreeBSD the following files have to be edited:

/boot/loader.conf
Add the following line for loading the module acpi_ibm.ko to enable the Thinkpad specific functions like Thinkpad keys:
acpi_ibm_load="YES"
This module can also be loaded directly from the console. For this use the command
# kldload acpi_ibm
/boot/device.hints
Search for the lines which sets the parameters for the mouse driver. They look like these:
hint.psm.0.at="atkbdc"
hint.psm.0.irq="12"
Add or change the flags to this value:
hint.psm.0.flags="0x2000"
This enables access for the mouse daemon after resume.
/etc/sysctl.conf
In this file the diverse ACPI states have to connected to several events:
hw.acpi.reset_video=1
hw.acpi.lid_switch_state=S3
hw.acpi.sleep_button_state=S3
hw.acpi.power_button_state=S5
hw.acpi.sleep_delay=3
hw.acpi.verbose=1
You also have to enable the Thinkpad buttons with
dev.acpi_ibm.0.events=1
When the notebook resumes after a suspend call it is very likely that the display shows nothing or only rubbish. The reason is that the video controller is not in an defined state. It does not know whether it should display the textmode or the graphics mode. Therefore the switching to the textmode must be enabled:
hw.syscons.sc_no_suspend_vtswitch=0
This values can also be changed directly from the console. For this use the command
# sysctl <mib>
where mib represents each line of /etc/sysctl.conf.
/etc/devd.conf
With the device change state daemon (devd) it is possible to react on changes in the device state. This can be used for calling the suspend mode. For this the following lines have to be added to the configuration file:
notify 10 {
	match "system" "ACPI";
	match "subsystem" "IBM";
	match "notify" "0x04";
	action "/usr/sbin/acpiconf -s 3";
};
After this the devd daemon has to be restarted:
# /etc/rc.d/devd restart

After changing all these files or values you can do some tests. Hopefully these tests are successful.

CPU controlling

To enable frequency control the kernel module cpufreq.ko must be loaded, four lines added to /etc/rc.conf, and the computer rebooted:

/boot/loader.conf
Add this line to load the module cpufreq.ko on each boot, allowing the CPU frequency to be modified:
cpufreq_load="YES"
/etc/rc.conf
Add these four lines to enable automatic control of the CPU frequency:
powerd_enable="YES"
powerd_flags="-a adaptive -b adaptive -n adaptive"
performance_cx_lowest="C3"
economy_cx_lowest="C3"

This enables the automatic control of frequency parameters of the CPU. By default, the computer runs in a state called C1. During periods of low activity, it is possible to shut down parts of the processor, including clocks, and disconnect from the system bus. In the C2 state, the CPU shuts down clocks. In the C3 state, additional power can be saved by disconnecting from the system bus and shutting down the CPU for a short time. This can provide significant power savings without any real cost. Using the paramters performance_cx_lowest and economy_cx_lowest, it is possible to tell powerd the maximum state to put the CPU into. When allowing powerd to use C3, it can be beneficial to add a line like the one below to /boot/loader.conf:

kern.hz=100

This modifies the interrupt rate of the kernel. By default it is 1000 interrupts per second. With a very slight increase (9ms!) in time between interrupts, it is possible to maximize the benefit from using C3. This might make the computer slightly less responsive, but with significant power gains.


With the command sysctl the CPU parameters can be listed as shown in the following example: # sysctl dev.cpu

dev.cpu.0.%desc: ACPI CPU
dev.cpu.0.%driver: cpu
dev.cpu.0.%location: handle=\_PR_.CPU_
dev.cpu.0.%pnpinfo: _HID=none _UID=0
dev.cpu.0.%parent: acpi0
dev.cpu.0.freq: 800
dev.cpu.0.freq_levels: 1866/27000 1632/23625 1600/23700 1400/20737 
 1333/20400 1166/17850 1066/17100 932/14962 800/13800 700/12075 
 600/10350 500/8625 400/6900 300/5175 200/3450 100/1725
dev.cpu.0.cx_supported: C1/1 C2/1 C3/85 C4/185
dev.cpu.0.cx_lowest: C3
dev.cpu.0.cx_usage: 0.00% 2.42% 97.57% 0.00%

The bottom line shows the time spent in each state, in the format

C1 C2 C3 C4

This can be used to assess the gain from enabling C3. For additional tips on saving power, there is a helpful message on the official freebsd-current mailing list.

Mouse

After several experimentations with usb mice I found out that adding the following solved some troubles.

  • Suspend state: To turn off the mouse daemon add the following line to /etc/rc.suspend:
/etc/rc.d/moused stop
  • Resume state: To setup the mouse daemon in the right way after resuming add the following line to /etc/rc.resume:
/etc/rc.d/moused start

You also have to add this line in /etc/rc.conf:

moused_enable="YES"

Video

On my Thinkpad I use the following XOrg version:

  • X.Org Version 7.4_2
  • X.Org X Server 1.6.1,1
  • Release Date: April, the 14th 2009

Setting up Xorg is very easy and can be done in a few minutes. For this enter on the console # X -configure This will create the configuration file based on the hardware Xorg has found. This file should be copied to /etc/X11/xorg.conf after the changes were made.

ATTENTION!
Under FreeBSD 7.2 and Xorg 7.4 it is impossible to enable DRI and DRI2 because there are unknown problems with suspend und resume if it is enabled. So DRI/DRI2 must be disabled!

Here is my working XOrg configuration:

Section "ServerLayout"
	Identifier     "X.org Configured"
	Screen      0  "T43Screen" 0 0
	InputDevice    "T43Mouse" "CorePointer"
	InputDevice    "T43Keyboard" "CoreKeyboard"
EndSection

Section "Files"
	RgbPath     "/usr/local/share/X11/rgb"
	ModulePath  "/usr/local/lib/xorg/modules"
	FontPath    "/usr/local/lib/X11/fonts/misc/"
	FontPath    "/usr/local/lib/X11/fonts/TTF/"
	FontPath    "/usr/local/lib/X11/fonts/OTF"
	FontPath    "/usr/local/lib/X11/fonts/Type1/"
	FontPath    "/usr/local/lib/X11/fonts/StarType"
	FontPath    "/usr/local/lib/X11/fonts/100dpi/"
	FontPath    "/usr/local/lib/X11/fonts/75dpi/"
EndSection

Section "Module"
	Load        "GLcore"
	Load        "dbe"
	Load        "dri"
	Load        "dri2"
	Load        "extmod"
	Load        "glx"
	Load        "record"
	Load        "xtrap"
	Load        "freetype"
	Load        "type1"
EndSection

Section "InputDevice"
	Identifier  "T43Keyboard"
	Option      "XKBLayout" "de"
	Driver      "kbd"
EndSection

Section "InputDevice"
	Identifier  "T43Mouse"
	Driver      "mouse"
	Option	    "Protocol" "auto"
	Option	    "Device" "/dev/sysmouse"
	Option	    "ZAxisMapping" "4 5 6"
EndSection

Section "Monitor"
	Identifier  "T43Monitor"
	VendorName  "IBM"
	ModelName   "TFT-Thinkpad T43"
	Option      "DPMS" "TRUE"
	Modeline    "1024x768" 56.00  1024 1072 1104 1184  768 771 775 790 +hsync -vsync
	DisplaySize 285 213
EndSection

Section "Device"
	Identifier  "T43Card"
	Driver      "radeon"
	VendorName  "ATI Technologies Inc"
	BoardName   "M22 [Mobility Radeon X300]"
	BusID       "PCI:1:0:0"
        Option      "AGPMode" "1"
        Option      "DynamicClocks" "TRUE"
        Option      "VGAAccess" "TRUE"
        Option      "DRI" "FALSE"
        Option      "AccelMethod" "EXA"
	Option      "PanelSize" "1024x768"
	Option      "DDCMode" "TRUE"
	Option      "MonitorLayout" "LVDS"
	Option      "EnablePageFlip" "TRUE"
	Option      "VBERestore" "TRUE"
	Option      "DevicePresence" "TRUE"
#	 Option      "BIOSHotkeys" "ON"
EndSection

Section "Screen"
	Identifier "T43Screen"
	Device     "T43Card"
	Monitor    "T43Monitor"
	DefaultDepth 24
	SubSection "Display"
		Viewport   0 0
		Modes      "1024x768"
		Depth      24
	EndSubSection
EndSection

The mouse device in the section "InputDevice" Identifier "T43Mouse" of the Xorg configuration communicates with the driver /dev/sysmouse. To enable the device driver the mouse daemon moused has to be activated in the system configuration /etc/rc.conf with the following entry:

moused_enable="YES"

Further parameters are submitted by the entry

moused_flags="..."

For these parameters look at the man page for moused(8). For more information see subsection USB Mouse in of this article.

Network

The configuration of the LAN device Broadcom Ethernet Controller BCM5750 (bge0) is very easy and it is done in a few minutes.

Network with DHCP
In this case in the system wide configuration file /etc/rc.conf only these entries have to be inserted:
hostname="t43.domain.tld"
ifconfig_bge0="DHCP"
That's it
Network without DHCP
Here you have to insert in the file /etc/rc.conf the IP address of the notebook, the fully qualified hostname and the default router:
hostname="t43.domain.tld"
defaultrouter="<IP address of the router>"
ifconfig_bge0="<IP address of the notebook>"

If the notebook is used in an network with wireless LAN the following lines describe how to do a setup of the WLAN card.

Setting up a wireless network is as easy as with a normal network adaptor. There are some small but important differencies, as you can see. First off all the name of the WLAN adaptor is ath0 which shows us that the chipset is from Atheros. The setup has to done in the two files /etc/rc.conf and /etc/wpa_supplicant.conf. The last one is important for the security of your WLAN.

ATTENTION!
Please do not use any WEP "security". Better use WPA or even better use WPA2!

Now to the setup.

/etc/rc.conf
ifconfig_ath0="WPA ssid <SSID> DHCP"
This enables DHCP and WPA support. The place holder <SSID> means that at this position you have to enter the SSID from your WLAN router.
To get the full WPA support the following file has to be created:
/etc/wpa_supplicant.conf
In this file only a few lines are neccessary for getting a connection:
network={
  ssid="<SSID of your WLAN router>"
  psk="<PSK key of your WLAN router>"
}

With this few lines you get access to your router.

ATTENTION!
Do not forget to setup your router in the right way. Activate the firewall (packet filter) in your router so that nobody can get access from the internet to your notebook! If you do not know how to do this then you should or better must consult a specialist!
WLAN with suspend and resume

There is a problem with wireless lan adaptors while resuming the notebook. To prevent this an easy way is to add some lines to two scripts

  • Suspend state: To allow to jump in a clean suspend state add the following line to /etc/rc.suspend:
/etc/rc.d/netif stop
logger -t $subsystem network interfaces stopped
  • Resume state: To setup the WLAN interface in the right way after resuming add the following line to /etc/rc.resume:
/usr/sbin/wpa_cli reassociate
/etc/rc.d/netif start
logger -t $subsystem network interfaces startet

The command logger is used to write some information to the logfile /var/log/messages so that the administrator has the chance to solve problems.

ATTENTION!
These line must be added before (!!!) the line
sync && sync && sync

Bluetooth

Bluetooth works under FreeBSD well. It depends on which devices you use. Generally one line has to be added to /boot/loader.conf:

ng_ubt_load="YES"

This enables the Bluetooth stack for other drivers and daemon processes.

In my case I use an Siemens S55 mobile phone. Therefore the following three lines enabling a communication with the mobile:

hcsecd_enable="YES"
sdpd_enable="YES"
bluetooth_enable="YES"

In the subsection Thinkpad buttons of the section Tips and Tricks you can see how to enable and disable the Bluetooth device.

Sound

For enabling the sound card only one line in /boot/loader.conf has to be added:

snd_ich_load="YES"

Now the sound card can do its job.

Gnome Desktop

On my notebook I have chosen Gnome Desktop as my preferred GUI. In my opion it looks better is more easier to handle. But with Gnome 2.26 there are problems that were unknown under earlier versions:

  • Turning off the external powersupply forces the notebook to suspend mode
  • xscreensave does not switch to suspend mode when the configured time is reached
  • Sometimes Fn suspends the notebook
NOTE!
I do not know whether these problems base on HAL or on the applications itself. I think they are HAL related. But HAL is nearly un-maintainable because of the huge and bad documented configuration files: they are written in XML!

There are some applications and applets that are recommended for your work with a notebook:

Applications

Applets

Gnome-Power-Manager
Sorry, to tell this, but the Gnome-Power-Manager currently does not work with FreeBSD. I do not know why. I think this applet needs some configuration.
Here an screenshot of the Gnome-Power-Manager in the upper panel:
Gnome-Power-Manager in the upper panel
A very good feature is that the current state of charging or discharging the battery can be shown in an diagram:
Power consumption diagram
A screenshot of the info dialogbox of the Gnome-Power-Manager:
caption Information about the applet
Gnome-Battery-Applet
This applet was installed from me because the Gnome-Power-Manager does not show the current status of the battery. Here an screenshot of the Battery-Applet in the lower panel:

caption Gnome-Battery-Applet in the lower panel

Here an screenshot of the info dialogbox of Gnome-Battery-Applet:
caption Information about Gnome-Battery-Applet

Additional Hardware

In this section some interesting hardware for the ThinkPad T43 is shown. It is tested under FreeBSD and works perfect.

Adaptec SCSI-Card

A few years ago Adaptec has developed a PCCard for connecting SCSI devices to the notebook. It is called Adaptec SlimSCSI 1460D. This PCCard is recognized correctly from FreeBSD and the device driver aic1 is responsible for that piece of hardware. The card can be changed during a session without restarting the whole system.

NOTE!
The Adaptec SlimSCSI 1460 adapter has to be inserted in the lower slot of the two PCCard/PCMCIA slots!

Here a short excerpt of the system logfile /var/log/messages:

inserting of the card
Sep 20 17:24:24 t43 kernel: aic1: <Adaptec, Inc. APA-1460 SCSI Host Adapter> at port 0x340-0x35f irq 16
                                  function 0 config 9 on pccard0
Sep 20 17:24:24 t43 kernel: aic1: AIC6360, dma, disconnection, parity check, fast SCSI
Sep 20 17:24:24 t43 kernel: aic1: [GIANT-LOCKED]
Sep 20 17:24:24 t43 kernel: aic1: [ITHREAD]
removing the card
Sep 20 17:25:34 t43 kernel: aic1: detached

It is an interesting option for backup solutions. So it is possible to connect an tape streamer or DVD-RAM drive (e.g. Panasonic LF-D201, 4,7GB single sided, 9,4GB double sided).

USB Mouse

The trackpoint of the ThinkPad 43 is a great device. It is really very good usable and the you can do an exact work with it. But sometime it is better to use a real mouse device.

Hint:
If your FreeBSD uses the generic kernel GENERIC then you do not need to execute the next step.

To enable the USB mouse support you have to add either to /boot/loader.conf the following entry

ums_load="YES"

or to the kernel configuration file this pieces

device ums
device uhci
device ohci
device usb

If you have chosen the last option a new kernel has to be compiled and installed. This is described in the FreeBSD handbook in chapter 8.

I use an USB mouse from Saitek (Saitek Notebook Optical Mouse) which comes with the following signature:

# usbdevs -v

port 1 addr 2: low speed, power 100 mA, config 1, PS/2+USB Mouse(0x0210), 
 vendor 0x1267(0x1267), rev 0.01

To enable the mouse support in the system configuration /etc/rc.conf the following entry should be added:

moused_enable="YES"

Further parameters are submitted by the entry

moused_flags="..."

For these parameters look at the man page for moused(8).

Hint:
Now the USB mouse can be connected or disconnected during operation and the system recognizes this.

USB Memory Sticks

The USB memory sticks that I have tested do not work with FreeBSD Version 7. Normally the USB sticks are represented as SCSI devices /dev/da* because the CAM layer is responsible.

Connecting and Removing
With some sticks this will cause system panics. This should be solved with FreeBSD Version 8
Writing data
When the USB memory stick was successfull mounted and some data are written to it, all the data are lost

With the new USB stack that will be introduced with FreeBSD Version 8 all this problems are hopefully solved.

Tips and Tricks

In this section some tips and tricks are described.

Thinkpad buttons

In the section about ACPI the key pair Fn + F4 was used to switch to suspend mode. The other interesting key pair is Fn + F5 which enables or disables the buildin Bluetooth device. Instead of writing for each function a separate script it is better to have one script which executes all functions.

To get the script run you must modify the entry in /etc/devd.conf:

notify 10 {
	match "system" "ACPI";
	match "subsystem" "IBM";
	action "/usr/sbin/acpi_keys.sh $notify ibm";
};

Here is the (extendable) script with the name /usr/sbin/acpi_keys.sh:

#!/bin/sh
#

# Check if all parameters are set
if [ "$1" = "" -o "$2" = "" ]
then
	echo "usage: $0 notify oem_name"
	exit 1
fi

# storing the parameters in variables
NOTIFY=`echo $1`
OEM=$2

# for easier modification set some variables to system commands
LOGGER="/usr/bin/logger"
SYSCTL="/sbin/sysctl"
ACPICONF="/usr/sbin/acpiconf"

# start scripts for bluetooth
# important: set all to "YES" in /etc/rc.conf!

# hcsecd_enable="YES"
HCSECD_ENABLE="/etc/rc.d/hcsecd start"
HCSECD_DISABLE="/etc/rc.d/hcsecd stop"

# sdpd_enable="YES"
SDPD_ENABLE="/etc/rc.d/sdpd start"
SDPD_DISABLE="/etc/rc.d/sdpd stop"

# bluetooth_enable="YES"
BT_ENABLE="/etc/rc.d/bluetooth start ubt0"
BT_DISABLE="/etc/rc.d/bluetooth stop ubt0"

# check which key was pressed
case ${NOTIFY} in
	0x04)
		# suspend/resume key Fn + F4
		MESSAGE="ACPI mode S3 activated"
		${ACPICONF} -s 3
		;;
	0x05)
		# bluetooth on/off key Fn + F5
		LEVEL=`sysctl -n dev.acpi_${OEM}.0.bluetooth`
		if [ "$LEVEL" = "1" ]
		then
			${MOBILE_DISABLE}
			${HCSECD_DISABLE}
			${SDPD_DISABLE}
			${BT_DISABLE}
			${SYSCTL} dev.acpi_${OEM}.0.bluetooth=0
			MESSAGE="bluetooth disabled"
		else
			${SYSCTL} dev.acpi_${OEM}.0.bluetooth=1
			MESSAGE="bluetooth enabled"
			sleep 2
			${HCSECD_ENABLE}
			${SDPD_ENABLE}
			${BT_DISABLE} # reinitialize BT stack
			${BT_ENABLE}
		fi
		;;
	*)
		;;
esac

# log all activities to syslog (/var/log/messages)
${LOGGER} ${MESSAGE}

exit 0

Do not forget to set the right for execution access!

References

The following man pages are important for understanding:

External links