Use our embedded development services
And get the most out of your hardware
Amarula Solutions provides embedded development services for Android and Linux, with mainlining as specialty. Amarula also provides training courses. You can find more about our services on this page.
Get in touch with us
One of Android’s success factor is its openness. The majority of the Android software is licensed with Apache 2.0. Android has taken Linux as its kernel because of Linux’s well known models in security, process and memory management, drivers and protocol stacks. Between the kernel and the application layer, Android designed a complete mobile software stack taking advantages from well known projects out of the open source ecosystem. This approach enabled a fast growth of Android covering the whole set of functionalities exposed by a modern mobile device.
Our portfolio of successful customizations project of the Android platform enables us to adopt the better strategy tailored on your specific needs, lowering development costs and offering you robust and effective solutions.
In short, we are able to guide you both in hardware and/or software designing to guarantee that the final target can take complete advantage of this powerful OS.
Examples of possibilities
- Developing of customer specific functionalities of applications
- Developing of native libraries due to Android framework lacks
- Guidance in hardware development to ensure hardware (components) will work with Android
- Android bring up on a newly designed target
- Migration from an unwanted OS to Android
- Optimization of Android subsystems
Amarula Solutions has built its experience in embedded systems for more than a decade studying and developing Linux as the heart of it’s embedded software solutions. We are active daily in developing Board Support Packages (BSPs), device drivers, protocol stacks porting and user space application developing.
Typical tasks we have performed
- Bootloader porting
- Porting of custom drivers from Windows CE or Linux 2.4 to Linux 2.6 kernel
- Optimization of boot-time
- Customized API development for specific customer needs
- Feature enhancements for existing board support packages
- User or Kernel level modules developing to support various layers of protocol stacks for embedded applications
Board support packages
A Linux BSP is the entire set of system customizations needed to enable the execution of Linux from boot to applications on a defined hardware environment called target. The Amarula Solutions development team has been involved in several successful BSP customizations tasks, from a single driver optimization to the whole BSP developing from scratch.
Our experience covers the ARM, MIPS, PowerPC and SH processor architectures and on the ARM one we teamed up with several platform vendors, such as: Freescale (i.MX), Texas Instruments (OMAP) and Marvell (PXA).
Subsystems we have been working on
- SD/MMC/SDIO host controllers
- Compact Flash
- Ethernet Controller, PHY devices
- Audio codecs
- WiFi enhancements
- Power management IC
- Backlight, Display, LCD Controller
- Camera devices
- I2C, SPI bus, I2S, UART
- Keypad, Touchscreen
- USB Host Controller and USB Device
Device driver development
The device driver development can be considered as a subtask of BSP customization. We’ve done multiple driver customizations and/or optimizations and developments from scratch. The list below outlines some of the subsystems we have worked upon:
Other than specific board support code, we have experience in core kernel customizations in the Scheduler and Memory Management area.
If the customer has a private codebase, we are able to review and consolidate it in the way the final patchset will be ready to apply successfully the community review process in a timely manner even if the entire codebase have to be rewritten from scratch. This will be done in a complete community driven style hitting the correct mailinglists as soon as possible and managing the community interaction while the code will be merged in mainline.
The mainline is the place where the open source project thrives. It is an ever changing codebase that, during time, is consolidated in it’s functionalities and expanded to fit user’s needs. Amarula Solutions has a wide experience in merging private modifications of a common codebase (mainline) into it.
Our experience of the Linux development process, gathered working tightly with the development community, enables us to manage effectively the community interaction. Amarula will always achieve the mainline merge of private code and has wide experience in developing lacking functionalities.
Depending on the needs of the customer and the size of the private codebase, we are able to schedule the mainlining task and, taking care of project development process, we will prompt the customer the feasible project version that will contain the full final patchset.
Amarula always offers the possibility to take care of the maintenance of the upstreamed code, in case the customer itself do not want to take care of this task.
Read more at our blog
To answer at this blog's question, there are cases where a patch or patchset should reach the community even before its coding. The answer is the general “it depends”: it depends on what functionality is implementing the merging patchset, on how deeply changes the...read more
Have you noticed the power of open source software? Have you made efforts on customizing an open source project licensed with a GPLvX license? Have you based your business on an open source project? The question now is: why you do really think that maintaining a...read more
As the name says, mainlining is the process that aim to get merged private modifications of a common codebase (mainline) into it. Open source projects thrives around a common codebase called mainline This is not a trivial point: the mainline is the place where the...read more
Amarula Solutions provides training intensive courses to specific topics which are actual in the embedded development and open source scene. Courses are available in the English, Italian, Spanish and Dutch language. Contact us for draft a course schedule tailored on your needs.
Examples of Android training course topics
- Android porting: tasks and strategies
- Customizations of the Android Hardware Abstraction Layer
- Optimize power management within kernel drivers
Examples of Linux training course topics
- User-level programming
- Concurrent programming on POSIX systems
- Graphic libraries for embedded devices
- U-Boot hacking
- Linux kernel internal disk/net/scheduling