OpenBSD on the Acer Aspire One, At Ten

It’s often amusing to go back in time and look at what you were using back then. Ten years ago I wrote about putting OpenBSD on my then-new Acer Aspire One AO-D150. That machine ran for years, but eventually got turned into a Windows box for another user, and was ultimately retired due to a broken hinge and some issues trying to get Windows 10 working. Almost exactly a decade later, my brother handed me a similar Aspire 1, an AO-D250. Slightly more stylish case, different motherboard, but really not that much different. It was also running Windows XP, and his attempts to get it dual-booting with OpenBSD hadn’t worked out. So I swapped in a hard drive with a clone of an existing OpenBSD-only laptop, and booted up. And… Silence.

D’oh! Low-cost netbooks from ten years ago were 32-bit; everything since has been 64-bit (“amd64”). So I downloaded OpenBSD’s i386 (32-bit) “install64.iso”, put it on a USB drive, and booted into the “update” option, replacing all current binaries with 32-bit. Boom! System up and booting.

Of course nothing from packages worked, so I did “pkg_add -u”,
which was only partly successful, since some of the packages use other packages during their installation. I wound up using pkg_delete on most of them. In hindsight, it would probably have been better 
to newfs /usr/local and then rm -r /var/db/pkg/*!

The battery wouldn’t hold a charge, as I found out when I moved the unit and the power plug came out of the wall. That was easy — I swapped in the battery from the remains of the AOD150 — the batteries are identical. Now it holds enough charge for at least half an hour :-) There are third-party batteries on eBay and Amazon if I start using the machine seriously.

Next problem: trackpad not working. It was in a weird state — when switching from Console to X11 (CTRL/Alt/F1 or F5), you could move the mouse exactly once, then it would disable. In looking at my own old article from ten years ago, I found there was a function key combination (Fn+F7) to enable/disable the trackpad. Problem solved!

Next: No wifi. There is a half-height, mini-PCI card way down inside the netbook, and it has the same infernal Atheros AR5424 as my older D150; this little gem shows up as ath0 but does not work! This is a ten-year-old well-known problem that’s unlikely ever to be fixed, even though the GPL/BSD-licensed Linux ath5k driver allegedly works with this chipset.

I picked up a TP-Link TL-WN821N v2 USB WiFi dongle which the machine recognized as otus0 at the used computer store. otus(4) mentions this exact wifi unit in its description of this driver for the Atheros AR9000 series. Alas, it turns out that the combination of the otus driver and this chipset is not very reliable. So, try something else.

otus0 at uhub0 port 1 configuration 1 interface 0 “ATHER USB2.0 WLAN” rev 2.00/1.06 addr 2
otus0: MAC/BBP AR9170, RF AR9102, MIMO 2T2R, address …
otus0: could not send command 0x1 (error=INVAL)
otus0: could not send command 0x1 (error=SHORT_XFER)
otus0: timeout waiting for command 0x01 reply
otus0: could not send command 0x1 (error=TIMEOUT)
otus0: could not send command 0x1 (error=TIMEOUT)
otus0: could not send command 0x1 (error=TIMEOUT)
otus0: could not send command 0x1 (error=TIMEOUT)
otus0: could not send command 0x1 (error=TIMEOUT)
otus0: could not initialize MAC

Shortly after this, a patch was committed that makes otus a bit more stable, but apparently it’s, ahh, not one of the better drivers. I should note that I sent my OK for that patch over an otus wifi connection, so it does work once in a while. But not enough to be used seriously, so on to another solution.

I also had a full-height Mini-PCIe Intel 5000 (iwn) card in hand, but didn’t want to strip the machine down only to find out that the card didn’t fit (one teardown showed a half-height wireless card, but didn’t make clear if there was room to replace it with full-height). However, an inspection of the D250 showed there to be a second Mini-PCIe slot, readily accessible. This was allegedly for WAN use — what we’d now call Mobile/Cellular Data. So I tried the iwn card. No joy.

After some searching, I got the iwn card to work without dismembering the whole computer. The second Mini-PCIe slot just needs the “put tape over pin 20” trick that is apparently well-known in the world of peeps who stick
PCIe network cards into orifices where they aren’t expected (I’m talking about computer card slots). Pin 20 is the “wireless card disable switch” signal, which (a) apparently isn’t connected to the second slot and/or (b) defaults to “disabled”, so the iwn thought it was meant to stay powered off. I didn’t believe it would work, but it seemed easier to try than to buy a half-height card and tear the machine apart. To my wondering eyes, a very tiny strip of tape over one contact on the IWN solved this problem, and I got:

iwn0 at pci4 dev 0 function 0 “Intel WiFi Link 5100” rev 0x00: msi, MIMO 1T2R, MoW, address 00:21:5d:…

I ran some random-length antenna wires inside the case, and with these it works well enough near my router’s ral(4) card external antenna. Well enough, that is, to scp a copy of the BSD kernel from the Aspire One through the router to a remote server. And it has been working fine for days. Took it out to Starbucks and it works fine there too. Dunno what happens when the tape turns to goo in a few years, but probably something else will die first.

One problem from the old version that did not recur — previously, the SD card had to be present at boot-up or it wouldn’t be detected. Now, that part works just fine — inserting an SD card shows up, and I have hotplug set up to mount it on /mnt. Just works!

But wait! There’s more! While everything above was fixed in a day or two, this last problem was a real stickler, and stopped me from using it as my coffee-shop-hopping keyboard: the computer doesn’t come back from suspend (either zzz or closing the lid). It reboots instead. The battery is OK as mentioned. Swapping the RAM chip didn’t help. The problem occurs on 6.2 and 6.4, the only releases I tried so far. So the inability to resume is either a hardware problem, unique to this particular D250, or a glitch in an 8-year-old (last updated in 2010) BIOS/ACPI implementation that our ACPI interface doesn’t handle.

This problem still happens, and will be worked on “someday.”. I guess if it’s ever fixed I’ll update here.

Full hibernate, ZZZ, also failed to resume, with “unhibernate failed: original kernel changed”, but that is a known interaction between ZZZ and “Relinking to make unique kernel”. I can live without hibernate. But not without suspend/resume…

So in the end I have a working netbook again (well, it has to be rebooted and shutdown instead of suspend/resume, but that’s OK if you remember to power off before closing the lid). The machine is seriously underpowered for some kinds of serious development, but just fine for others. You wouldn’t run Eclipse or IntelliJ and a Wildfly test instance with ten different Java webapps, but it’s fine for writing and running C code, and of course web surfing, office documents, games, and more.

real mem = 1062182912 (1012MB)
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Atom(TM) CPU N270 @ 1.60GHz (“GenuineIntel” 686-class) 1.60 GHz, 06–1c-02
cpu1 at mainbus0: apid 1 (application processor)
cpu1: Intel(R) Atom(TM) CPU N270

The RAM can (and probably will) be upgraded, and the hard drive replaced with an SSD, fairly inexpensively (see for example https://www.crucial.com/usa/en/compatible-upgrade-for/Acer/aspire-one-(d250)).

A gig of RAM and a dual-threaded Atom CPU. And yet, with OpenBSD, it’s enough to do some kinds of serious work. The same can not be said for operating systems that expand their resource usage without end. I wound up with an OK coffee-shop computing platform: light weight, low power, OK battery. Some people would go out and buy a new MacBook Air or a Google PixelBook for the purpose, but I’m willing to keep a ten-year-old netbook that is in good condition not only out of the landfill or recycling, but up and running with the latest OpenBSD and some add-on packages.