Installing FreeBSD 7 (i386) on a ThinkPad T43
Contents
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.
Known Issues
Everythings works like a charme except one thing: Suspend und Resume.
# acpiconf -s 3
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"
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
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.
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.
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.
- 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.
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
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:
- A very good feature is that the current state of charging or discharging the battery can be shown in an diagram:
- A screenshot of the info dialogbox of the Gnome-Power-Manager:
- 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:
- Here an screenshot of the info dialogbox of 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.
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.
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).
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:
- devd(8), devd.conf(5)
- xorg.conf(5)
- sysctl(8), sysctl.conf(5)
- rc.conf(5)
- acpiconf(8)
- kldload(8), loader.conf(5)
- device.hints(5)
- aic(4)
- moused(8), sysmouse(4), ums(4)
- wpa_supplicant(8), wpa_supplicant.conf(5)
- est (no manpage), p4tcc (no manpage)
External links
- The FreeBSD Homepage
- The excellent FreeBSD manual: FreeBSD Handbook
- German forums: UNIXForen.de and BSDForen.de
- FreeBSD Laptop List