Fedora Core 1 on Acer TravelMate 361EVi

Recently, I have upgraded Linux on my Acer TravelMate 361Evi to Fedora Core 1. The main reason to upgrade is that FC1 is the basis to develop packages for LinuxTLE 5.5, the next major release of Thai Linux distro that I have contributed my works to.

Kernel

FC1 comes with kernel 2.4.22-1.2115.nptl, which is – like RH’ve done before – a collection of many patches ahead of 2.4.22 backported to 2.4.22. So, their kernel is very unique and sometimes we are not comfortable with that when we recompile our custom kernel :(

First thing you should know that FC1 provides 3 versions of gcc: 3.3.2, 3,2,3 and 2.96. For kernel and kernel modules, you should use gcc 3.2.3. There are reasons for this (try google, or RHN if you want to know about). So. every time you compile kernel or kernel modules, be sure that you export CC=gcc32.

The first kernel issue of FC1 is that the yenta_socket problem is back! I don’t know the reason why it happens again, but this can easily be fixed like before, just disable PCMCIA/Cardbus support in kernel and use the pcmcia-cs package instead. — done! (One thing I’ve noticed is that those yenta_socket problem always comes when I use RH kernel, but not if I use vanilla).

Okay, yenta_socket could be workaround. The next thing is that FC1 will not start ACPI by default, So I have to put “ACPI=on” as a boot parameter. Well, 361EVi does need ACPI. Otherwise, it would not shutdown when asking OS to do so (and I need to push the power button). So, put ACPI=on in /etc/grub.conf. Oh, by the way, if you use lilo, I’d suggest you to upgrade to grub, lilo will be deprecated soon.

So far, that’s all the MUST do things in kernel. The rest are optional but I’d recommend you to look around.

Display

There are things you should do in your kernel to make display works properly. First, VESA Framebuffer won’t work anymore, but they introduced the new Intel Framebuffer (CONFIG_FB_INTEL), which should work better. So I used intelfb, and ignore the vesafb. I can still put VGA=xxx as a boot parameter, though.

For better graphic performance, AGPGART should be enabled (either CONFIG_AGP_INTEL or CONFIG_AGP_I810). DRM should be set to i830 (CONFIG_DRM_I830). I got nearly 600 fps of glxgears with 16-bit depth.

For XFree86, the device section should be something like this:

Section "Device"
        Identifier  "Videocard0"
        Driver      "i810"
        VendorName  "Videocard vendor"
        BoardName   "Intel 830"
EndSection

Sound

You can use sound support from the kernel (CONFIG_SOUND_ICH) if you want to. if you want to use ALSA as I do, here is the way. First, kernel should enable sound support (CONFIG_SOUND) but *DO NOT* select any drivers. Then, grab alsa-driver source, extract, and

./configure --with-cards=intel8x0,virmidi
make
make install

You may also want to change /etc/modules.conf to be:

alias snd-card-0 snd-intel8x0
alias snd-card-1 snd-virmidi
alias sound-slot-0 snd-card-0
alias sound-slot-1 snd-card-1
alias char-major-116 snd
alias char-major-14 soundcore
options snd major=116 cards_limit=2
options snd-intel8x0 index=0
options snd-virmidi index=1
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
alias sound-service-1-1 snd-seq-oss
alias sound-service-1-8 snd-seq-oss

PCMCIA

Okay, for FC1, pcmcia-cs driver is needed as I described above.

My /etc/sysconfig/pcmcia is:

PCMCIA=yes
PCIC=i82365
PCIC_OPTS="do_scan=0"
CORE_OPTS=
CARDMGR_OPTS=

If you use vanilla kernel instead, you can just ignore pcmcia-cs package, then use kernel PCMCIA driver, and /etc/sysconfig/pcmcia should be changed to:

PCMCIA=yes
PCIC=yenta_socket
PCIC_OPTS=
CORE_OPTS=

As usual, enabling PCMCIA makes the Orinoco Wireless LAN works immediately because it is hard-wired on 361EVi board.

10/100 Ethernet

This should work by default, but if it does not, or you want to

customize your kernel, be sure to choose either CONFIG_E100 or CONFIG_EEPRO100 (I use EEPRO100 compile in kernel). If you choose to compile as a module, put this into your /etc/modules.conf

alias eth0 eepro100

or

alias eth0 e100

Ports/Combo Drive

All should work.

Power Management

Well, I’d suggest you to use ACPI instead of APM. ACPI seems to be better than APM for 361EVi. FC1’s kernel also supports CPU Frequency Scaling (a.k.a SpeedStep, PowerNow!, those kind of things to switch CPU frequency on-the-fly). I enabled CPU Frequency Scaling to save battery when power is offline. These are things I set in your kernel:

#
# CPU Frequency scaling
#
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_TABLE=y
CONFIG_CPU_FREQ_PROC_INTF=y

#
# CPUFreq governors
#
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_24_API=y

#
# CPUFreq processor drivers
#
CONFIG_X86_SPEEDSTEP_ICH=y

Rebuild the kernel, and after reboot the new kernel, I got these in /proc/cpufreq:

         minimum CPU frequency  -  maximum CPU frequency  -  policy
CPU  0       731500 kHz ( 73 %)  -     997500 kHz (100 %)  -  performance

I can set frequency and power policy to save mode by:

echo -n "0:731500:997500:powersave" > /proc/cpufreq

And bring them back to full-speed by:

echo -n "0:731500:997500:performance" > /proc/cpufreq

Use cpufreqd if you want it changes frequency and/or policy automatically.

Fedora Core 1 and NPTL

Fedora Core introduces a new thread library called NPTL (Native POSIX Thread Library). Linux will use this sooner or later. NPTL increases speed of your programs by implementing thread operations natively. This would increase speed of operations like start/stop threads, etc. People have tested the performance of NPTL and it can be 4xx faster than non-NPTL. But, a bad news is that it is not backward compatible to Linux thread, so your programs may crash (segfault, etc..)… Fedora people know this and already put a workaround. By setting LD_ASSUME_KERNEL environment, you can force to disable NPTL support. So, try:

$ LD_ASSUME_KERNEL=2.4.19 /path/to/your/program

if your program fails to operate on FC1.

Well, that should be all for now. Have fun !