All of that during last 8 years. Most of my ARM live so far was around ARM926 based devices (some of them still can not be listed here) and I do not want to go there again. Kirkwood core was fastest one with 1.2GHz clock and 512MB of RAM it was really fast machine. I only missed Serial ATA in my Sheevaplug (rev 1.0) but even with hard drive on USB it was nice improvement.
Then I played a bit with ARM11 processors. Ok, they were faster than most of ARM9 cpus but I already had experience with Sheevaplug. And after few months first Cortex-a8 board landed on my desk — I got Beagleboard B7 from Bug labs as test platform for their new device. This was improvement!
I still remember my reaction when connected it to normal LCD monitor and saw it used at 720p resolution (1680×1050 was a bit hard for omap3). Moved to Nokia N900 few months later and found that fast cpu means nothing when paired with slow storage and not enough memory for system.
So today I prefer to not look below Cortex-A9 (or comparable cores like ones from Qualcomm or Marvell). Hope to play one day with Cortex-A5 (which should replace ARM926 one day) just to see how low-end armv7a cpu behave.
I have few different devices on my desk. Some has big community (BeagleBoards), some has forums with users (AT91SAM9263-EK), some have forums and irc channels (BUG) and I try to be present in most of them to help people, learn from mistakes etc.
The common problem which is shown there is “how to get XYZ working on my board”. People tries to use random toolchains without checking are they compatible with distribution running on board (usually it is CoreSourcery toolchain when board runs Ångström) to build software. Most of time they hang on irc to find some help about how to use configure, make, how to handle build time dependencies etc. Why they add themself so much trouble I have no idea…
Solution is mostly easier: provide some kind of network access for device and use package manager which came with root filesystem. For Ångström it will be “opkg” which is really easy to use. Basically user needs to know about few commands only:
opkg update to fetch repositories data
opkg upgrade to upgrade to newest available software
opkg list | grep NAME to check does NAME is available in repositories
opkg install NAME to install package (with dependencies)
For BUG commands are basically the same but “ipkg” is installed instead of “opkg”.
What it gives for users? More software available, less time spent on getting required applications and less problems. OK, not everything is available in repositories — but why not ask developers can it be provided?
Recently I got my AT91SAM9263-EK board back (it was not booting due to problem with backup battery) and decided to upgrade it to 2.6.30 Linux kernel.
But I got problem which was UBI subsystem not able to initialize. This looked strange but after checking what is going on I found reason. Before I was using 2.6.28-at91-exp kernel build with OpenEmbedded and at91-exp patch added “Bootstrap” flash partition so I had three of them in NAND and just two under 2.6.30 release. Changing “bootargs” in U-Boot solved problem.
I also enabled several things in kernel:
I²c with eeprom support
keyboard (which is just two keys: “left button” and “right button”)
leds (all 3 of them)
To get sound working I updated linux-2.6.28-exp.patch to newer version and also removed most of code from it (which supported newer boards). I did not yet tested too much how resulting kernel works but at least it boots properly and supports most of components.
Other AT91 boards should work fine with 2.6.30 but I lack access to hardware so no plans for update currently.
Some days ago I exchanged my MOS9835 based I/O card with newer version based on MOS9845. Old one had one parallel port (which I never used) and two serial ports. New one do not have parallel port but has 6 serial ports instead. Why so much?
The answer is simple — more devices on desk require more ports. I could go into USB-serial adapters and buy bunch of them and create set of udev rules to make them stick with device node names. But I read too many stories when such adapters works when 2 of them are used but adding 3rd breaks config. So I bought PCI card.
Is it useful? Yes, it is. Does it add new problems? Few, but simple ones.
First problem is to get proper numbering of ports. As mainboard used in desktop has one serial port already I wanted it to be /dev/ttyS0 and additional ones to be /dev/ttyS[1-6]. But fun starts in kernel config…
There are few options which controls amount of serial ports in total (named CONFIG_SERIAL_8250_NR_UARTS) and amount of runtime registered ports (named CONFIG_SERIAL_8250_RUNTIME_UARTS). To get sane numbering I had to play with those values a bit. I set NR_UARTS to “10” (just in case) and then RUNTIME_UARTS to “7” so ports works like I wanted.
Next thing is guessing which port is which ttySx node. I did that by connecting devices and checking with “picocom” which one is which. Now connectors are signed with number on one side :D
Last thing was adding names to device nodes as it is easier to use /dev/ttyALIX then remember that Alix is connected to /dev/ttyS2 port. So currently I have this config:
not used yet
I use also serial cable with BUG but as it has female connector I use USB adapter with it. Have to buy female->male cable for it so it will use ttyS3…
This is how it looks on desktop side:
And one more thing — few readers suggested to use cards which adds 8 serial ports. I have to admit that I was thinking about it but decided against it. I already have lot of cables under desk and adding such hydra (card connector -> 8 cables with DB9 connector) would make it even harder to organize.
Next cables to organize would be network — each device on desk wants at least one Ethernet cable…
On my desk I have lot of things which require power. USB hubs, developer boards, customer devices etc. So far I counted 3x12V (ngw100, at91sam9263ek, edb9301) and 4x5V (usb hubs, beagleboard, bug). I do not count under desk devices because there is more space so extra cables from power supplies are not a problem (voltage is more problem as they use 6V, 9V or other less popular ones).
How to power all of them? So far I use few 5V power adapters (originally made for Sharp Zaurus, HP iPaq or usb hubs) and one 12V one (so only one 12V devboard at time). This has to end as it occupy too much space and power sockets.
So I bought old 200W ATX power supply in local computer shop specialised in old devices and parts from them. It is small but works. Now I need to buy few meters of cables (two colours — one for 12V and other for 5V) and do soldering job. The good thing is that ATX PSU require shorting just two cables to power up (PS ON with GND).
two on additional PCI card (which also gives me parallel port)
When I got BeagleBoard I had to remove the one connected to mainboard — connected that cable to BB itself. But today I got new package from Atmel: NGW100. And it means need for serial port too…
What for I use all those ports? Developer boards of course :)
At91sam9263-ek from Atmel
NGW100 from Atmel
To end that crazy situation I am planning to buy extended version of card which I use now but with 6 rs232 ports instead of just two. Will lose parallel port but I never used it and if will ever need it there will be a card with it somewhere in drawer/box.
I never thought that will need so many serial ports…
At FOSDEM 2009 I grabbed one Vortex86SX based device — Koala Nano PC which is available at Koan software. Device came with Ångström distribution and was running 2.6.26 kernel. I wanted to get something more fresh on it and after some fighting I booted 2.6.29-rc5 kernel today.
Device use Vortex86SX SoC which is based on 486SX core. Yes — this is x86 machine without FPU. Overall speed of that is… nearly not existing.
First benchmark which came to my mind was “hdparm -T /dev/sda”. Results were dramatic: 9-13 MB/s for cached reads (with 133MHz memory and 300MHz cpu). I decided to compare against other devices:
But remember that this test is not so good for benchmarking — I am preparing better set of tests to really compare speed of devices. So far it contains openssl speed and MP3 encoding/decoding.
But device has also few nice things. Everything is integrated so 12x12cm box is enough to keep everything inside. It has ATA controller, FastEthernet, graphics based on XGI core (with accelerated framebuffer able to do 1680×1050 resolution) and working USB. There is a place to put 2.5″ HDD inside (normally it boots from CompactFlash card), second Ethernet or WiFi are available options…
But what is use for such slow device? There are lot of ARM based ones which offer similar (or better) functionality and are faster… But wait — there is one use: event displays as this machine has nicely working framebuffer (I got even 1680×1050 resolution).
UPDATE: added results from iBook G3 300MHz and some other machines.
kirkwood reference board uses same cpu as SheevaPlug device. ↩