Here is a quick HOWTO for installing Linux on a Toshiba Satellite SM30 laptop. This computer features an Intel Centrino 1.5Ghz processor with 512MB RAM, a 1280x800-pixel widescreen display, an nvidia GeForce FX video card and of course, a built-in Intel wi-fi adapter. It also features harman/kardon built in speakers, adding an amazing audio quality to the formula. There are several variations of the SM30 series, which I believe is also known as M30 series. The details from lscpi follow:


0000:00:00.0 Host bridge: Intel Corp. 82855PM Processor to I/O Controller (rev 21)
0000:00:01.0 PCI bridge: Intel Corp. 82855PM Processor to AGP Controller (rev 21)
0000:00:1d.0 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 03)
0000:00:1d.1 USB Controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 03)
0000:00:1d.7 USB Controller: Intel Corp. 82801DB/DBM (ICH4/ICH4-M) USB 2.0 EHCI Controller (rev 03)
0000:00:1e.0 PCI bridge: Intel Corp. 82801 PCI Bridge (rev 83)
0000:00:1f.0 ISA bridge: Intel Corp. 82801DBM LPC Interface Controller (rev 03)
0000:00:1f.1 IDE interface: Intel Corp. 82801DBM (ICH4) Ultra ATA Storage Controller (rev 03)
0000:00:1f.5 Multimedia audio controller: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 03)
0000:00:1f.6 Modem: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 03)
0000:01:00.0 VGA compatible controller: nVidia Corporation NV34M [GeForce FX Go 5200] (rev a1)
0000:02:07.0 FireWire (IEEE 1394): Texas Instruments TSB43AB22/A IEEE-1394a-2000 Controller (PHY/Link)
0000:02:08.0 Ethernet controller: Intel Corp. 82801BD PRO/100 VE (MOB) Ethernet Controller (rev 83)
0000:02:0a.0 Network controller: Intel Corp. PRO/Wireless LAN 2100 3B Mini PCI Adapter (rev 04)
0000:02:0b.0 CardBus bridge: Toshiba America Info Systems ToPIC95 PCI to Cardbus Bridge with ZV Support (rev 33)
0000:02:0d.0 System peripheral: Toshiba America Info Systems SD TypA Controller (rev 05)


The first step was to get linux installed on the machine before even seeing the windows logo on the screen : )  I quickly entered the BIOS setup page where I selected "CDROM" as the first boot device. I booted into debian-based LinEspa 0.20 and booted into the system. Installed the distro on the hard drive and booted into the system in about 15 minutes.

Even though the hardware autodetection resolved quite a few things, as usual I decided to go ahead and compile my own kernel with just the stuff I need. First, download and extract your kernel drivers, and start your kernel configuration (as root) with:

cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.8.1.tar.bz2
tar -jxf linux-2.6.8.1.tar.bz2
cd linux-2.6.8.1
make menuconfig


POWER MANAGEMENT

Under "Power management options (ACPI, APM)", enable Power Management ([*] Power Management support), disable APM and enable ACPI as follows:

[*] ACPI Support
[*] Sleep States (EXPERIMENTAL)
< *> AC Adapter
< *> Battery
< *> Button
< *> Fan
< *> Processor
< *> Thermal Zone
< > ASUS/Medion Laptop Extras
< *> Toshiba Laptop Extras
[ ] Debug Statements
[ ] Power Management Timer Support


HOTKEYS

By enabling the Toshiba Laptop Extras, a directory will show up under /proc/acpi/toshiba which will allow you to check and set various aspects of your machine. One of these features is the status of your Fn keys and internet keys. There is already software that would take care of all this for you. Is the FnFx daemon and can easily be installed with:

apt-get install fnfxd fnfx-client


That will install and execute the daemon. You need then to edit your .fnfxrc file and define your custom key actions. I personally launch firefox with the "I" key and amsn with the world ("E") key:

action(key="Hotbutton (I-Button)";command="firefox")
action(key="Hotbutton (E-Button)";command="amsn")


Of course you must execute fnfx-client (and add it to your init scripts) in order for these special keys to work.

SOUND

Unfortunately the "Advanced Linux Sound Architecture" did not work for me, but OSS did. Enter "Device Drivers" and enable Sound Support (< *> Sound card support). Enable only these two options and disable everything else:

< *> Open Sound System (DEPRECATED)
< *> Intel ICH (i8xx) audio support


USB 2.0

Enable the following options:

< *> Support for Host-side USB
< *> EHCI HCD (USB 2.0) support
< *> UHCI HCD (most Intel and VIA) support
< *> USB Mass Storage support (and all suboptions if you want to be able to connect any memory card reader)
< *> USB Human Interface Device (full HID) support
[*] HID input layer support


NETWORK

In order to get your built-in network card to work, select the following options:

[*] Ethernet (10 or 100Mbit)
[*] EISA, VLB, PCI and on board controllers
< *> Intel(R) PRO/100+ support


As far as the built-in wifi adapter you will have to download drivers, for which there are two options explained later. Either way you will have to enable wlan extensions by selecting:

<*>Wireless LAN drivers (non-hamradio) & Wireless Extensions


KEYBOARD

The keyboard works ok, but there is a small issue that seems to occur with all Toshibas. The keyboard gets stuck sometimes, which is extremely annoying (the ALT key gets stuck more often). This problem seems to be caused by the Synaptic touchpad which can be disabled by commenting some lines in the kernel drivers. Simply edit the file drivers/input/mouse/psmouse-base.c and add the /* and */ marks at the beginning and end of the following blocks of code. Then recompile your kernel:

/*
* Try Synaptics TouchPad
*/

/* if (max_proto > PSMOUSE_PS2 && synaptics_detect(psmouse)) {
synaptics_hardware = 1;

if (set_properties) {
psmouse->vendor = "Synaptics";
psmouse->name = "TouchPad";
}

if (max_proto > PSMOUSE_IMEX) {
if (!set_properties || synaptics_init(psmouse) == 0)
return PSMOUSE_SYNAPTICS; */

/* max_proto = PSMOUSE_IMEX;
} */

/* synaptics_reset(psmouse);
} */


Thanks to Bruno Ferreira for pointing to this interesting article: http://www.kraus.tk/installnotes/toshiba-m30/toshiba-m30.htm

CENTRINO FREQUENCY SCALING

The Centrino processor supports frequency scaling. Meaning that you can dinamically change your CPU clock rate as needed. The clock rate ranges between 600mhz and 1.5Ghz, meaning that while typing an email for example, your CPU speed will drop to 600mhz and will jump back to 1.5Ghz when your applications demand more power. In order to achieve this, there are two steps required: Compiling CPU scaling support in your kernel and installing powernowd, a service that monitors your CPU utilization and switches your clock rate based on predefined thresholds.

In order to compile the necessary support into your kernel, select the following options in Power management options (ACPI, APM) --> CPU Frequency scaling --->

[*] CPU Frequency scaling
<*> 'performance' governor
<*> CPU frequency table helpers
<*> Intel Enhanced SpeedStep
[*] Use ACPI tables to decode valid frequency/voltage pairs (EXPERIMENTAL)
<*> Intel Speedstep on ICH-M chipsets (ioport interface)


Then, simply install powernowd as follows (debian-based systems)
apt-get install powernowd


You can monitor your CPU frequency at anytime with:
cat /proc/cpuinfo



WRAPPING UP

There is more stuff but we will focus here on the basic needs. If you are interested in my .config kernel configuration file, just click here . Save and exit and do:

make
cp arch/i386/boot/bzImage /boot/268


Now create an entry in your bootloader. If you are using lilo, edit your /etc/lilo.conf and add:

image=/boot/268
label=Linux-2.6.8.1
root=/dev/hda3


(set your right root partition and then execute "lilo" in order to update your bootloader)

Now boot into your new kernel. You should have USB, network and audio working like a charm.

VIDEO

The next challenge was to get the widescreen to work, as the 1280x800 format requires a non-standard Modeline entry in the X11 configuration file. Well, it really took me no time to find it on the web, so I started downloading the NVIDIA video drivers (IA32) from http://www.nvidia.com/linux. Follow the nvidia installation instructions and then set your 1280x800 resolution by changing relevant X11 sections in your /etc/X11/XF86Config-4 file as follows:


Section "Screen"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1280x800"
EndSubSection
Device "Device[0]"
Identifier "Default Screen"
Monitor "Widescreen"
EndSection

Section "Device"
Option "NvAGP" "1"
Option "NoLogo" "1"
BoardName "GeForce FX"
BusID "1:0:0"
VideoRam 32768
Driver "nvidia"
Identifier "Device[0]"
VendorName "NVidia"
EndSection

Section "Monitor"
Identifier "Widescreen"
VendorName "Generic"
ModelName "Flat Panel 1280x800"
HorizSync 31.5-100
VertRefresh 59-76
Option "IgnoreEDID" "1"
Modeline "1280x800" 83.91 1280 1312 1624 1656 800 816 824 841
EndSection


A quick test with glxgears reports almost 2500fps which seems to be quite ok : ) 

MODEM

I don't really need the modem and haven't had time to mess up with it. However, here is a great article on how to get it to work (in spanish):
http://www.freepgs.com/vgozalbes/index.php?mod=new&id=22


WI-FI

As far as the wi-fi, there are two options for the Intel PRO/Wireless 2100:

Linux drivers: There is a project on sourceforge which seems to be on an early stage and unfortunately did not work for me. The webpage is http://ipw2100.sourceforge.net/. In my case I've got everything to compile and the module to load without any errors, but my new network interface will simply not show up. No trace of any errors whatsoever, it simply did not work for me.

Windows drivers: There is a project called ndiswrapper. It is a kernel module that actually provides runs the windows NDIS drivers provided by vendors. The webpage is available at http://ndiswrapper.sourceforge.net/

Installation is quick and easy. Download the source and compile with make && make install. Now you have to download the windows drivers from Intel and execute the installation with wine. Just click next next as all you care about is about obtaining the following files:

w70n501.inf
w70n51.sys
w70n5msg.dll


With those files in the current directory, execute:

ndiswrapper -i w70n501.inf
modprobe ndiswrapper


Your wireless interface should be enabled as wlan0.

That is all for now. I am very happy with the performance of this machine running linux. Openoffice launches in no time even without prelinking and everything moves extremely quickly with XFCE4. Here is a screenshot:

Running Linux on Toshiba SM30

All knowledge and software published in this website is released under the GNU General Public License (GPL)