Ubuntu on an Acer Ferrari - Hoary

Table of Contents
I am planning on updating this page to Breezy as soon as I get some free time. I am using breezy full time, and it is working much better than hoary in some aspects (function keys, etc), the same in most (wireless,sound,dma, etc.) and worse in one (HW Accel) although it's easily fixable.
Although this page specifically targets Ubuntu GNU/Linux, I am willing to work with users of other distro's in order to make the instructions on this website be as generic as possible. Please email me if you have suggestions on how to make this better. Please DO NOT email me if you are having problems, use forums as they are publicly available and will be archived for others to see. Email Address. The following are the goals, or the items I intend on making work:
I assume no responsibility for what you do with this information. The University of Calgary assumes no responsibility for what you do with this information. It is in no way official, or supported. It may break your computer, or delete your data. What you do with these instructions, you do at your own risk.
I wanted to take complete advantage of the 64 bit CPU in this laptop, so I decided to install Ubuntu GNU/Linux x86_64. I will warn anyone who does this however, that there are many software packages from the universe and multiverse repositories which are not present in the x86_64 edition. For me this was most notable in the mono applications. I had to install all of the mono suite and finally Tomboy by hand, which is not so hard now that Tomboy 0.3.3 has been released.
There is a bug with some of the older kernels, specifically those which are available in Hoary. This bug causes some 64 bit computer to run slowly (the CPU registers as being 50% used constantly even with no programs working). The following link explains how to fix this, which involves a kernel upgrade. http://www.ubuntuforums.org/showthread.php?p=278589
Directly after the ubuntu install, you may notice that the computer slows down significantly when accessing the disks. This is because DMA isn't enabled, and I had problems enabling it until after I upgraded the kernel as defined in the APIC section. After this DMA was enabled automatically on the harddrives, and the problem disappears.

The graphics subsystem is one of the biggest problems with the laptop. Ubuntu correctly identifies the graphics card, and sets up the appropriate xorg.conf file. However, somewhere along the technology chain, something switches the primary display to the vga-out and the secondary display to the laptop's LCD. Because it's not being told to clone the display, it switches off the secondary display (the LCD) when starting X.org. The end result is a black screen after X.org starts. The quick and easy fix to this is to add the following to your Section "Device":


Option "CRT2Position" "clone"
Option "MonitorLayout" "LVDS,CRT"
		

This allowed me to use the laptop with the full 1680x1050 resolution in order to debug and set up everything else. I'm not sure where the bug exists, (Module, Ubuntu Configuration, etc) but I will inform the ubuntu developers and hopefully they will track down where the bug exists for breezy.

To obtain working hardware accelaration, you need to use a more recent driver than the one available in Hoary. There are likely a number of ways to do this. I'll leave it up to you to decide. I dislike fiddling, and every time I've ever used the ATI installer, I've had to fiddle to no-end. To avoid fiddling with the xorg.conf and module compilation, I decided to upgrad my driver to the one which is in breezy. I recommend that you do not follow what I did, but rather go and find a copy of the breezy fglrx driver and install it by hand using:

sudo dpkg -i xorg-driver-fglrx.deb

What I did: Do this at your own risk

I edited the apt sources and changed every reference of 'hoary', 'breezy', then I ran apt-get update and finally, I upgraded the fglrx driver. Rememeber that I should immediately change the sources.list back to it's original form by changing 'breezy' to 'hoary' and running apt-get update. If you forget to do this or you install any sort of updates while the apt-sources are in this form, you will end up with breezy install.

sudo vim /etc/apt/sources.list
sudo apt-get update
sudo apt-get install xorg-driver-fglrx
sudo vim /etc/apt/sources.list

Once you have done this you need to make sure that you are using the appropriate driver, namely: fglrx. I used the fglrxconfig. If you do it this way, then you will have to edit /etc/X11/xorg.conf and add the following to Section "Device" which corresponds to the fglrx driver:


Option "CRT2Position" "clone"
Option "MonitorLayout" "LVDS,CRT"

Then, restart your X-server and use:

lakin@zedd:~$ glxinfo | grep direct
direct rendering: Yes

to test if it's working.

The wired networking was working out of the box. I haven't even bothered to find out which module it was using.

Wireless worked well using ndiswrapper as per the following sites:

http://www.detla.de/index_ferrari.html

First, I installed ndiswrapper using synaptic, then I downloaded the:

ftp://ftp.support.acer-euro.com/notebook/ferrari_4000/driver/winxp64bit/80211g.zip

and installed it using:

sudo ndiswrapper -i bcmwl5.inf
sudo modprobe ndiswrapper

Then I tried using one of the 5 unprotected networks surrounding my apartment using the gnome-networking tool which is found in System -> Administration -> Networking.

The touchpad should work out of the box, in fact, I'm pretty sure Ubuntu properly setup the xorg.conf file to use it appropriately, but through some bug somewhere, the psmouse kernel module needs to be removed and reloaded in order for the touchpad to start working.

DVD Playback had me worried, as I kept seeing the following in my logs:

[  637.266077] hdc: command error: status=0x51 { DriveReady SeekComplete Error }
[  637.266081] hdc: command error: error=0x50 { LastFailedSense=0x05 }
[  637.266084] ide: failed opcode was: unknown
[  637.266086] end_request: I/O error, dev hdc, sector 12126124

In the end, I'm fairly certain this was simply due to the region not being set on my DVD drive, which is easily solved by installing the regionset application through synaptic, and then running it with sudo. Remember, you can only change your region on your DVD drive a specified number of times, so be careful with this utility.

sudo apt-get install regionset
sudo regionset

You should then install libdvdcss. I leave this exercise up to you. Totem still refused to play the DVD, due to some codec issues:

** Message: don't know how to handle video/mpeg, mpegversion=(int)2, systemstrea m=(boolean)false
** Message: don't know how to handle audio/x-ac3

which was solved by installing all of the gstreamer-plugins:

sudo apt-get install gstreamer0.8-plugins
I'm sure that this is overkill to solve the problem, but in my case, I figured that extra media plugins was probably a good thing. Gnome even autostarts the totem when the DVD is inserted into the drive.

Update: I haven't looked at or used these versions of the dsdt but they may be of help to someone: ftp://ftp.suse.com/pub/people/jeffm/acpi/. After installing the machine, you can look at the output of dmesg and notice the following error messages:

Aug  9 15:15:04 localhost kernel: ACPI: Subsystem revision 20050211
Aug  9 15:15:04 localhost kernel:     ACPI-0352: *** Error: Looking up [Z00I] in namespace, AE_NOT_FOUND
Aug  9 15:15:04 localhost kernel: search_node 000001003fadc2c0 start_node 000001003fadc2c0 return_node 0000000000000000

These are specifically due to a buggy ACPI implementation shipped with the computer. I spent a long time figuring out how to fix this and if it wasn't for these pages, I would have had NO clue:

http://acpi.sourceforge.net/download.html,

http://gaugusch.at/kernel.shtml

The essential idea behind this method is that you should make a copy of the buggy acpi implementation (dsdt.asl) from the bios, then you fix a number of typos and errors in it, and you can then recompile it. Once you have a compiled version without the errors, you should instruct your kernel to use this new version instead of the version found in the BIOS.

I have had a number of reports mentioning that this method did not work for them. I suspect that it might have to do with the kernel that they are using. I upgraded my kernel to the kernel in breezy before trying this ACPI fix. Others have reported success with compiling their own kernel. I'll try and get more information soon.

The first tool that we need is a tool which can be downloaded from here (Note this compiled without problems for me):

http://www.intel.com/technology/iapc/acpi/downloads.htm

The second tool is here:

http://people.freebsd.org/~takawata/pacpidump.tar.gz

It took a bit of fiddling to get acpidump to compile correctly: First, edit the makefile and comment out the FreeBSD Cflags and uncomment the Linux CFLAGS. Then, open up acpi.c and starting at line 75, make it look like this:

        printf("DefinitionBlock (\n"
        "\"acpi_dsdt.aml\",     //Output filename\n"
        "\"DSDT\",              //Signature\n"
        "0x%x,                  //DSDT Revision\n"
        "\"%s\",                        //OEMID\n"
        "\"%s\",                        //TABLE ID\n"
        "0x%x                   //OEM Revision\n)\n",
        dsdt_header.rev, oemid, oemtblid, dsdt_header.oemrev);
}

After this, type make and it should compile fine. I then copied both the acpidump and the iasl program to the directory where I would do all of this work. The following command is used to grab a copy of the dsdtl:

sudo ./acpidump > dsdt.asl

Then to compile this file you can use:

./iasl -tc dsdt.asl

If you compile it directly after getting a copy of it, you will encounter with all of these errors.

Intel ACPI Component Architecture
ASL Optimizing Compiler / AML Disassembler version 20050624 [Aug  9 2005]
Copyright (C) 2000 - 2005 Intel Corporation
Supports ACPI Specification Revision 3.0

dsdt.asl   124: Method(_WAK, 1) {
Warning  2026 -           ^ Reserved method must return a value (_WAK)

dsdt.asl   201:                 If(\_OSI) {
Error    1028 -      Too few arguments ^  (\_OSI requires 1)

dsdt.asl   202:                     "Windows 2001.1"
Error    1037 -                                    ^ syntax error, unexpected PARSEOP_STRING_LITERAL

dsdt.asl   207:                     If(\_OSI) {
Error    1028 -          Too few arguments ^  (\_OSI requires 1)

dsdt.asl   208:                         "Windows 2001 SP1"
Error    1037 -                                          ^ syntax error, unexpected PARSEOP_STRING_LITERAL

dsdt.asl   213:                         If(\_OSI) {
Error    1028 -              Too few arguments ^  (\_OSI requires 1)

dsdt.asl   214:                             "Windows 2001"
Error    1037 -                                          ^ syntax error, unexpected PARSEOP_STRING_LITERAL

dsdt.asl  2622:                         If(LLess(\_PR_.CPU0._PPC, Local1)) {
Error    1022 -                          Object does not exist ^  (\_PR_.CPU0._PPC)

dsdt.asl  2623:                             Store(Local1, \_PR_.CPU0._PPC)
Error    1022 -                                   Object does not exist ^  (\_PR_.CPU0._PPC)

dsdt.asl  2635:                                 If(LNot(LEqual(\_PR_.CPU0._PPC, 0x0))) {
Error    1022 -                                        Object does not exist ^  (\_PR_.CPU0._PPC)

dsdt.asl  2636:                                     Store(0x0, \_PR_.CPU0._PPC)
Error    1022 -                                        Object does not exist ^  (\_PR_.CPU0._PPC)

dsdt.asl  2908:                 Method(DRUL, 1) {
Warning  2019 -                           ^ Not all control paths return a value (DRUL)

dsdt.asl  3596:                 If(LNot(LEqual(\_PR_.CPU0._PPC, 0x0))) {
Error    1022 -                        Object does not exist ^  (\_PR_.CPU0._PPC)

dsdt.asl  3597:                     Store(\_PR_.CPU0._PPC, Local1)
Error    1022 -                   Object does not exist ^  (\_PR_.CPU0._PPC)

dsdt.asl  3598:                     Store(0x0, \_PR_.CPU0._PPC)
Error    1022 -                        Object does not exist ^  (\_PR_.CPU0._PPC)

dsdt.asl  3601:                     Store(Local1, \_PR_.CPU0._PPC)
Error    1022 -                           Object does not exist ^  (\_PR_.CPU0._PPC)

dsdt.asl  3658:             Z00I,
Error    1022 -                ^ Object does not exist (Z00I)

dsdt.asl  3659:             Z00I,
Error    1022 -                ^ Object does not exist (Z00I)

ASL Input:  dsdt.asl - 3914 lines, 149638 bytes, 2558 keywords
Compilation complete. 16 Errors, 2 Warnings, 0 Remarks, 986 Optimizations

The first and easiest to fix, is the Z00I error (the last two). Simply open up dsdt.asl and change all occurances(without the quotes) of 'Z00I' to 'Z001'. For the following errors, I will try and be explicit about which line numbers are affected. Because we are inserting new lines and changing lines, the line numbers will only be accurate if you do these changes in the same order.

The first change occurs on line 175. In this case you must insert a new line BEFORE this line, with the following value:

Return(Package(0x02){0x00,0x00})

The next change is the most complicated of them all, and I'm not even positive it is the right change. It does allow us to compile this file without errors, and because it deals with windows related stuff, I'm fairly certain it is harmless. Find all instances of 'If(\_OSI) {'. These should each be followed by another line which has the name of a particular version of Windows in quotes. Reduce these two lines so that they look like this: (The first one is given as an example)

If(\_OSI("Windows 2001.1") ) {

There are three occurances of these, do it for all of them.

Then insert these lines BEFORE line 2910:

Else
{
    Return(0x0)
}

The final change is to add the following line AFTER line 83:

External (\_PR.CPU0._PPC)

Finally, when you compile it after making these changes, you should see a success message and a file called DSDT.aml should appear in that directory.

lakin@zedd:~$ ./iasl -tc dsdt.asl

Intel ACPI Component Architecture
ASL Optimizing Compiler / AML Disassembler version 20050624 [Aug  9 2005]
Copyright (C) 2000 - 2005 Intel Corporation
Supports ACPI Specification Revision 3.0

ASL Input:  dsdt.asl - 3916 lines, 149726 bytes, 2540 keywords
AML Output: acpi_dsdt.aml - 22997 bytes 662 named objects 1878 executable opcodes

Compilation complete. 0 Errors, 0 Warnings, 0 Remarks, 985 Optimizations

Congratulations, you are half way there. We've now 'fixed' the ACPI stuff. Now we need to let the computer know that we should be using this as our dsdt implementation. To do this you must add this file to the end of the initial ramdisk with some special magic.

lakin@zedd:~$ cp /boot/initrd.img-2.6.12-6-amd64-k8 .
lakin@zedd:~$ echo -n "INITRDDSDT123DSDT123" >> initrd.img-2.6.12-6-amd64-k8 # magic signature
lakin@zedd:~$ cat DSDT.aml >> initrd.img-2.6.12-6-amd64-k8
lakin@zedd:~$ sudo cp initrd.img-2.6.12-6-amd64-k8 /boot/initrd.img-2.6.12-6-amd64-k8.fixed_acpi
Password:
lakin@zedd:~$ sudo rm /boot/initrd.img
lakin@zedd:~$ sudo ln -s /boot/initrd.img-2.6.12-6-amd64-k8.fixed_acpi /boot/initrd.img

Reboot, and the battery status should be able to be read correctly now. Sheesh what an effort.

Jordan Steinberg has informed me of the following, but I haven't had a chance to check it out:

To get your method to work, I had to...

1)  apply the DSDT in initrd support and initramfs problems patches
(both at http://gaugusch.at/kernel.shtml) to the kernel
2)  compile to source an option "Allow external DSDT (new)" or something
of the like in the ACPI power mngmt settings in make menuconfig
3)  recompile the kernel (I did it with 2.6.13)
4)  then use your method to append the fixed DSDT to the initrd

It didn't work (and I tried several times) before taking these
additional steps.  But it works beautifully now.  I should also note
that I did a BIOS flash before all of this to A21 instead of the A19 it
shipped with.  This may be why I had to take these extra steps.

Ubuntu mostly configured this out of the box, but it didn't install some of the necessary packages:

sudo apt-get install bluez-pin bluez-utils

After installing these packages turn on the hidd server by editing /etc/default/bluez-utils and changing the following line:


HIDD_ENABLED=0

to:

HIDD_ENABLED=1

Make sure the button for the bluetooth is on in the front (it should be glowing blue). Then restart the bluez-utils package:

sudo /etc/init.d/bluez-utils restart

After this I think it should be working, move your mouse around, click some buttons and/or use the button on the bottom of the mouse to initiate the connection. I should mention that I did not get it to work very well until after I used the gnome-bluetooth-manager package to discover the address of my device and then I ran:

sudo hidd --connect XX:XX:XX:XX:XX:XX

Since then blue tooth has been working upon boot with no extra work. I simply make sure that bluetooth is "on" and move the mouse.

This is not completely working. To start, you should edit the /etc/default/acpi-support and turn on sleep support. Then I ran /etc/acpi/sleep.sh

This succesfully puts the laptop to sleep. However, I cannot yet succesfully get it back from sleep mode. The screen does not come back on.

In this section I am going to provide some of my working configuration files. I do this so that users of other distributions have a reference point. I do not recommend that you simply download and use these configuration files. Especially for another distribution. These files are not perfectly configured, and there are many issues I should still work out.

If you do use these files as a reference and you find any problems that I can fix, I would appreciate knowing about them.

A copy of my xorg.conf

A copy of my dsdt.dsl

A copy of my /boot/grub/menu.lst

A copy of my /etc/modules

A copy of my lsmod output. Because I am using stock ubuntu kernels this output is fairly long, and may contain many unused modules.