When I published my last post about ARM boards there were many questions and suggestions with interesting devices. Thank You all for it.
But there were also suggestions about ARM9 or ARM11 based devices. So I decided that it is good time to write what interest me now in ARM world.
But first some inventory. I had/used/have several devices with ARM cpu:
StrongARM (armv4) one:
- Sharp Zaurus SL-5500 (which took me to ARM world)
ARM920 (armv4t) ones:
- Openmoko GTA01 bv3, bv4 (s3c2410)
- EDB9301 (EP9301 cpu)
- Sim-One (EP9307)
ARM926 (armv5te) ones:
- Sharp Zaurus sl-5600 (pxa250)
- Sharp Zaurus c760/sl-6000 (pxa255)
- Sharp Zaurus sl-c3000 (pxa272)
- Sheevaplug (kirkwood)
- Atmel devboards (at91sam9263, at91sam9m10)
- ST-Microelectronics/ST-Ericsson NDK-15, NHK-15 (st88n15)
- Nokia 770 (omap1710)
- Linksys NSLU2 (ixp425 iirc)
ARM1136 (armv6) ones:
- Nokia N810 (omap2430)
- Bug r1.0, r1.2 (i.mx31)
Cortex-A8 (armv7a) ones:
- Beagleboard B7, B7, C3 (omap3430)
- Nokia N900 (omap3430)
- Nexus S (exynos3)
- Genesi Efika MX Smartbook (i.mx51)
- Freescale Quickstart (i.mx53)
Cortex-A9 (armv7a) ones:
- Pandaboard EA1, A1 (omap4430)
- Archos G9 80 (omap4430)
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.
And wait for ARMv8 to hit market.
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 😀
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).
My desktop has few RS232 ports:
- one FTDI RS232-USB converter
- one connected to mainboard
- 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:
|Koala Nano PC
|Linkstation pro duo
|kirkwood reference board1
||Core-i7 920 Quad
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.
Some time ago I got AT91SAM9263-EK board which was given by Atmel company. It is not first developer board which I use but first which I own 😉
Currently I run 2.6.28 kernel on it and have a problem with audio as it works only via OSS emulation and OOPS when ALSA is used directly. I tried 2.6.20 and 2.6.29-rc2 but problem was the same.
Today I moved from nfsroot to root on NAND flash. But this time I used UBIFS instead of JFFS2 (which I used in past on devices). Kernel is still fetched from TFTP server but I will change that later (there is a space on flash still). I have to admit that my old setup (tftp kernel + nfsroot) is really handy for rapid development — no need to copy anything to device, no need to remember about syncing when RESET key is pressed etc.
Next plans for board? Not defined yet but I know that I will use it for quite long time as main development platform.
Nearly two years ago I wrote about end of Zaurus production. This news ended on many websites around the globe (mostly without quoting source). But it was not end — Sharp was producing Zaurus clamshells from time to time during those two years.
In December 2008 there was another set of news that Sharp ends Zaurus production. This time it looks like real end. Marc from TRISoft told on OESF forum:
Last production run was March 2008. And we’re now out of stock with new units. Looks like it’s now really over and out.
I ended my work on Zaurus machines about year ago. OpenZaurus was ended, I had job to do and other devices to support. But still from time to time I used my c760 for some debug sessions (usually in cases where QEMU was not enough). With serial cable and wifi card it was good substitute of developer board.
Today I got Atmel AT91SAM9263-EK board. Will work on it on Monday and it will be my main testing/development platform for some time. Probably next will be BeagleBoard or other OMAP3 based device.
Koen’s post about AVR32 Network Gateway and few posts on usenet reminded me that many people still think that small devices are crap and lack power to do anything.
Do they? I think that not. Here I use two small embedded devices:
- Linksys NSLU2 as NFS server (plans are to add TFTP, Samba, CUPS and Bluetooth AP)
- Linksys WRT54GS as router/firewall
Both do their work without any problems, both runs Linux and opensource distributions (OpenSlug and OpenWRT).
Soon will add something based on one of AT91 devboards but more to experiment with software then normal usage. And as I have 20 pin header soldered to OpenMoko debug board it can even be bricked (JTAG port was already tested with other device then Neo1973).
Great thing is that systems like AT91SAM9263EK, Gateway or STK1000 (another AVR32 devboard from Atmel) can be used to produce many different devices — I remember talk with one guy who shown his developer board (about A4 size) and final device (small rugged mobile device with barcode scanner) and told that this devboard was used to create about 10 misc models.
My friend made a project of own device based on AT91 ARM cpu with few peripherials. Total cost was less then 100 EUR and it can be used to different tasks and also give possibility to learn how to write kernel code (to handle all addons).
As Cliff Brake wrote: you cannot afford to not use Linux in your own projects. There are too many drivers and ready to use code to not make use of them. You can even get nice modules for less then 100 dollars (ARM, AVR32, x86 based) if you do not want to design own one. Then next step is OpenEmbedded and you have problem which software to choose as there is too much to choose 🙂