Device Driver & Kernel
We have written drivers for these operating systems and platforms:
Linux, Windows, MacOS, Android, IOS, NuttX, RTEMS, FreeRTOS, NetBSD
We have written drivers for the following types of hardware:
Bluetooth and BLE Radios
MIPI CSI Cameras
MIPI DSI Displays
MIPI Unipro Bridges
Cell Phone Power Management Controller
Windows and Linux Drivers for Medical PCIe Capture Card
Cryptographic Accelerator and FIPS Card Drivers
Trusted Platform Module (TPM) Drivers for Secure Boot
Multi-Stage Bootloaders and OTA Firmware Update Systems
Bluetooth Classic Host Interface Driver
Wi-Fi Host Interface Driver
Sensor Drivers (Temperature, IMU, Pressure Sensing, Haptics, Battery Charging, Fuel Gauges)
A device driver is software that allows an operating system to communicate with a specific piece of hardware. Device drivers are needed to interface a new chip to an embedded operating system or to interface a new hardware device to a PC. NK Labs has extensive experience writing device drivers for variety of operating systems.
Selecting the Operating System
Embedded Linux is the default choice in the industry today for consumer devices (e.g. Android phones, set top boxes, home Wi-Fi access points). However, devices that need real-time performance guarantees will need to use an RTOS (Real-Time Operating System). We have team members who have experience writing drivers for Linux, FreeRTOS, RTEMS, VxWorks, and Windows, as well as customer-specific proprietary OS environments.
In most cases, the OS will dictate which tools to use for developing, building, installing (and/or programming), and testing the software. We are comfortable in either Windows or Unix based tool environments.
Writing the Driver
We start by writing a design document, which is reviewed by the team working on the project, and in some cases by the customer. We take a build-up approach to software development: starting with one device at a time, until the entire software package is complete. Once software is ready to test, the EE (electrical engineer) responsible for the PCB design is engaged to help out with board/driver integration and debug.
We use logic analyzers, protocol analyzers (SPI, I2C, UART, MIPI), network analyzers (Wireshark, Ubertooth, etc), and purpose-written test programs to prove out our software/hardware designs. Our on-site EE team helps us bring out the appropriate signals to test headers and reason about the operation of the board, so we can efficiently get to the root cause of difficult hardware/software interaction bugs.
Bug Tracking, Version Control
We usually use JIRA for bug tracking, and GIT for version control, but we are also happy to use your internal systems. We typically set up a continuous integration server (e.g Jenkins / TeamCity) to do automated nightly builds so the hardware engineers, QA team, and the client can always have access to the latest binaries.