Device Driver & Kernel
Development Services
Home > Product Design > Software Engineering > Device Driver & Kernel Development
​
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)
​
Device Drivers
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.
Development Tools
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.
Debugging
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.
​
Additional Information
NK Labs offers electrical, mechanical, and software engineering services and can serve as a one-stop shop for any technical project.
​