Matthias Brugger, embedded engineer at ISEE, describes the steps the company had to follow (referred to as a “war story”) to port Android 4.0 to a custom industrial board at ELCE 2012, Barcelona, on November 5, 2012.
This talk will explain the lessons learned by giving a step-by-step introduction of porting Android to a custom board which was designed for an industrial environment. This includes an introduction to the Android build environment, first board bring-up and peripheral integration. The talk will cover bootloader integration, power management. It will focus on the peculiarities configuring Ethernet and Wi-Fi in Android. Also button and display integration, as well as integration of third-party accelerator support will be explained.
Android devices are getting popular not only in the mobile market but although in the industrial environment. Porting Android to a custom board can be challenging, especially as little information about Android internals are available. The talk is addressed to embedded developer and CTOs who regard the introduction of Android in the industrial field.
His talk features the key points below:
- Android beyond smartphones? – Good for HMI centred embedded systems
- Why a war story – Little documentation, small community, vendor specific communities, developing process of Android, and a huge jungle of programming languages. Although Android is based on Linux, Android is not Linux, and there are many differences.
- Our custom board – Industrial board based on TI OMAP3 without battery monitor, nor phone function, but with buttons, Ethernet…
- Android building system
- Lessons learned
- Add device – Devices are found under device/<manufactor>/<board> folder with 4 files: <device_name>.mk, device.mk, BoardConfig.mk and vendorsetup.sh.
- Bootloader/Kernel integration – Specific toolchain needed, and extra boot parameters required (androidboot.console=ttyO2, init=/init).
- Power supply – The system hangs at boot time because there’s no battery monitor => Add a “test power driver” to shows battery 50% charged.
- Button – Code in frameworks/base/services/input. Key Layout File (/system/usr/keylayout) maps raw input key to internal Android key representation, and Key Char Map File (/system/usr/keychars) describes action for internal Android key
- Touchscreen calibration
- Wi-Fi – 5 different folders with userspace code… Legacy implementation reads wpa supplicant config file (/data/misc/wifi/wpa_supplicant.conf). A template is available in /system/etc/wifi/wpa_supplicant.conf. Drivers and firmware path defined in BoardConfig.mk.
- Sound – Audio player is stagefright, AudioFlinger interfaces hardware abstraction.
- HW acceleration – Add own multimedia framework and implement wrapper for audio (AudioTrack) and video (Surface).
You can also download the slides for this presentation.