Debian GNU/Linux on a Gateway Solo 1450

Introduction

This page will have some information about how to install Linux on a Gateway Solo 1450. The specs of the machine are:

Intel Celeron 1.33Ghz
256 MB SDRAM
30GB Ultra ATA HD
Integrated 1.44MB 3.5" floppy diskette drive
Integrated 8x/8x/24x CDRW / 8X DVD Combo
14.1" XGA TFT Active Matrix
4X AGP with 8MB Video Memory
Integrated Sound and Stereo Speakers
Integrated V.92 56K Modem
Integrated 10/100 Ethernet

The distribution that is used for this installation is Debian GNU/Linux and it is a mixture of the current stable release (called Woody) and the testing branch.

Preparation

The 30GB harddisk has one big Windows XP NTFS partition. I decided to make this machine dual boot, so I had to resize the current partition. An alternative would be to re-install Windows, on a smaller partition. Currently no open source tools can resize a NTFS partition so I had to use Partition Magic 8.0 for it. I shrunk the existing 30GB partition to about 15GB, which left 15GB of used space for Linux.

Installation of base system

The next step is the installation of the base system. I used a Woody (Debian GNU/Linux 3.0) boot disk. This disk has various kernel configurations. I started with the 2.4 kernel but that would lock up so I used the 2.2 IDE version. By default Debian is using the frame buffer mode so it can display Chinese and Japanese characters in the installation.  In this mode the display is really bad and hard to read, so I rebooted again from the disk using the standard mode:
linux video=vga16:off
Going through the debian installer, the following paritions were created:
/dev/hda5
512MB (swap)
/dev/hda6
7GB (ext2, /)
/dev/hda7
8GB (ext2, /home)
I want to use ext3 but the 2.2.20 kernel that is used doesn't support this. We will change this later. As part of the installation a boot floppy will be created, will deal with the dual boot issues later.

Kernel

Now the kernel needs to be replaced. Get the source for 2.4.19 and the following kernel patches:
Preemptible kernel: http://www.tech9.net/rml/linux/
ACPI: http://acpi.sourceforge.net/
Apply both patches and run the kernel configuration tool. I prefer the cursus mode. I also use the Debian kernel-package to create kernel packages. Here is my kernel configuration.
cd /usr/src
tar -xjvf linux-2.4.19.tar.bz2
zcat acpi-20020918-2.4.19.diff.gz | patch -p0
patch -p0 < preempt-kernel-rml-2.4.19-2.patch
cd linux-2.4.19
make menuconfig
make-kpkg clean
make-kpkg --revision=custom.1.0 kernel_image
This creates a Debian package which can be installed.

Dual boot

Now the new kernel is ready it is time to make it bootable. I installed grub in /dev/hda6. For more information on how to install grub see Grub in Debian howto
grub-install /dev/hda6
edit /boot/grub/menu.lst and make sure groot and kopt are set right:
# groot=(hd0,5)
# kopt=root=/dev/hda6 ro vga=773
Run the update script to reflect all the changes
update-grub
The next step is to capture the boot record in a file, the file then has to be installed on the windows partition.
dd if=/dev/hda6 of=bootsect.lnx bs=512 count=1
cd \
attrib -s -r -h boot.ini
edit boot.ini
c:\bootsect.lnx="Linux"
Get the "bootsect.lnx" file and copy it in c:\. Now were done and can put the boot.ini file back:
copy bootsect.lnx c:\
c:
cd \
attrib +s +r +h boot.ini
Now reboot the machine and the NT loader will show two entries, the Windows and Linux entry. When we select the Linux entry we will get the Grub menu, select the 2.4.19 kernel and we are booting the new kernel.

Fan

The fan is controlled by ACPI and by default is always running. I've created a little script that I put in a cronjob. It runs every five minutes and checks for the temperature. If the temperature is lower than 40C it will turn the fan off, it will turn the fan on when the temperature reaches 50C. The script looks like:
#/bin/bash

# check temperature
temp=`cat /proc/acpi/thermal_zone/THRM/temperature | awk {'print $2'}`
echo "Current temperature: $temp"

# turn fan on when too warm
if [[ "$temp" -ge "50" ]];
then
echo -n 0 >/proc/acpi/fan/FAN0/state
fi

# turn fan on when too warm
if [[ "$temp" -le "40" ]];
then
echo -n 3 >/proc/acpi/fan/FAN0/state
fi
To create a cron job for it you need to add the following to /etc/crontab:
*/5 * * * * root /usr/local/bin/gateway-fan

XFree86

I installed the latest version of XFree86 from Debian/testing. Currently that is 4.2.1. Unfortunately there is a problem with the support of the Intel i830 chipset. It only sees 1MB of video RAM and that is only enough for a 640x480x16 display. With the proper driver the screen can show 1024x768x24. More information about this problem can be found http://www.cse.unsw.edu.au/~chak/linux/c400.html#xfree86. This site describes the installation of a Linux on a Dell laptop that is using the same i830 chipset.
Fortunately there is a patch available for this problem. Also the new 4.3 version of XFree86 will have a fix for this problem. I decided to install the patch. This means that a new driver has to be compiled. For that we need to complete source code of XFree86. I took the tar ball as it is found in the Debian archives xfree86_4.2.1.orig.tar.gz. The patch can be found at http://www.jongans.com/1mb-stolen-fix.diff. Now the patch has to be applied and the driver has to be build.
tar -xzvf xfree86_4.2.1.orig.tar.gz
cd xfree-4.2.1/upstream/archives
patch -p0 < 1meg-stolen-fix.diff
cd xc
make World
Watch the make carefully. XFree86 is using the Imake system for generating the makefiles. To moment it starts compiling code you can stop the "make World" command. Then go to the i830 driver section and build the driver.
cd programs/Xserver/hw/xfree86/drivers/i810
make
Now the driver, called i810_drv.o, is ready. Copy this in the driver directory.
cp i810_drv.o /usr/X11R6/lib/modules/drivers/i810_drv.o.fix
cd /usr/X11R6/lib/modules/drivers
mv i810_drv.o i810_drv.o.orig
cp i810_drv.o.fix i810_drv.o
Now X can be installed and configured. Here is my XF86Config-4.

Ethernet

The built-in ethernet port can be controlled by the eepro100 kernel module. This works great.

Modem

Still investigating. Ran the scanModem tool as described at http://linmodems.technion.ac.il/. The results can be found in ModemData.txt and ModemData2.txt.

CDRW/DVD Combo

To be able to use the CDRW we need to use the ide-scsi kernel module. To be able to use the DVD we need to use the ide-cd module. I made this a selection at boot time using netenv. The two netenv scripts are, for SCSI
netenv_id=SCSI_CDROM
export PROFILE=scsi
rmmod ide-cd
modprobe ide-scsi
and for IDE:
netenv_id=IDE_CDROM
export PROFILE=ide
rmmod ide-scsi
modprobe ide-cd
The /etc/fstab has two entries of which only one is valid at the time:
/dev/hdc  /cdrom iso9660 ro,user,noauto 0 0
/dev/scd0 /cdrw iso8660 ro,user,noauto 0 0

Sound

The sound chip is the ESS Technology ES1988. This is supported by the 2.4.19 kernel but I'm very impressed by the work done by the ALSA project, so I'm using their drivers. The ES1988 page on their website has all the details. To build the drivers download the alsa-driver package.
cd /usr/src
tar -xjvf alsa-driver-0.9.0rc6.tar.bz2
cd alsa-driver-0.9.0rc6
./configure --with-sequencer=yes --with-oss=yes --with-cards=maestro3
make
make install
Then add the following modules to /etc/modules
snd-maestro3
snd-pcm-oss
snd-mixer-oss
snd-seq-oss

Revisions:
2002/11/29 Initial version
Lolke Bijlsma