Few blogs earlier I mentioned that I have a Thinkpad T42 available for use; not mine but permitted to use. It’s an old beast. It has modest hardware, by today’s standards, but still good. Display, keyboard, joystick (or whatever it is called), touchpad and all the ports are working fine. Only exception is a bad battery. That’s not so bad as most laptops develop battery problem after few years. I have two such case at home.
I installed Gentoo 486 version on it as it does not support PAE. Following are some detail about my T42.
Output of ‘lscpu’:
CPU op-mode(s): 32-bit
Byte Order: Little Endian
On-line CPU(s) list: 0
Thread(s) per core: 1
Core(s) per socket: 1
Vendor ID: GenuineIntel
CPU family: 6
Model name: Intel(R) Pentium(R) M processor 1.70GHz
CPU MHz: 1700.000
CPU max MHz: 1700.0000
CPU min MHz: 600.0000
Output of /proc/cpuinfo:
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 13
model name : Intel(R) Pentium(R) M processor 1.70GHz
stepping : 6
microcode : 0x18
cpu MHz : 1700.000
cache size : 2048 KB
fdiv_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr mce cx8 sep mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 ss tm pbe bts est tm2
bogomips : 3397.29
clflush size : 64
cache_alignment : 64
address sizes : 32 bits physical, 32 bits virtual
Output of ‘lspci’:
00:00.0 Host bridge: Intel Corporation 82855PM Processor to I/O Controller (rev 03)
00:01.0 PCI bridge: Intel Corporation 82855PM Processor to AGP Controller (rev 03)
00:1d.0 USB controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 01)
00:1d.1 USB controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 01)
00:1d.2 USB controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 01)
00:1d.7 USB controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 81)
00:1f.0 ISA bridge: Intel Corporation 82801DBM (ICH4-M) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801DBM (ICH4-M) IDE Controller (rev 01)
00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 01)
00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 01)
00:1f.6 Modem: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 01)
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] RV200/M7 [Mobility Radeon 7500]
02:00.0 CardBus bridge: Texas Instruments PCI4520 PC card Cardbus Controller (rev 01)
02:00.1 CardBus bridge: Texas Instruments PCI4520 PC card Cardbus Controller (rev 01)
02:01.0 Ethernet controller: Intel Corporation 82540EP Gigabit Ethernet Controller (Mobile) (rev 03)
02:02.0 Network controller: Intel Corporation PRO/Wireless LAN 2100 3B Mini PCI Adapter (rev 04)
Everything was working, but network. The wireless device would not initialise at all. If we do ‘/sbin/ifconfig’ device does not report wireless connection, if we check ‘/sys/class/net’ the wireless device is not listed.
As can be seen from the output of ‘lspci’ the wireless device is Intel Ipw2100. I had tried everything I could think of (drivers, firmware, PHY, wpa_supplicant, ppp etc.). I even enabled almost all PCMCIA, PCI, ISA options thinking it could be related to one those (I’m not master Oogway, you know). Nothing worked.
I used genkernel instead of handmade kernel. Wireless did not work. I have LMDE on another partition and network worked fine on it. So, it was not issue with hardware itself. I then copied config from LMDE (although it is few version behind Gentoo’s), ran ‘make oldconfig’ which ‘Gentoo’ised the config and then compiled kernel. Now to my surprise the network started to work!
I was not satisfied, because in most of the distros the kernels are generic and contain almost all of the features provided in the kernel (except perhaps debug options), either built-in or as modules. That’s not the way I want my kernel. That’s not the way we live on Gentoo side.
I took a diff of my original config and LMDE’s modified config, especially giving attention to network/PHY/driver/firmware related terms. I configured and compiled my kernel again. Alas, the network would not work. Then I noticed something. When the system would boot on LMDE or Gentoo with modified LMDE config, the wireless LED would glow at a stage that reads something like “…waiting for uevents…”. When I booted my kernel, wireless LED would not glow at the same stage.
I googled and found it was related to device initialization by udev. One link led to another and gave idea on further refining my search. I finally ended up on this page. The moment I read initial few lines I rolled on the floor laughing at my stupidity. All the while I was doing a silly mistake. I ‘compiled-in; the ipw2100 driver into my kernel (as I do mostly, to avoid an initrd) whereas the help section for this driver clearly mentioned to compile it as a ‘module’! Following is the excerpt from the help file:
It is recommended that you compile this driver as a module (M)
rather than built-in (Y). This driver requires firmware at device
initialization time, and when built-in this typically happens
before the filesystem is accessible (hence firmware will be
unavailable and initialization will fail). If you do choose to build
this driver into your kernel image, you can avoid this problem by
including the firmware and a firmware loader in an initramfs.
This is the reason why it was working on LMDE and Gentoo compiled with modified LMDE config because (almost) all drivers in other distros are built as modules.
I had spent nearly 12-13 days scratching and banging my head, in frustration, trying to figureout what mistake I was making. My mistake was soooo fundamental: not reading help section/manual. I deserve to be RTFMed! 😀
Anyway, it was a wonderful experience. Now, let me concentrate on installing useful software so that I can turn an aging hardware into useful workstation.