Device Driver and Kernel Development Services

 

Home > Product Design Software Engineering > Device Driver and 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

  • Custom FPGA-based Peripherals

  • 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 and on-site electronics technician help 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.

We can help with your project.