We, the Penguin Software group, provide software engineering services in the area of Linux-based and custom Embedded and Real-Time Systems. Among the services we offer to our customers: porting firmware and
operating systems to custom hardware and writing device drivers. We have extended experience on Linux, under several architectures, like x86, ARM9/11 (s3c24xx, ixpxxx, arm11 mpcore, mx31), SH4 and PowerPC (8xx) and Freebsd.

We mostly work with Linux, either the mainline kernel or its modified
versions that better suit real-time workloads and embedded
architectures. However, we have some experience with Xenomai and
FreeBSD, as well as with SHaRK and Minix -- research biased -- kernels.
Recently, we started experimenting on the new and, to us, very promising
Android framework. We are now able to offer support, feature
enhancement and personalization, and porting to new architecture.

We have strong theoretical background in the field of real-time systems,
in particular on schedulability analysis for uni- and multiprocessor systems,
protocols for accessing shared resources, resource reservation algorithms
and reconfigurable devices.

We've started working on the NEO Freerunner 8 months ago (I am the one that did most of
the work on the Freerunner and on Android), doing mostly kernel work.
As it often happens when working with the kernel, one does not produce
intependent pieces of code, but works fixing things, adding features to
existing drivers and/or subsystems; we try to work in coordination with
the official maintainers of the code we work on, so those are some
things I submitted to the community:

- integration of the android patches.
- a lot of fixes in the openmoko kernel
- libsensors
- liblights
- fix libvibrator
- fix resume on neo
- write multiplexer radio interface layer on freerunner and fix some
radio interface problem
- change the multiplexer to support the telit umts module in the gzimo FLOW device
www.gizmoforyou.com

As you may have noticed from our website, I've been quite active on
Android in the last months; I've been releasing several versions of
kernel + userspace.

In this case, getting patches merged upstream has been more difficult and I decide to create a fork.
You can find at git.moko.serdar-dere.net/cgi-bin, that was recently moved and merged with community
tree at http://code.google.com/p/android-on-freerunner/.

Now We are working on the glamo acceleration part for Android and try to reuse the work done by the glamo-drm projects and audio capture layer of Android.

Linux activities

we worked on various different things; for most of them we cannot share the sources,
given the agreements with our partners (we prefer to work with the open source community and
to share our results, but we accept also contracts that do not allow that).

Anyway we have experience with the following hardware:

+ ARM9: we ported linux to several custom s3c24xx based boards,
installed on naval equipment (the porting included writing support
inside U-Boot, and drivers for keyboard, encoder, CF hotplugging;
moreover we wrote a build system and gave support to the porting
of an existing application).

+ ARM9: we realized a BSP for an at91sam9260-based board and fix
some issue on this architecture related to the serial device, and we
evaluated xenomai on it.

+ IXP: ehci-core and ehci-ixp driver for u-boot
+ We did also minor works on platforms like mpc8xx and ARM MPCORE.

+ http://feanor.sssup.it/~fabio/linux/bfq/Budget Fair Queueing I/O scheduler. A disk scheduler whose code was picked up by people from Google and RedHat for their proposal for an I/O controller in linux; the
patches based on fabio's work were posted there:

An implementation of the popular Earliest Deadline First (EDF)
scheduling algorithm for the Linux kernel. It is still experimental
code, and it is still continuously being improved, but it already is a
fully-working solution for supporting typical real-time applications in
the GNU/Linux environments.

An implementation of another popular real-time scheduling algorithm, the
Sporadic Server (SS). This is mainly developed for research purposes,
but is anyway solution for providing temporal isolation to POSIX
real-time Linux processes.
http://feanor.sssup.it/~fabio/git/?p=sc ... ;a=summary

An instrumentation of the Linux kernel process scheduler to enable
real-time guarantees, most important temporal isolation, to user space
applications. Quite the same objective of the SCHED_SPORADIC (and,
partly, of SCHED_DEADLINE) but with different approach a features.