I graduated from a study in Technical Computer Science in 1999 with a bachelor degree. Prior to this, I was active as a programmer in the hobby computer scene. My professional career started in 1994 for a large printer manufacturer in the Netherlands. Since 1999, I am working on non-real-time printer software. During 2001, I became active in the field of real-time printer control software, with a focus on operating systems, device drivers, and timing. Starting in 2003, I worked on using a single platform for the combined operation of real-time printer control and non-real-time printer control software for data processing/throughput.
First we started doing this while running on LynxOS from Lynuxworks. Due to continuous problems with some 3rd party software that did not run well on this RTOS (It was not designed for LynxOS, but could run on it due to the Linux ABI compatibility layer of this LynxOS), we started searching for an alternative in early 2005. A logical step was to make the switch to Linux, but Linux was not real time enough at that time. We started looking at the preemptive 2.4 kernels, but migrated soon to the Montavista-4 2.6.10-RT kernel. It turned out to be a good route to go. But do to increasing hunger for CPU-speed and the lack of Priority Inheritance on Mutexes, we moved to newer kernels and newer CPU/chipsets to run on. Eventually we ended up using Fedora Core 6 together with a 2.6.20-rt8 kernel on a Core-2-Duo(E6300) system with a Intel 945 chipset. This was the 1st kernel that really ran stable on our boards with our real time requirements and data throughput requirements, without having to patch a lot of things in the kernel ourselves. Eventually we get equal real time results on these boards as with LynxOs and VxWorks without loosing much data-processing/throughput capabilities, and with the advantage of the much more complete set of development tools, recent hardware support etc.
Early 2007 I started using real-time Linux on (proprietary) ARM based cores from Atmel (AT91 series), but on these boards we only need to run the hard real time application to control the printer hardware, without the data process software that was needed on the Intel boards. It turned out that these boards are limited supported by the real-time patch, and I am still working to get these boards complete and running stable. The basic real-time patch runs fine, but several drivers do not like the preemptive kernel, and could BUG() sometimes, Even interrupt sharing is a big problem, because many devices in the at91-cores share the same interrupt line which is shared with the Timer interrupt, and thus run in the IRQF_NODELAY context. The faulty drivers are not designed for this context. I am working on a patch-set for these type of boards, and will publish the patches during the process, when they are ready, or on request (e.g. in the LKML).
During the years I found out that very little was written on how to write RT-applications on Linux, especially if they have to run beside heavy non-RT applications. This is the reason why I shared some of the basics on HOWTO:_Build_an_RT-application and the Frequently_Asked_Questions .
Remy Böhmer (linux AT bohmer DOT net)