Howto use Debian GNU/Linux on a Gericom Phantom notebook
This is just a quick page describing what works on my notebook under Linux and (sometimes) how I got it working :-) It is no longer up-to-date, but might still be of use to somebody. Since about a year, I now work with an IBM/Lenovo Thinkpad T42p.
I would not have been able to set all that up without the help of many other webpages like this one. Therefore I want to give a short summary on the infos I have gathered, especially trimmed for the Gericom Phantom notebook (which is IMHO a very nice one).
This webpage has been written quickly, with all of the details just from
remembering. If you find anything to be incorrect or there is a
description missing, feel free to email me and I might be able to dig it
up.
Basic Hardware
The Gericom Phantom Hardware is currently (June 2002) pretty well supported under Linux. When using any current Linux distribution, there should be no bigger headaches in setting it up. On this page, I will concentrate on Debian GNU/Linux, since I am using (and developing for) it since over 3 years and therefore definitely know it best. At the moment I am using Debian unstable, staying on the bleeding edge.
At the moment I am using BIOS version 1.07 which seems to be rather stable. Don’t try to update it for yourself or you might destroy!! your mainboard during BIOS flashing. It happened to me but fortunately the Gericom support staff exchanged it without charging for it (because the BIOS update came from their server and I did what the docs told me to do) - many thanks to them.
Video
In this notebook there is a plain ATI Mach64 Rage Mobility with 8 MB of RAM. It is supported perfectly by X-Windows with the “ati” driver and by the vesafb kernel module for framebuffer support (and of course the obligatory bootlogo). I had no problems setting that up, but you might want to look at my XF86Config-4 file for details. Working with the LCD display and/or an external monitor just works by using the normal Fn-F8 key combination for switching between the modes. The only disadvantage of this chipset is that dual head mode is not supported - the external monitor will always display the same as the LCD display, therefore resolution and graphic depth can not be different.
Recently I also set the kernel framebuffer support up so that I get 1024x768 console mode and a nice bootlogo. Please look at my kernel config and grub menu file for details. You might note that I am using the grub bootlogo patch from the Debian bug tracking system - gives a very nice image.
Sound
The notebook uses a CS4281 sound chip, which currently works with both OSS support in kernel 2.4.18 and ALSA 0.9rc. In the past, sound support did not work quite correctly. With older kernels, sound was clipped, it looped forever etc. But later kernels (can’t remember the exact version, but must ba around 2.4.10) work correctly and I had no problem since then. ALSA works only very recently, but now since it works I prefer it over the kernel OSS support (more features, better design, should also be more compatible with APM/ACPI).
For using the kernel support, you only need to load the “cs4281” kernel module and everything just works. For alsa, you can use my ALSA modules config, which is under Debian located in /etc/alsa/modutils/0.9 and linked from /etc/modutils/alsa. Nothing else to configure (maybe besides setting “startosslayer=true” in /etc/alsa/alsa-base.conf).
PCMCIA
I had some headaches with PCMCIA support, but now it works like a charm
(now that I know how it must be set up on this hardware). The
interesting point is that the “i82365” module from the PCMCIA package
sources works with the integrated cardbus controller, but is unable to
initalize it - that took me 1 day :-)
So when loading the kernel “yenta_socket” module (which is used for
cardbus support), unloading it and then loading the “i82365” module
(generated from external PCMCIA package source, not from the kernel), it
works. But then loading “i82365” directly, it will be unable to
initialize the hardware. To make a long story short: Don’t use the
PCMCIA package source (which are in the pcmcia-source package in
Debian), but use the kernel PCMCIA support. In fact, it works nice with
that - here is my PCMCIA config
file
(in Debian under /etc/default/pcmcia). The only reason for me to try the
external PCMCIA modules was to get the prism2 driver for my D-Link
DWL-650 wireless LAN card running. But it turned out that although an
unpacked and configured PCMCIA source package is needed for compiling
this driver, it can also work with the kernel level support (even when
the authors of this driver advise against this). Therefore, I installed
the kernel (review my kernel
config),
the PCMCIA package sources, compiled the kernel with Debian’s wonderful
make-kpkg utility and then compiled the prism2 (linux-wlang-ng-0.1.13,
0.1.14-pre5 didn’t work for me) driver. Now everything works. I can
connect to access points and use the connections normally and are able
to use airsnort and kismet for probing for networks.
I also have a PCMCIA-to-Compactflash adapter (only costs about 11€), which just creates another IDE harddisk device when plugged in - nothing to configure. But beware that removing the adapter without unmounting and maybe using hotplug to remove it from the kernel will hard-lock the system. Switching it off is the only solution known to me.
Network
The network support is painless - the standard kernel module “eepro100” works perfectly. The external module “e100” is an alternative (seems to have more features and is maybe a little faster - but I have not tested this), but at the time I have tried it it had problems with suspends. Therefore I use “eepro100” (you can look at my module aliases in /etc/modutils/local).
Modem
I got the internal Lucent-based WinModem to work once, but then updated the kernel and did not care to patch it again. The binary module can be installed, but it requires some work and I usually don’t need the modem anyways. You can email me for details, I might be able to remember how it worked when I tried it.
Infrared port
It took me quite some time to get this working, but now it does. In the
BIOS, I enabled it as “FIR” (fast infrared) and now use these module
aliases
to initialize it. When used with the irda-tools package, it is
initalized correctly and detects other notebooks and my Nokia 8210
mobile phone when in range. Unfortunately I was unable to get the IrCOMM
support with my 8210 to work - so surfing on the road does currently not
work. Maybe I will play with that again when I have too much time.
I have not tried to transfer file between notebook via infrared - I am
always using a Ethernet crossover cable to get 100MBit/s.
USB
The USB support works with the standard kernel module “usb-uhci”. I have tried it with a optical USB mouse, a HP895Cxi printer, a Philips 680 webcam and a Canon Powershot S40 digital camera - no problems with any.
DVD / Floppy hotplugging
This is kind of weird sometimes, but when using with discipline, it poses no problems. Both the floppy and the DVD drive can be accessed normally when they are plugged in at BIOS boot time (i.e. before Linux is booted) - independently if they are connected via the external port or the home base (one or both). However, I usually deactivate the floppy controller completely in the BIOS when I don’t use the floppy. When the controller is enabled, the floppy is not present and Linux tries to access it, there will be a really long timeout. When the controller is disabled, it returns immediately.
Hotplugging: For the DVD drive, it should work with the hotplug package,
which seems to be able to tell the kernel to add and remove IDE devices.
But I had no time to try it (I will in the near future).
Just removing the DVD drive after it was present when booting the kernel
will just freeze the kernel - don’t do try that at home :-)
Hotplugging the floppy does not seem to work and I think it will also
not be supported by the hotplug package.
External PS/2 mouse and keyboard
Nothing to say about this, it just works when the keyboard and/or the PS/2 mouse (both can be connected simultaneously when the home base is used - it has a second PS/2 port) are/is connected before powering the system on.
Power management
I just recently got the power management fully working, which is now the reason for writing this page. It was difficult for me and maybe this page helps others to get ot running.
ACPI
Principally, I would like to use ACPI because it has more features and can control the hardware to a much better degree. But at the moment (June 2002) neither the standard ACPI kernel support from kernel 2.4.18 nor the patches from sourceforge.net/projects/acpi provide a satisfactory degree of support. The kernel support is out of question because it is unable to read the battery state and the acpi patch version 20020517-2.4.18 does never switch off my fan - and this is too much noise for me…..
APM
Because of those reasons, I stick to the APM support, which currently
offers everything I need: the battery state is read correctly, the
processor fan only runs occassionally when doing heavy computation (like
LaTeX or kernel compiling) and suspend-to-RAM as well as suspend-to-disk
work. To get this working, I just loaded the normal “apm” kernel module
and use the apmd daemon in default configuration.
However, it took me quite some time to get the suspend-to-disk
partition correctly set up so that the BIOS recognizes it. After I
exchanged my 64 MB RAM module to a 256 MB one, yielding 320 MB of system
memory (with 64 MB being installed on the mainboard), the previous
partition was obviously to small. So I made room for enlarging it and
re-created it with lphdisk. This didn’t work, so I tried the DOS phdisk
utility that comes with the notebook - didn’t solve the problem either.
It seems that the partition table was in a state that the BIOS was
unable to interpret correctly. Booting a simple DOS and running fdisk
/mbr finally solved. Therefore it might be enough to use lphdisk when
the partition table can be understood by the BIOS - but I don’t want to
try it now…..
Now Fn-Esc sends the notebook to suspend-to-RAM (and waking it up really
works :-) ), the “hidden” Fn-a or Fn-q combinations send it to
suspend-to-disk. Every piece of hardware is re-initialized when waking
the notebook up from either suspend mode (including my wireless LAN
card, which I find impressive), with the exception of my USB mouse.
After suspending and waking up, the USB mouse does not work anymore
under X-Windows. Removing it, plugging it in again and restarting the
X-Server solves the problem, but I would rather have it being
re-initialized automatically (without restarting X). I will try to solve
this by using GPM for mouse support, but this will take some time.
Update: Now the USB mouse also works after resuming and also when
removing it and plugging it in again during the X-Server running. The
trick was to use /dev/input/mice instead of /dev/usbmouse for the second
input section in the X-Server
configuration
*and* loading the kernel module “mousedev” unconditionally during
bootup - in Debian by adding it to
/etc/modules.
This module creates the device /dev/input/mice (when using devfs) and is
normally loaded by hotplug when the USB mouse is getting plugged in.
When it is already loaded when the X-Server starts, everything works
like a charm: unplugging it, connecting it, suspend, resume…. I am
really amazed by how mature X and USB support are currently.
Harddisk spindown
Under Linux, this has nothing to do with either APM nor ACPI, it is handled by the daemon noflushd. Here you can find my configuration for noflushd (in Debian under /etc/default/noflushd), which spins the hard disk down after 5 minutes of inactivity (and I don’t use cron, so it usually stays down).
Various Linux remarks
I use the notebook for nearly everything - writing my diploma thesis
(and hopefully soon my PhD thesis) in LaTeX, developing
Gibraltar, maintaining my Debian packages,
writing letters with OpenOffice, communication via ICQ, Email via
Mozilla, ……
You can view my list of installed Debian
packages
(will most probably not be up to date, but this is a state where I do
almost the same as on my main desktop PC).
I used to use ext3 for my Linux partitions, but since it has an own write strategy which can currently not be controlled by noflushd, I switched back to ext2. But I am not very happy with having a non-journalled file system again - when the battery is failing, the next reboot will take a long time :-(
Summary of my configuration files
Some of those files will be Debian specific, some will not. Nevertheless
they should help.
X-Server configuration:
/etc/X11/XF86Config-4
kernel config:
/boot/config-2.4.18
grub menu file:
/boot/grub/menu.lst
ALSA modules config:
/etc/alsa/modutils/0.9
PCMCIA config file:
/etc/default/pcmcia
module aliases:
/etc/modutils/local
modules loaded during bootup:
/etc/modules
configuration for noflushd:
/etc/default/noflushd
list of installed Debian packages (dpkg
–get-selections)
All of the correct things were probably borrowed from somewhere else and
all of the mistakes are certainly mine…
Rene Mayrhofer, last updated in October 2005, but technical content is
still from June 2005
Update 2007-12: now running Kubuntu 7.10
As of December 2007, this Gericom Phantom laptop is now running Kubuntu
7.10 and acts as my parents’ mobile “Internet” machine, including UMTS
connectivity via one of these Huawei E220 USB UMTS/GPRS modems. The
Kubuntu installation went without any difficulty and all the hardware (I
haven’t tried the Winmodem so far) seems to be supported out-of-the-box
and works well. Even the suspend modes (suspend-to-RAM and
suspend-to-disk) work without tinkering with all built-in hardware
components.
Only two minor tweaks were required with Kubuntu 7.10:
Bootsplash support broken
For some reason I haven’t found out, the bootplash support (usplash) doesn’t work on the Gericom Phantom. When used, it messes up the console and makes it completely unusable. Therefore, I simply disabled it by removing the “splash” and “vga” options from /boot/grub/menu.lst and calling “update-grub”.
PCMCIA WLAN broken after resume
As the Gericom Phantom does not have any built-in wireless LAN, we use it with an old D-Link DWL-650 PCMCIA WLAN (802.11b only) card, which is based on a Prism 2.5 chipset. Kubuntu 7.10 supports it out-of-the box using the hostap_cs module, and after the first bootup with the card inserted, it could be set up easily using the KDE KNetworkManager front-end for NetworkManager. Even WEP and WPA(2) support works without any trouble - in contrast to the D-Link drivers under Windows 2000/XP that don’t support WPA at all and WEP only unstably.
The problem was that NetworkManager failed to recognize this card after
resume from one of the suspend modes with no apparent difference in
configuration than after a fresh bootup. I tried completely unloading
PCMCIA support (yenta_socket for the PCMCIA host on the Gericom
Phantom, rsrc_nonstatic, pcmcia, and pcmcia_core) and the loaded card
modules (orinoco_cs, orionoco, and hermes - none of which are used for
this card -, hostap_cs, and hostap), ejecting and re-inserting the
card, and re-loading the modules. Nothing got the card to work again.
One issues seemed noteworthy, namely that the network interface was
wlan0_rename instead of the usual name wlan0. Interestingly,
NetworkManager deals with this well after a fresh bootup, but no longer
after suspending.
It turns out that the problem was a persistent udev rule created
automatically in /etc/udev/rules.d/70-persistent-net.rules. This rules
“remembers” the MAC address of the WLAN card to assign the name eth1
when it is inserted. The problem is that the hostap driver actually
created two network interfaces: wifi0 as a “master” interface for
controlling virtual access points and wlan0 as the actual interface to
use, e.g. in managed mode. udev now tries to apply the rule - and thus
set the name eth1 - twice, because both interfaces have the same MAC.
Obviously, this can’t work and the actual interface ends up being named
wlan0_rename.
The fix is simple: disable the rule with the respective MAC address in
/etc/udev/rules.d/70-persistent-net.rules by putting a hash sign (#) in
front, and completely disable the rule generator in
/etc/udev/rules.d/75-persistent-net-generator.rules (e.g. by removing
the file, but I just commented all the lines in it to make sure that no
package update will automatically re-create the file).
Additionally I created a file /etc/modprobe.d/blacklist-local with
blacklist orinoco
blacklist orinoco_cs
blacklist orinoco_pci
blacklist hermes
blacklist prism2_pci
blacklist prism_pci
to prevent the unused orinoco modules from being loaded (and prevent any chance of them interfering with hostap). But I don’t think this is necessary to fix the problem.
There seem to be two issues in Kubuntu 7.10 that create this problem: that persistent rules are generated for network modules that create multiple network interfaces with the same MAC addresses, and that NetworkManager can not deal with the resulting mess of interface names after a suspend-resume cycle while it can after a fresh bootup. The first issue is IMHO a real bug in the udev rules while the latter is mostly annoying and makes debugging hard.