Linux Device Drivers for a Marine GPS Product
Linux Device Drivers
We were contacted by Raymarine, a UK company building specialist marine electronics products, to develop Linux device drivers for a new product family. The family was based on a Freescale i.MX31 ARM CPU connected to several external devices, some via a custom FPGA. Linux drivers were not available for the devices, so drivers were to be written from scratch. The kernel and core Linux components were provided in an SDK from Freescale.
When discussing the project with the client, we quickly recognised a need to help them transition from an RTOS-based development model by providing a C-based userspace API to the devices, hiding the complexity of each kernel device driver from the application. We designed the API to be compatible with the application code's use cases.
Working closely with the client's hardware engineers, we implemented the project off-site using prototype hardware. We delivered each device driver with a C library, exposing a simple API for application use and a simple command-line test application to demonstrate its use.
The delivery included source code for the device drivers, C libraries and test applications, together with makefiles and developer documentation. Everything was done to allow our client to integrate the device drivers into their applciation as quickly as possible; they concentrated on their application, leaving us to worry about the low level, Linux bits.