Flashing the BIOS on the Acer Aspire One

While there is an excellent, often referenced article on the macles site about flashing the BIOS on the Aspire One, it strikes me as being a little less clear to the Linux newcomer than it might be. This brief article is an effort to to fill in the gaps, and is completely based on his page, though any mistakes are, of course, my own.

Why flash the BIOS

There is always an element of risk in flashing the BIOS. However, many Aspire One owners have suffered from what has become known on the Aspire One forums as the black screen of death. This may happen for no reason, or might happen after modifications in hardware or software. The power LED will show green but the screen is completely black.

The first time it happened to me, I returned the machine. The second time, I thought of doing so again, but the other available netbooks are either much lower in specs or higher in price, so I decided to flash the BIOS (which does almost always fix the issue, as it did in my case) and keep it.

These are the steps. It is assumed that you have either prepared a USB stick in advance or that you have another working computer with a Linux installation. The instructions given are for Fedora and Ubuntu, but hopefully, the reader with another working distribution will be able to adapt it to their installation. It is also assumed that you have an extra USB stick.

Prepare the USB stick by creating a DOS partition

NOTE:A Windows user on the forums has suggested that I add a note suggesting that Windows users format the drive on the AA1. This of course, implies that you're going to prepare one before you need it, which is an excellent idea. He also found that it didn't work for him until he formatted the drive with FAT32 rather than FAT. (You'll see that the link I give for preparing the drive suggests using FAT16 rather than FAT32.)

Make sure that the USB drive is not mounted. In many cases, especially if using Gnome, it will be mounted automatically at /media/Disk. You can check this by just typing "mount" (without the quotes) at a command prompt. If you see something like /dev/sdb or /dev/sdb1 on /media/Disk, unmount it with the umount command. For example
umount /media/Disk

(Note that the command is umount, not unmount. There is no n after the u.)

To format the drive, follow the instructions from the Fedora project's article on creating a live USB.

That link gives the commands as well as the expected output. Sometimes, people overlook the final step of initializing the partition. Make sure you follow all instructions, ending with
su -c 'mkdosfs -n usbdisk /dev/sdb1'

(Assuming of course, that your USB stick was seen as /dev/sdb).

To prepare the drive with FAT32 in Linux follow the instructions in the link given above, but after doing the t for toggle file system, hit the letter c. This gives a FAT32 file system.

After having done w for write, rather than the mkdosfs command given above, use
mkfs.vfat /dev/sdc1

Download unetbootin

As the macles article says, the easiest way to get a DOS system on the USB stick is to use the excellent unetbootin program. If using Ubuntu, you can simply download the .deb package. If using Fedora, click on the link to download for Linux. It is an executable program. Save it somewhere on your hard drive where you can find it. Although macles says you can ignore the error messages about missing p7zip and vol_id, as I use the program frequently for other purposes (it's extremely useful, in many cases, for creating a bootable USB from an ISO image) I consider it worth installing the other programs it needs. In Ubuntu, one can install the necessary dependencies with
sudo apt-get install mtools p7zip-full

In Fedora, as root or with root privilege (in the example, I will also use sudo)
sudo yum -y install syslinux mtools p7-zip p7zip-plugins

In Fedora (and probably Linpus Lite, the default installation on the Linux version of the Aspire One), one more step is necessary. Unetbootin looks for vol_id and in Fedora, will complain that it doesn't find it. In Ubuntu, /lib/udev/vol_id is symlinked to /sbin/vol_id. Unetbootin is written to run on Ubuntu, and Fedora doesn't have this symbolic link. I link it to /usr/bin, since, prior to Fedora 10 /sbin isn't in a normal user's PATH. (See my article on paths in Fedora for a more complete explanation.).
cd /usr/bin
sudo ln -s /lib/udev/vol_id

This will prevent unetbootin from complaining about being unable to find vol_id.

If you get an error message about libaudio then, in Fedora, you may have to make a symlink. Fedora names files differently. In Unetbootin-313, running on CentOS, I got an error that it needed libaudio.so.2. I believe this is considered a bug, so the user may not run into this--hopefully, it will be fixed soon. However, if you do have the problem, it should be fixable by linking /lib/libaudiofile.so.0.
cd /lib
ln -s libaudiofile.so.0 libaudio.so.2

Lastly, make unetbootin executable. (If one installs the .deb package, this may be done for you, I haven't tried it.)
chmod 755 unetbootin-linux-293

(293 is the latest version at time of writing. Your version may be have a different number at the end.)

Install FreeDOS on the USB stick

The USB partition must be mounted for unetbootin to use it. In Ubuntu, running Gnome, it should automatically mount if you unplug it and plug it back into the machine. In Fedora, (where I don't run Gnome) this may work in Gnome, but doesn't in Fluxbox, my window manager. If the drive isn't mounted, then do so.
sudo mount /dev/sdb1 /mnt

Now run unetbootin. Assuming you've saved it to your Desktop directory, at a command prompt (again, I'm using the 293 version, if your version has a different number, use that)
cd Desktop
./unetbootin-linux-293

The macles page has a good screenshot of what you want to do. From the dropdown menu at the top, click the radio button for Distribution and choose FreeDOS. (The second box, reading 1.0 should be automatically selected for you.)

At the bottom, assuming you've formatted the USB drive as per the instructions in the Fedora article, it should show as in the macles screen shot, with Type being as USB Drive and Drive reading /dev/sdb1. Click OK and unetbootin will install FreeDOS to the USB.

Get the latest BIOS and unzip it to the USB drive.

The macles site usually has a link to the latest BIOS. (Aspire One users all owe a tremendous debt to macles for his articles and other work, such as making the BIOS available, posting extremely useful links on the forums, etc.) At time of writing, the link is here.

Download the zip file for the latest version. In this case, we'll assume that you're using Fedora and /dev/sdb1 is mounted on /mnt. We'll use the latest version at time of writing, ZG5_3305.zip and assume that you've saved it in your home directory. If using Linpus Lite, this would be /home/user, but in this case, we'll assume there is a user named john. Substitute /home/john with the location of the zip file
cd /mnt
sudo unzip /home/john/ZG5_3305.zip

Once unzipped, you find a directory, probably called BIOS-3305. It may have a slightly different name, depending upon the version that you downloaded and the download site. (Different sites seem to have packed it slightly differently.)

IMPORTANT NOTE
At present, the latest BIOS version is 3309. Many people, including myself, have found that this particular BIOS version seems to have a negative effect on wireless networking, with the card frequently losing connection. As of early March, 2009, my advice is to use the 3305 BIOS.

It is possible that the files will be in the BIOS-3305 directory, or there may be another subdirectory, possibly called 3305, that contains them. Once you find them (it's not hard) :), follow the next steps.

As per macles' instructions, rename the ZG5_3305.fd file (or whatever file has the .fd suffix--this will change with BIOS version) to ZG5IA32.FD.
mv ZG5_3305.fd ZG5IA32.FD

If your browser's font doesn't make it clear, that is an upper case letter "i" after the 5 and before the A, not the numeral one.

Run the ls command (by just typing ls) to make sure you renamed it correctly. It might show up as lower case, i.e., zg5ia32.fd, this is fine and seems to be a peculiarity of FreeDOS.

Copy both the renamed file and FLASHIT.EXE to the root directory of your USB drive. In other words, copy them out of whatever directory and/or subdirectory that they're in.
cp <path_to_directory>/FLASHIT.EXE /mnt
cp <path_to_directory>/ZG5IA32.fd/mnt

For example, in the file that I am looking at as I write this, those two files are in /mnt/BIOS-3305/3305. So, my command in this case would be, assuming I was in the BIOS-3305/3305 directory (where I went to rename the .fd file)
cp FLASHIT.EXE /mnt
cp ZG5IA32.fd /mnt

Now, your /dev/sdb1 should have those two files in there as well as in any directories or subdirectories created when you unzipped the file. Do a quick check with ls /mnt to make sure they are there. You should see them as well as some other files that were created when you installed FreeDOS.

Flash the BIOS

The macles article, linked at the beginning of this page, covers this pretty thoroughly. I'll do a quick repeat here.

Turn off the Aspire One.
Make sure that both battery and AC power cord are connected. Insert the USB stick that you prepared.
Press Fn+Esc and press the power button to turn the machine on. Release Fn+Esc after a few seconds. The power light should be blinking.
Press the power button once and the machine will initiate the BIOS flash. DO NOT INTERRUPT THIS.
After a little while, the button should stop blinking. The machine should reboot itself shortly.

If it doesn't reboot, then wait at least 5 minutes to be sure that it isn't still flashing the BIOS. If it doesn't work, try again, making sure that you've followed the procedure correctly.

For the majority of people, judging from the forums, this solves the black screen of death.

Once again, many, many thanks to macles. I reiterate that all mistakes, however, are my own.